Värden i kolumn A skall ersättas med värden ur kolumn B. Lite svårt att förstå hur du menar, men kan det vara så här: Hej Ska du jämföra varje värde med hela listan eller mot samma rad? Varje värde i kol B skall jämföras mot kol A; finns Kalle från kol B med i kol A (Kalle Kula) skall Kalle bort och Kula vara kvar. Hej Tänkte bara ge tre förbättringar: Som du förstått vid det här laget är jag nybörjare på VBA. Men dina tips funkade riktigt bra. Tack för det. Ltrim eller trim är det ju som bör användas, och det borde funka.Sök och ersätt cellinnehåll i Excel
Ex. i A "Kalle Kula" ersätts med "Kalle" från kolumn B.
Antal rader i kolumnerna A och B är okänt, kan vara 10 men kan också vara 35000. Behöver alltså få till en loop som söker varje rad.
// Björn SivedalSv: Sök och ersätt cellinnehåll i Excel
Sub CopyAndPaste()
Dim CurrentCell As String
Dim CurrentColFrom As String
Dim CurrentColTo As String
Dim CurrentRow As Integer
'Först definierar vi var vi vill kopiera till
'och från
CurrentColFrom = "B"
CurrentColTo = "A"
'Vi startar på rad 1
CurrentRow = 1
'Definierar vilken cell vi är i
CurrentCell = CStr(CurrentColFrom & CurrentRow)
'Här loopar vi oss framöver helt tills
'det inte finns något i gällande cell
Do While Range(CurrentCell).Value <> ""
'Vi väljer det som finns i cellen
Range(CurrentCell).Select
'Kopierar det
Selection.Copy
'Så väljer vi A-kolumnen på gällande rad
Range(CStr(CurrentColTo & CurrentRow)).Select
'...och limmar in resultatet
ActiveSheet.Paste
'Derefter går vi till nästa rad och fortsätter loopen
CurrentRow = CurrentRow + 1
'Läser in gällande cell
CurrentCell = CStr(CurrentColFrom & CurrentRow)
Loop
'Bara en liten koll på att arbetet verkligen är gjord :)
MsgBox "Kopierade " & CurrentRow - 1 & " rader"
End Sub
Mvh Torgrim Sv: Sök och ersätt cellinnehåll i Excel
Håller med om att jag var otydlig, sorry. Faktiskt missade jag det vitala.
I kolumn B finns det värden som rad för rad skall sökas igenom och matchas mot ett värde i kolumn A. Finns B-värdet skall detta ersättas med "" i kol A
Ex. före förändring
Kol A Kol B
Kalle Kula Kalle
Ex. efter förändring
Kol A Kol B
Kula Kalle
Bägge kolumnerna har okänt antal rader med värden att söka igenom.
Förresten, den kod du skickade har hjälp mig mycket i att förstå hur jag kan arbeta med loopar. Många tack för det.
Tacksam för hjälp även om jag strulade till det.
// BjörnSv: Sök och ersätt cellinnehåll i Excel
Alltså om du har
kol A
olle kula
kalle kula
lasse kula
göran kula
och i kolumn b har
kalle
stropp
grodan
boll
Ska då "kalle" i A2 ("kalle kula") försvinna, även om de inte står på samma rad.
Om de måste stå på samma rad är en av de snabbaste och mest intuitiva lösningarna att göra en extra kolumn där man låter excel räkna ut om texten finns med, och i så fall var positionen på den är. Där kan man göra hela lösningen med formler.Sv: Sök och ersätt cellinnehåll i Excel
stropp från B finns inte i A och då sker heller ingen förändring i A.Sv: Sök och ersätt cellinnehåll i Excel
Så här blev det:
Sub Ersatta_textinnehall()
Dim CurrentCell As String
Dim CurrentColFrom As String
Dim CurrentColTo As String
Dim CurrentRow As Integer
CurrentColFrom = "G" ' Kopierar från
CurrentRow = 1 'Startrad 1
CurrentCell = CStr(CurrentColFrom & CurrentRow) 'Anger aktuell cell
Do While Range(CurrentCell).Value <> "" 'Loop till inget värde finns
Columns("B:B").Select 'Här sker sök och ersätt
Selection.Replace What:=Range(CurrentCell).Value, Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
CurrentRow = CurrentRow + 1 'Loopen fortsätter
CurrentCell = CStr(CurrentColFrom & CurrentRow) 'Läser in gällande cell
Loop
'Bara en liten koll på att arbetet verkligen är gjord :)
MsgBox "Kopierade " & CurrentRow - 1 & " rader"
End Sub
Tack för hjälpen.
// BjörnSv: Sök och ersätt cellinnehåll i Excel
1. Istället för att foga samman kolumn och rad till en strängar, osv. så är det bättre att använda Cells (sen måste man inte använda value).
Alltså:
Byt ut Range(CurrentCell).Value till Cells(CurrentRow, CurrentColFrom)
2. Många Select onödiga, och pajar tidigare gjorda markeringar... Alltså:
-
Columns("B:B").Select 'Här sker sök och ersätt
Selection.Replace [...]
-
kan bytas ut mot
-
Columns("B:B").Replace[...]
-
3. Eftersom alla rader ska användas kan man lika gärna räkna ut vilka det är direkt, och sen göra en for-loopen, det blir lite snabbare.
Hitta nedersta cellen med Range("G1").End xlDown
Alltså loopen ser ut något i stil med:
For Currentrow = 1 To Range("G1").End(xlDown).Row
[...]
Next
Några tips, bara!Sv: Sök och ersätt cellinnehåll i Excel
En sista grej bara, om jag har ett eller flera mellanslag kvar framför en del värden i kol A , hur får jag bort dom?
Jag har testat med Ltrim men det vill sig inte alls.
// BjörnSv: Sök och ersätt cellinnehåll i Excel
Det enklaste är att göra en ny loop efter den första som fixar just det.
(Och att min stavning och grammatik är helt åt helvete beror på att jag e sjuk... =) )