13. juli 2010 - 15:26Der er
12 kommentarer og 1 løsning
5000 separate "søg og erstat"
Hej,
Jeg sidder med et dokument, hvor jeg skal lave 5000 separate "søg og erstat". Derfor søger jeg en formel eller funktion, som kan hjælpe mig.
Her er hvordan det er stillet op: I kolonne A er alle de oprindelige tal I kolonne B er alle de nye tal der skal indsættes i stedet Kolonne C er området der skal erstattes i
Excel skal søge i kolonne C, efter fx værdien fra celle A1 og erstatte med værdien der findes i celle B1 Derefter skal den gøre det samme med A2 og B2 osv.
Jeg skal have excel til at søge i kolonne C efter værdien fra celle A1. Denne værdi skal så erstattes med værdien i celle B1.
Det er faktisk det helt samme, som når jeg bruger ctrl+h (søg og erstat) Jeg skriver søg efter værdien fra celle A1 og erstat alle forekomster i kolonne C med værdien fra celle B1.
Derefter skal det gøres med A2 og B2, A3 og B3 osv.
Problemet er bare at jeg har 5000 forskellige værdier det skal gøres med.
Forslag - VBA-koden anbringes under relevante ark - kan kaldes via Alt+F8 /marker makroen FindOgSøg / afspil Makro
Const startRæk = 1 'justeres evt.
Dim antalræk As Long, ræk As Long, Aræk As Long Sub findOgSøg() antalræk = ActiveCell.SpecialCells(xlLastCell).Row
Application.ScreenUpdating = False
For ræk = startRæk To antalræk tal = Cells(ræk, 3) 'hent tal fra kolonne C
Aræk = findTalKolonneA(tal) If Aræk > 0 Then Cells(ræk, 3) = Cells(Aræk, 2) 'indsæt tal fra kolonne B End If Next ræk
Application.ScreenUpdating = True
MsgBox "Søg & erstat er afsluttet" End Sub Private Function findTalKolonneA(tal) With ActiveSheet.Range("A:A") Set c = .Find(tal, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then findTalKolonneA = c.Row Else findTalKolonneA = 0 End If End With End Function
Det virkede faktisk præcis, som jeg beskrev det skulle!
Nogle af cellerne i kolonne C indeholder flere numre, som er adskilt af en # Er det muligt at få den til at se det som flere tal i stedet for bare at se på cellen?
Fx hvis tallet fra celle A1 indgår et sted imellem tallene i kolonne C adskilt af #, erstatter den også det.
Rem Version 2 Rem ========= Const startRæk = 2 'justeres evt.
Dim antalræk As Long, ræk As Long, Aræk As Long Sub findOgSøg() antalræk = ActiveCell.SpecialCells(xlLastCell).Row
Application.ScreenUpdating = False
For ræk = startRæk To antalræk tal = Cells(ræk, 3) 'hent tal fra kolonne C
If InStr(tal, "#") > 0 Then adskilTal tal Else Aræk = findTalKolonneA(tal) If Aræk > 0 Then Cells(ræk, 3) = Cells(Aræk, 2) 'indsæt tal fra kolonne B End If End If Next ræk
Application.ScreenUpdating = True
MsgBox "Søg & erstat er afsluttet" End Sub Private Function findTalKolonneA(tal) With ActiveSheet.Range("A:A") Set c = .Find(tal, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then findTalKolonneA = c.Row Else findTalKolonneA = 0 End If End With End Function Private Sub adskilTal(tal) Dim flereTal As Variant, f As Byte flereTal = Split(tal, "#")
For f = 0 To UBound(flereTal) Aræk = findTalKolonneA(flereTal(f)) If Aræk > 0 Then flereTal(f) = Cells(Aræk, 2) End If Next f Cells(ræk, 3) = Join(flereTal, "#") End Sub
Nu fik jeg det til at virke! Det var fordi at den kun søger i rækker der står nedenfor. Det fik jeg løst ved at forskyde kolonne C, så værdierne kommer under de værdier der ligger i kolonne A og B
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.