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
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.
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)
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.
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?
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.
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
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
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?
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
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
Synes godt om
Ny brugerNybegynder
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.