Just nu i M3-nätverket
Gå till innehåll

Jämföra texter i områden med åtgärd vid träff


Tommy H

Rekommendera Poster

Hej!

Har någon något bra tips om hur jag ska lägga upp ett makro där jag söker efter förkomsten av lika texter?

Det kan se ut enligt följande i t.ex kolumn O:

 

tom rad

tom rad

KALLE

KALLE

KALLE

tom rad

tom rad

tom rad

tom rad

KALLE

KALLE

KALLE

KALLE

KALLE

KALLE

tom rad

tom rad

 

osv.

Jag vill då att det andra sammanhängande området med "KALLE" ska föregås av ett primtecke och ett mellanslag.

typ ' KALLE

 

Sedan kan det ju längre ned i kolumnen finnas liknande träffar med andra namn, som då också kräver samma åtgärd.

 

På något vis så känns det som det blir något med jämföranden i områden, eller?

Vet nte riktigt hur jag ska ta tag i det...

 

/TH

Länk till kommentar
Dela på andra webbplatser

Kanske

=OM(A2="";"";OM(A2<>A1;OM(ÄRFEL(PASSA(A2;$A$1:A1;0));A2;"' "&A2);B1))

om dina värden står i A-kolumnen.

 

skriv in i B2

Länk till kommentar
Dela på andra webbplatser

Oj!

Ursäkta min odtydlighet!

Jag måste köra i VBA.....

Det går ju inte bara att "översätta" formeln till makros stuk.....

 

/TH

Länk till kommentar
Dela på andra webbplatser

Varför VBA nu när jag gett dig formel :)

 

Men, tja, en kod som stegar igenom kolumnen.

Vid träff på ett nytt namn, sök i kolumnen fram till nuvarande cell. Om ingen träff, gör inget.

Om samma värde i cell som föregående, gör inget.

 

Om träff med sök, gör vad du vill...

 

Inte svårare än så, klarar du det?

 

Skickar tråden till forumet VBA

Länk till kommentar
Dela på andra webbplatser

Jo, VBA-koden ingår i ett större sammanhang, så därför behövs den!

Formeln ja, jo den i sig själv är ju intressant men som sagt!

 

Om jag klarar det själv?

Det kommer att ta tid och energi, men jag ska givetvis försöka!

Det känns ju rätt med att stega sig fram som du föreslår!

Fungerar det inte så höra jag av mig :)

Länk till kommentar
Dela på andra webbplatser

"några minuter"....


Suck!


Det lär ta några dagar om det räcker för mig....


Har du lust så vore jag ju korkad som inte sa TACK om du vill det så...


:)

Länk till kommentar
Dela på andra webbplatser

Sub TextSkoj()
    Dim lastCell As String
    Dim rnData As Range
    Set rnData = Blad1.Range("a2:a100")
    Dim i As Integer
    For i = 1 To rnData.Cells.Count
        If rnData.Cells(i, 1) <> "" Then
            If rnData.Cells(i, 1) = lastCell Then
                rnData.Cells(i, 1) = rnData.Cells(i - 1, 1)
            Else
                lastCell = rnData.Cells(i, 1)
                If Not Range(rnData.Cells(1, 1), rnData.Cells(i - 1, 1)).Find(rnData.Cells(i, 1)) Is Nothing Then
                    
                    rnData.Cells(i, 1) = "' " & rnData.Cells(i, 1)
                End If
            End If
         End If
    Next i
    

End Sub

Notera, starta på rad 2 annars blir det fel i koden. Orkade inte ta hand som första rad...

Sätt referensen rnData så den passar dig men, som sagt, starta på rad två.

 

Länk till kommentar
Dela på andra webbplatser

  • 11 months later...

Hej!

Ja, det var ett års sedan detta var uppe, och det räckte uppenbarligen inte med mina två dagar för att lösa det!

Det är något i koden som inte stämmer och jag kan inte ser vad!

Jag vill alltså skilja två grupper med samma textinnehåll åt genom att en av grupperna förses med ett primtecken följt av mellanslag. (se mitt första inlägg).

Det förekommer alltid ett antal tomma celler mellan grupperna!

Det som sker nu är att den andra gruppen text raderas, då den enligt koden? ska vara lika en tom cell ovanför. Det är säkert något väldigt enkelt men jag ser inte var det är fel...

 

/TH

Länk till kommentar
Dela på andra webbplatser

Nämen, välkommen tillbaka.

 

Tror inte koden ovan riktigt svarar på din fråga så jag frågar på den.

 

Det är samma text som upprepas i två olika områden på i samma kolumn varav den ena ska få ett inledande mellanslag?

 

Det är aldrig att det finns tre grupper med samma ord?

 

Så då räcker det med att koden letar reda på första gruppen ord, behandlar denna och sedan avslutar?

Sub TextSkoj()
    Dim lastCell As String
    Dim rnData As Range
    'område att söka i
    Set rnData = Blad1.Range("a2:a100")
    Dim i As Integer
    'stegar genom
    For i = 1 To rnData.Cells.Count
        'om icke tom
        If rnData.Cells(i, 1) <> "" Then
            'om samma som senaste icke tomma
            If rnData.Cells(i, 1) = lastCell Then
                ' lika med föregåend cell
                rnData.Cells(i, 1) = rnData.Cells(i - 1, 1)
            Else
               lastCell = rnData.Cells(i, 1)
               rnData.Cells(i, 1) = " " & lastCell
               
            End If
         End If
         If rnData.Cells(i, 1) = "" And lastCell <> "" Then Exit Sub
    Next i
    

End Sub

 

Länk till kommentar
Dela på andra webbplatser

Hej tillbaka själv!

Jo, det går i vågor mitt VBA-pulande...

 

Texterna kan iofs förekomma i mer än två olika områden, men det är ovanligt. Det kan man ju lkösa genom att låta makrot köra ytterligare en gång i så fall.

Det kan ju dock förekomma olika textområden som är lika, t.ex kan ju "NISSE" förekomma i 2st olika områden samtidigt som "OLLE" och kanske "Pelle" också kan göra det.

Det innebär ju att bara för att makrot har behandlat "NISSE" så kan det vara flera andra texter som ska plöjas igenom och behandlas.

Btw saknas det inte ett primtecken i koden ovan?

/TH

Länk till kommentar
Dela på andra webbplatser

Så listan kan vara, jag tar på en rad för enkelhetens skull, i stil med

 

kalle, kalle, kalle,  , , , , kalle, kalle, , , olle, olle, olle, , , arne, arne, arne, , ,olle, olle, olle.

 

 

Där då i alla tillfällen första instansen av ett namn ska få ett mellanslag (de kursiverade). Arne ska få även om det inte finns fler Arne i texten.

 

' namn

är samma sak om

 namn.

Länk till kommentar
Dela på andra webbplatser

Jo typ så, med skillnaden att "Arne kan få ett mellanslag också. (behövs ej egentligen).

 

Vet inte riktig vad du menar med följande:

' namn

är samma sak om

 namn

Eller är det ett mellanslag före det "sista" namn?

Länk till kommentar
Dela på andra webbplatser

Sådärdå, ett litet dumt fel i koden ändrat så nu stämmer det med din ursprungliga önskan

 

 

Och ja fnutt (') framför något är en indikation för Excel att det är text. Fnutten har inger annat värde.

dvs att bara stoppa in ett mellanslag framför är samma sak som att skriva '_

Sub TextSkoj()
    Dim lastCell As String
    Dim rnData As Range
    Set rnData = Blad1.Range("a2:a100")
    Dim i As Integer
    For i = 1 To rnData.Cells.Count
        If rnData.Cells(i, 1) <> "" Then
            If rnData.Cells(i, 1) = lastCell Then
                rnData.Cells(i, 1) = rnData.Cells(i - 1, 1)
            Else
                lastCell = rnData.Cells(i, 1)
                If Not Range(Cells(1, 1), rnData.Cells(i, 1).Offset(-1)).Find(rnData.Cells(i, 1)) Is Nothing Then
                    
                    rnData.Cells(i, 1) = " " & rnData.Cells(i, 1)
                End If
            End If
         End If
    Next i
    

End Sub
Länk till kommentar
Dela på andra webbplatser

Ja, klockrent (som vanligt)! :thumbsup:

 

Jag har ockå i vanlig ordning suttit ett sntal kvällar/dagar utan att hitta lösningen!

Tackar och bugar!

 

/TH

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...