Avatar billede Bjarnøe Praktikant
12. juli 2017 - 10:13 Der er 23 kommentarer

Tekst fra kolonne skal udskifte værdier i celler

Jeg har et ark med en kolonne, hvor der i de enkelte række er en bestemt celle, der indeholder en masse forskellige ID numre separeret af en "|", f.eks.
Række 1: 934 | 938 | 674
Række 2: 987 | 632 | 982 | 765 | 354
Række 3: 756 | 756 | 876 | 334
Som illustreret er der et tilfældigt antal ID numre pr. række.

I det andet ark har jeg så 2 kolonner, hvor den første kolonne for hver række har et ID nummer, der svarer til dem det første ark. Den anden kolonne indeholder en tekst, som jeg gerne vil have over i cellerne i det første ark, f.eks.
ID    |    Tekst
934  |      Opel
938  |      Toyota
674  |      Ford

Teksterne fra dette ark skal så udskifte ID numrene i første ark, så det kommer til at se sådan ud i første ark:
Række 1: Opel | Toyota | Ford
Avatar billede kim1a Ekspert
12. juli 2017 - 10:58 #1
Formlen lopslag (vlookup) er din ven.

Jeg foreslår at du ikke "udskifter" men blot laver en formel kopi af dine data - den skal se således ud at i den første kolonne hvor ingen af dine data når ud skriver du:
=lopslag(A1;'ark2'!$A$1:$B$4;2;falsk)

På den måde får du en kopi af dine data med "oversættelse" stående ude til højre for din originale data.

Jeg håber du forstår referencerne (som blot antager at dine data starter i A1.
Avatar billede Bjarnøe Praktikant
12. juli 2017 - 11:06 #2
Hej Kim,

Tak for svar, jeg har kopieret formlen ind i en celle i det første ark og ændret referencerne, men uden held.
Mine data (alle ID numrene) starter i I3 og i ark2 starter de i A3 (ID) og C3 (Tekst)
Avatar billede kim1a Ekspert
12. juli 2017 - 11:24 #3
Bruger du engelsk eller dansk - hvad skriver cellen?

Husk på at ID naturligvis skal eksistere i dine data, ligesom der tit er en fejl med tekst og tal i celler hvis det ene kommer som et udtræk fra noget andet.

Formlen må være:
lopslag(I3;'ark2'!$A$3:$C$100;3;falsk) - det du effektivt skriver er:
Slå I3 op i den tabel som befinder sig på A3:C100, hvis du finder I3s værdi i første kolonne af denne tabel, så returner 3. kolonnes værdi i samme række.
Avatar billede Bjarnøe Praktikant
12. juli 2017 - 11:38 #4
Det virker fint så længe der kun er en enkelt værdi i cellen, men her er der flere og et vilkårligt antal delt op af "|" tegnet
Avatar billede kim1a Ekspert
12. juli 2017 - 13:39 #5
Ah, jeg troede det var din måde at vise ny kolonne på.

Jeg foreslår at bruge tekst til kolonner og så sætte tegnet som "delimiter"
Avatar billede Bjarnøe Praktikant
12. juli 2017 - 13:44 #6
Hej Kim,

Tak for svar, men som sagt er der et vilkårligt antal ID numre i hver enkelt af cellerne, nogle gange helt op til 50-60 stk. og der er over 1000 rækker, så det virker lidt for omstændigt med tekst til kolonne - man skal vel også tilpasse formlen til hver enkelt række tænker jeg?
Avatar billede kim1a Ekspert
12. juli 2017 - 15:44 #7
Ja du skal tilpasse formlen, men hvis du får indsat $ rigtigt kan du blot kopiere/trække end og ned.

Antallet af rækker er ret uvæsentligt, men det kan fordre at det måske er bedre at lave din "oversættelse" på en ny fane. Jeg holder stadig på det er ret simpelt.

Det handler naturligvis om hvor ofte du skal lave denne operation, for opslagsformler gør arket tungt, så det kan være en fordel at gøre det i en vba, der kan du også både kode dit tekst til kolonner og opslag i et og samme.
Avatar billede store-morten Ekspert
12. juli 2017 - 16:53 #8
Prøv denne Makro på en kopi af arket (Makro kan ikke fortrydes)
Sub Udskift_Nr_Med_Mærke()
Application.ScreenUpdating = False
'Ark1  der indeholder en masse forskellige ID numre separeret af en "|"
ActiveWorkbook.Worksheets("Ark1").Range("A1:A1500").Select
    'Ark2 der indeholder ID nummer og mærke
    For Each c In ActiveWorkbook.Worksheets("Ark2").Range("A2:A5").Cells
        ID = c
        Mærke = c.Offset(0, 1)
            Selection.Replace What:=ID, Replacement:=Mærke, LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
    Next c
   
ActiveWorkbook.Worksheets("Ark1").Range("A1").Select
Application.ScreenUpdating = True
End Sub
Avatar billede kabbak Professor
12. juli 2017 - 17:09 #9
en makro fra mig, kan heller ikke fortrydes.


Public Sub OpdaterNavne()

    Dim indData As Variant, XOpslag As Variant, CellData As Variant, I As Long, J As Long, X As Integer
    Worksheets("Opslag").Activate ' Ark med numre i kolonne A
    XOpslag = Worksheets("Opslag").Range(Cells(1, 1), Cells(Worksheets("Opslag").UsedRange.Rows.Count, 2))
    Worksheets("Data").Activate 'Ark med opslagsnumre i kolonne A og modeller i B
    indData = Worksheets("Data").Range(Cells(1, 1), Cells(Worksheets("Data").UsedRange.Rows.Count, 1))

    For I = 1 To UBound(indData)
        CellData = Split(indData(I, 1), "|")

        For X = 0 To UBound(CellData)
            For J = 2 To UBound(XOpslag)
                If XOpslag(J, 1) = Val(CellData(X)) Then
                    indData(I, 1) = Replace(indData(I, 1), XOpslag(J, 1), XOpslag(J, 2))
                    Exit For
                End If
            Next
        Next

    Next
   
    Worksheets("Data").Range(Cells(1, 1), Cells(Worksheets("Data").UsedRange.Rows.Count, 1)) = indData ' NB overskriver eksisterende data i kolonne A i arket("Data")
End Sub
Avatar billede Bjarnøe Praktikant
12. juli 2017 - 22:43 #10
Tak for jeres ihærdige forsøg på at hjælpe en fatsvag stakkel :D

Jeg har prøvet begge makroer, men der sker absoult intet når jeg kører dem. Jeg har ovenikøbet barberet arkene helt ned til kun de nødvendige data...
Avatar billede store-morten Ekspert
12. juli 2017 - 23:42 #11
Arkene er ikke døbt om?
Ark1
A1: 934 | 938 | 674
A2: 987 | 632 | 982 | 765 | 354
A3: 756 | 756 | 876 | 334

Ark2
A1: ID          B1: Tekst
A2: 934        B2: Opel
A3: 938        B3:Toyota
A4: 674        B4: Ford
Avatar billede Bjarnøe Praktikant
13. juli 2017 - 00:08 #12
Nej, de er præcist som i det eksempel du lige gav.
Når jeg kører makroen, så er den færdig på et splitsekund?!
Hvor burde den egentlig generere resultaterne?
Avatar billede store-morten Ekspert
13. juli 2017 - 00:15 #13
På Ark1

Alså udskifter nr. med bil mærke
Avatar billede store-morten Ekspert
13. juli 2017 - 00:18 #14
Ark1
A1: 934 | 938 | 674

Bliver til:
Ark1
A1: Opel | Toyota | Ford
Avatar billede Bjarnøe Praktikant
13. juli 2017 - 00:37 #15
Der skete noget da jeg udvidede range'n

Men de står lidt hulter til bulter nu, f.eks.

Opel Toyota F | To | For | osv osv...mystisk
Avatar billede Bjarnøe Praktikant
13. juli 2017 - 00:42 #16
Kan det have noget at sige at nogle felter er tomme?
Avatar billede store-morten Ekspert
13. juli 2017 - 00:46 #17
På Ark2?
Avatar billede store-morten Ekspert
13. juli 2017 - 00:50 #18
På Ark1 skulle det ikke gøre noget at der er tomme celler.
Så finder den jo ingen ID nr.
Avatar billede kabbak Professor
13. juli 2017 - 08:29 #19
Er der mellemrum imellem tallene og "|" altså sådan" | " så skal linjen.
CellData = Split(indData(I, 1), "|")

være
CellData = Split(indData(I, 1), " | ")
Avatar billede Bjarnøe Praktikant
13. juli 2017 - 10:38 #20
@kabbak

Det har jeg prøvet, men der sker intet :\
Avatar billede store-morten Ekspert
13. juli 2017 - 12:36 #21
Hej Bjarnøe
Har til rettet lidt i makro.
Du bruger Engelsk version af Excel, så fane bladene skal omdøbes fra:
Sheet1 til Ark1 og
Sheet2 til Ark2

Sub Udskift_Nr_Med_Mærke()
Application.ScreenUpdating = False
ActiveWorkbook.Worksheets("Ark1").Select
'Ark1  der indeholder en masse forskellige ID numre separeret af en "|"
ActiveWorkbook.Worksheets("Ark1").Range("A1:A2000").Select
    'Ark2 der indeholder ID nummer og mærke
    For Each c In ActiveWorkbook.Worksheets("Ark2").Range("A2:A10").Cells
        ID = c
        Mærke = c.Offset(0, 1)
            Selection.Replace What:=ID, Replacement:=Mærke, LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
    Next c
   
ActiveWorkbook.Worksheets("Ark1").Range("A1").Select
Application.ScreenUpdating = True
End Sub
Avatar billede Bjarnøe Praktikant
13. juli 2017 - 13:29 #22
Jeg kan se at det er relateret til at den ikke tager heltallet, men returnerer Mærket ved første fundne post.

F.eks.
Hvis ID er 934, som svarer til eks. Ford
Men hvis der så er et ID der hedder 93 som svarer til Opel, så returnerer den Opel4
Avatar billede store-morten Ekspert
13. juli 2017 - 13:38 #23
I det fremsendte ark er ID sorteret stigende, så ID udskiftes løbende nede fra.

Sub Udskift_Nr_Med_Mærke()
Application.ScreenUpdating = False
ActiveWorkbook.Worksheets("Sheet1").Select
'Ark1  der indeholder en masse forskellige ID numre separeret af en "|"
SR1 = Cells(Rows.Count, 1).End(xlUp).Row
'SR1 = Sidste brugte række på Sheet1
ActiveWorkbook.Worksheets("Sheet1").Range("A1:A" & SR1).Select
    'Ark2  der indeholder ID nummer og mærke
    SR2 = ActiveWorkbook.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
    'SR2 = Sidste brugte række på Sheet2
    For Each c In ActiveWorkbook.Worksheets("Sheet2").Range("A1:A" & SR2).Cells
        ID = c
        Mærke = c.Offset(0, 1)
            Selection.Replace What:=ID, Replacement:=Mærke, LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
    Next c
   
ActiveWorkbook.Worksheets("Sheet1").Range("A1").Select
Application.ScreenUpdating = True
End Sub
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