Avatar billede j-both Nybegynder
13. juli 2010 - 15:26 Der 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.

Håber der er nogen som kan hjælpe mig

På forhånd tak!
Avatar billede Thyge Nybegynder
13. juli 2010 - 16:07 #1
Hej,

Jeg er ikke hundrede på om jeg kan hjælpe og forstår ikke helt dit spørgsmål.

Umiddelbart lyder det som om at C1 skal være lig B1, C2 lig B2 osv. Kan du evt. uddybe.
Avatar billede j-both Nybegynder
13. juli 2010 - 16:46 #2
Hej,

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.
Avatar billede supertekst Ekspert
13. juli 2010 - 17:42 #3
Med VBA skulle det ikke være noget problem - hvis det altså må være det?

Kan alle værdier i C findes i A?
Avatar billede supertekst Ekspert
13. juli 2010 - 18:02 #4
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
Avatar billede j-both Nybegynder
13. juli 2010 - 18:36 #5
Hej supertekst,

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.

Takker for din hjælp!
Avatar billede supertekst Ekspert
13. juli 2010 - 23:26 #6
Ja - det skulle nok være muligt. Prøv at vise, hvordan disse #-celler ser ud.
Avatar billede supertekst Ekspert
14. juli 2010 - 10:24 #7
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
Avatar billede j-both Nybegynder
14. juli 2010 - 14:02 #8
Det får jeg ikke helt til at virke.
Her er et eksempel på hvordan det kunne se ud:
http://spreadsheets.google.com/ccc?key=tKVzdDr_8xgkKkS1c4dI4BQ&hl=en#gid=0
Avatar billede supertekst Ekspert
14. juli 2010 - 17:44 #9
hvad er det, der ikke virker?
Avatar billede j-both Nybegynder
14. juli 2010 - 22:41 #10
Den erstatter ikke ind i mellem #
fx bliver 1062 ikke erstattet med 2319 i celle C3
Avatar billede supertekst Ekspert
14. juli 2010 - 23:00 #11
Det sker nu alligevel, når jeg kører VERSION 2 (#7 d.d.)

FØR
500535    500598    1062#1069#1124#1138#1164#1171#1323#1363#1365#1387#1435#1453#1464#1466#1468#1471#1527#1528#3676#500056#500057#500197#500484#500496#5441#5518       
1062    2319    500535#500715       
3574    8937    500535#500716       
500057    88736    500717       
               
EFTER                       
500535    500598    2319#1069#1124#1138#1164#1171#1323#1363#1365#1387#1435#1453#1464#1466#1468#1471#1527#1528#3676#500056#88736#500197#500484#500496#5441#5518       
1062    2319    500598#500715       
3574    8937    500598#500716       
500057    88736    500717
Avatar billede j-both Nybegynder
15. juli 2010 - 00:23 #12
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

Mange tak for hjælpen!
Avatar billede supertekst Ekspert
15. juli 2010 - 09:01 #13
Ok - og selv tak..
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester