Avatar billede maniacdog Nybegynder
04. juli 2007 - 11:23 Der er 17 kommentarer og
1 løsning

2 excel filer, 2 ark - finde ens data og kopier til et 3. ark

Hejsa

Håber i kan hjælpe

Problematikken er at:
Der er 2 excel filer med hver 1 ark i sig.

En fil med 600 rækker på personer - fx. fornavn, efternavn, adresse, postnr, by osv.
En fil tilsvarnende den anden, bare med 15000 rækker med personer.

Opgaven er at finde de 600 personer, ét eller andet sted i den store fil med 15000 personer...

Man kan gå det her igennem manuelt, men det tager ekstremt lang tid med 600 personer der skal findes i et ark med 15000 personer.

Lad os antage at række A i hver fil indeholder fornavn og i række B indeholder de efternavn osv.
Hvis nogen gad hjælpe med denne opgave ville det være værdsat.

Fx. tage udgangspunkt i det lille ark på 600 personer, finde personen ved navn Bent Børge og lægge alle hans data (dvs. hele rækken med adresse, post, by osv.) over i et nyt ark og så fremdeles når der er "gevinst".

Det skal lige nævnes at jeg ikke selv er i besidelse af filerne da det er min kæreste der har "problemet". Jeg undre mig lidt over der ikke (umiddelbart) er andre der har samme udfordinger - hvad gør de? tager det manuelt?

Men det bør vel også være muligt at forsøge sig med random data. Jeg håber nogen kan hjælpe for det irretere mig lidt at jeg ikke har fundet nogen med samme problem eller en løsning på problematiken...

På forhånd tak
Avatar billede kabbak Professor
04. juli 2007 - 12:58 #1
Hvis vi nu siger at alle data står ens i de 2 mapper/ark.
Alle data skal være ens skrevet/stavet i de samme celler.
Data står I A til G kolonne
begge mapper skal være åbnet.
Skriv denne formel i F1, i arket med den lille liste.

ret [Mappe2]Ark1 til den mappe og ark der har den lange liste
slut formlen af med at trykke CTRL+SHIFT+ENTER, så det bliver en array formel, så ser den sådan ud i formellinien.
{=EKSAKT(A1:G1;[Mappe2]Ark1!$A$1:$G$15000)}
træk derefter formlen de 600 rækker ned

nu vil den skrive SAND ud for dem som eksisterer i den store liste og Falsk ud for dem som ikke er der.

Brug derefter autofilter til at vælge de sande, kopier dem over i et andet ark.
Avatar billede maniacdog Nybegynder
04. juli 2007 - 13:07 #2
Hmm ja.. problematikken er så vidt jeg ved så desværre en tand større.

For data står ikke ens i begge excelfiler / ark.

Fx. står navnet Bent i Fil1/Ark1 på linje 4, 9, 288, 284 (fiktive tal)
mens han i Fil2/Ark1 står på linje 55, 220, 111 (fiktive tal)

(Går ud fra det var det du mente med "Hvis nu vi siger alle data står ens i de to mapper/ark" ? )
Avatar billede gider_ikke_mere Nybegynder
04. juli 2007 - 14:25 #3
Denne sammenligner 2 ark, og smider i 3. ark.

Sub test()
Dim A, B

Windows("Mappe1").Activate
A = Sheets("Ark1").Range("A1:G15000")
Windows("Mappe2").Activate
B = Sheets("Ark1").Range("A1:G600")
Windows("Mappe3").Activate
Range("A1").Select
For I = 1 To UBound(A)
    Val1 = A(I, 1) & A(I, 2)
    For Y = 1 To UBound(B)
        Val2 = B(Y, 1) & B(Y, 2)
        If Val2 = Val1 And Val2 <> "" Then
            For D = 1 To 7
                ActiveCell.Cells(1, D).Value = A(I, D)

            Next
        ActiveCell.Range("A2").Select
        End If
    Next
Next
End Sub
Avatar billede excelent Ekspert
07. juli 2007 - 11:01 #4
Forudsætter alle 3 projektmapper er åbne
ret evt. projektmappenavne og ark

Sub Check()
Set w1 = Workbooks("Mappe1.xls").Sheets("Ark1") ' (600)
Set w2 = Workbooks("Mappe2.xls").Sheets("Ark1") ' (15000)
Set w3 = Workbooks("Mappe3.xls").Sheets("Ark1") ' tom!
w3.Activate
For t = 1 To 600
If w1.Cells(t, 1) <> "" Then
x = w1.Cells(t, 1)
r = w2.Range("A1:A15000").Find(x, LookIn:=xlValues).Row
End If
If w2.Cells(r, 2) = w1.Cells(t, 2) Then
w1.Range("A" & t & ":G" & t).Copy w3.Cells(Cells(65500, 1).End(xlUp).Row + 1, 1)
End If
Next
End Sub
Avatar billede maniacdog Nybegynder
09. juli 2007 - 08:45 #5
Umiddelbart så virker akyhne's eksempel så vidt jeg kan overskue men hører lige kæresten ad om hun kan bruge det. Kunne man evt. få dig til lige at uddybe det lidt, evt. et par kommentare ind i?
(fx. hvor man skal rette for ikke at sammenligne ml. fornavn og efternavn hvis man nu ønsker at sammenligne ml. andre værdier)
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 10:33 #6
Den kommer her. Jeg ved ikke hvor mange data du har på folk. Koden tager kolonne A til G med:

Sub test()
Dim A, B

Windows("Mappe1").Activate 'arket med 15000 adresser

'sætter et array. kaldet A. Arrayet dækker fra celle A til G i 15000 rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
A = Sheets("Ark1").Range("A1:G15000")

'sætter et array. kaldet B. Arrayet dækker fra celle A til G i 600 rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
Windows("Mappe2").Activate
B = Sheets("Ark1").Range("A1:G600")

Windows("Mappe3").Activate 'Gør sammenligningsarket klar
Range("A1").Select

For I = 1 To UBound(A) 'Vi gennemløber alle 15000 rækker fra Mappe1
   
    'Val1 er sammensætningen af første og anden række fra arrayet, og dermed tilsvarende række A & B.
    'Hvis det var kolonne A og C der skulle sammenlægges, skal der stå [Val1 = A(I, 1) & A(I, 3)]
    Val1 = A(I, 1) & A(I, 2) 'Val1 er A & B, altså fornavn og efternavn
   
    'for hver af de 15000 gange, løber vi navnene fra Mappe2 igennem (600 gange)
    For Y = 1 To UBound(B)
   
        'igen sætter vi fornavn og efternavn sammen. Dene gang i Val2
        Val2 = B(Y, 1) & B(Y, 2)
       
        If Val2 = Val1 And Val2 <> "" Then 'Hvis navnene passer sammen og ikke er ingenting
           
            'Her skriver vi i ark 3. Det er ikke den hurtigste måde at gøre det på, men giver mulighed
            'for at du kan ændre hvilke data der skal i ark 3. Hvis du kun ønsker fornavn & efternavn,
            'rettes [For D = 1 To 7] til [For D = 1 To 2]
            For D = 1 To 7
                ActiveCell.Cells(1, D).Value = A(I, D)
            Next
           
        ActiveCell.Range("A2").Select 'Sammenligning er færdig og skrevet i ark 3. Vi hopper en celle ned
        End If
       
    Next
Next
End Sub
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 10:40 #7
Hvis du ikke ved hvor mange data der er i arket:

Sub test()
Dim A, B

Windows("Mappe1.xls").Activate 'arket med 15000 adresser

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet A. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
A = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe2.xls").Activate

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet B. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
B = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe3.xls").Activate 'Gør sammenligningsarket klar
Range("A1").Select

For I = 1 To UBound(A) 'Vi gennemløber alle 15000 rækker fra Mappe1
   
    'Val1 er sammensætningen af første og anden række fra arrayet, og dermed tilsvarende række A & B.
    'Hvis det var kolonne A og C der skulle sammenlægges, skal der stå [Val1 = A(I, 1) & A(I, 3)]
    Val1 = A(I, 1) & A(I, 2) 'Val1 er A & B, altså fornavn og efternavn
   
    'for hver af de 15000 gange, løber vi navnene fra Mappe2 igennem (600 gange)
    For Y = 1 To UBound(B)
   
        'igen sætter vi fornavn og efternavn sammen. Dene gang i Val2
        Val2 = B(Y, 1) & B(Y, 2)
       
        If Val2 = Val1 And Val2 <> "" Then 'Hvis navnene passer sammen og ikke er ingenting
           
            'Her skriver vi i ark 3. Det er ikke den hurtigste måde at gøre det på, men giver mulighed
            'for at du kan ændre hvilke data der skal i ark 3. Hvis du kun ønsker fornavn & efternavn,
            'rettes [For D = 1 To 7] til [For D = 1 To 2]
            For D = 1 To 7
                ActiveCell.Cells(1, D).Value = A(I, D)
            Next
           
        ActiveCell.Range("A2").Select 'Sammenligning er færdig og skrevet i ark 3. Vi hopper en celle ned
        End If
       
    Next
Next
End Sub
Avatar billede maniacdog Nybegynder
09. juli 2007 - 14:46 #8
Et lille bonus spørgsmål (håber jeg)
Hvis nu vi ikke ved hvor mange rækker der er i hvert ark, altså hvor mange personer der står i hvert ark (den på henholdsvis 600 og 15000), er det så en kæmpe udfordring at checke på dette inden den løber det igennem?

Ellers dejligt dokumenteret.
Avatar billede maniacdog Nybegynder
09. juli 2007 - 14:47 #9
Ah... det er den sidste du har skrevet der finder ud af dette, korrekt?
(Hvis ja, er det så i begge ark eller kun det éne?)
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 14:56 #10
Den checker i begge ark. Og ja, det tager kun en brøkdel at et sekund at checke.
Avatar billede maniacdog Nybegynder
09. juli 2007 - 14:57 #11
Har lige afprøvet det og det ser umiddelbart ud til at virke. Dog tager den dobbelt personer, dvs. at hvis der fx. er to ved navn Hans Christian på i Mappe1.xls så smider den også to over i Mappe3.xls... på sin måde okay men jeg tænkte på om det er muligt at i filen Mappe3.xls om man ud for hvert resultat den finder (fx. i Række A) at skrive på hvilken række og i hvilken fil + ark den har fundet resultatet?

Så hvis man er i tvivl om hvorvidt personen er rigtig eller lign. så er vedkommende nem at finde tænkte jeg...?
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 15:13 #12
Sub test()
Dim A, B

Windows("Mappe1.xls").Activate 'arket med 15000 adresser

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet A. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
A = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe2.xls").Activate

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet B. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
B = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe3.xls").Activate 'Gør sammenligningsarket klar
Range("A1").Select

For I = 1 To UBound(A) 'Vi gennemløber alle 15000 rækker fra Mappe1
   
    'Val1 er sammensætningen af første og anden række fra arrayet, og dermed tilsvarende række A & B.
    'Hvis det var kolonne A og C der skulle sammenlægges, skal der stå [Val1 = A(I, 1) & A(I, 3)]
    Val1 = A(I, 1) & A(I, 2) 'Val1 er A & B, altså fornavn og efternavn
   
    'for hver af de 15000 gange, løber vi navnene fra Mappe2 igennem (600 gange)
    For Y = 1 To UBound(B)
   
        'igen sætter vi fornavn og efternavn sammen. Dene gang i Val2
        Val2 = B(Y, 1) & B(Y, 2)
       
        If Val2 = Val1 And Val2 <> "" Then 'Hvis navnene passer sammen og ikke er ingenting
           
            'Her skriver vi i ark 3. Det er ikke den hurtigste måde at gøre det på, men giver mulighed
            'for at du kan ændre hvilke data der skal i ark 3. Hvis du kun ønsker fornavn & efternavn,
            'rettes [For D = 1 To 7] til [For D = 1 To 2]
            ActiveCell.Value = I '//////// NY
            For D = 1 To 7
                ActiveCell.Cells(1, D + 1).Value = A(I, D) '//////// Ændring D + 1
            Next
        ActiveCell.Range("A2").Select 'Sammenligning er færdig og skrevet i ark 3. Vi hopper en celle ned
        End If
       
    Next
Next
End Sub
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 15:20 #13
Eller med hyperlink:

Sub test()
Dim A, B

Windows("Mappe1.xls").Activate 'arket med 15000 adresser

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet A. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
A = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe2.xls").Activate

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet B. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
B = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe3.xls").Activate 'Gør sammenligningsarket klar
Range("A1").Select

For I = 1 To UBound(A) 'Vi gennemløber alle 15000 rækker fra Mappe1
   
    'Val1 er sammensætningen af første og anden række fra arrayet, og dermed tilsvarende række A & B.
    'Hvis det var kolonne A og C der skulle sammenlægges, skal der stå [Val1 = A(I, 1) & A(I, 3)]
    Val1 = A(I, 1) & A(I, 2) 'Val1 er A & B, altså fornavn og efternavn
   
    'for hver af de 15000 gange, løber vi navnene fra Mappe2 igennem (600 gange)
    For Y = 1 To UBound(B)
   
        'igen sætter vi fornavn og efternavn sammen. Dene gang i Val2
        Val2 = B(Y, 1) & B(Y, 2)
       
        If Val2 = Val1 And Val2 <> "" Then 'Hvis navnene passer sammen og ikke er ingenting
           
            'Her skriver vi i ark 3. Det er ikke den hurtigste måde at gøre det på, men giver mulighed
            'for at du kan ændre hvilke data der skal i ark 3. Hvis du kun ønsker fornavn & efternavn,
            'rettes [For D = 1 To 7] til [For D = 1 To 2]
            ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="Mappe1.xls#A" & I
            For D = 1 To 7
                ActiveCell.Cells(1, D + 1).Value = A(I, D)
            Next
        ActiveCell.Range("A2").Select 'Sammenligning er færdig og skrevet i ark 3. Vi hopper en celle ned
        End If
       
    Next
Next
End Sub
Avatar billede maniacdog Nybegynder
09. juli 2007 - 15:31 #14
Gi' den lige gas... :o)

Sidste lille bitte ting
hvis jeg ønsker at formattere cellerne med en farve i Mappe3.xls
hvor er det så lige præcist jeg skal indsætte det?
Syntes kun jeg kan få farvet rækken A...

(ActiveCell.Interior.ColorIndex = 19)
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 15:37 #15
ActiveCell.Cells(1, D + 1).Value = A(I, D) 'eksisterende linie

ActiveCell.Cells(1, D + 1).Interior.ColorIndex = 19 'Ny linie nedenunder
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 15:45 #16
Hvis hele området skal have samme farve kan du gøre således:

Sub test()
Application.ScreenUpdating = False
Dim A, B

Windows("Mappe1.xls").Activate 'arket med 15000 adresser

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet A. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
A = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe2.xls").Activate

'Finder nederste række med data
Slut = Range("A65535").End(xlUp).Row

'sætter et array. kaldet B. Arrayet dækker fra celle A til G i 'Slut' antal rækker
'et array er meget hurtigere at gennemløbe end cellerne i et ark
B = Sheets("Ark1").Range("A1:G" & Slut)

Windows("Mappe3.xls").Activate 'Gør sammenligningsarket klar
Range("A1").Select

For I = 1 To UBound(A) 'Vi gennemløber alle 15000 rækker fra Mappe1
   
    'Val1 er sammensætningen af første og anden række fra arrayet, og dermed tilsvarende række A & B.
    'Hvis det var kolonne A og C der skulle sammenlægges, skal der stå [Val1 = A(I, 1) & A(I, 3)]
    Val1 = A(I, 1) & A(I, 2) 'Val1 er A & B, altså fornavn og efternavn
   
    'for hver af de 15000 gange, løber vi navnene fra Mappe2 igennem (600 gange)
    For Y = 1 To UBound(B)
   
        'igen sætter vi fornavn og efternavn sammen. Dene gang i Val2
        Val2 = B(Y, 1) & B(Y, 2)
       
        If Val2 = Val1 And Val2 <> "" Then 'Hvis navnene passer sammen og ikke er ingenting
           
            'Her skriver vi i ark 3. Det er ikke den hurtigste måde at gøre det på, men giver mulighed
            'for at du kan ændre hvilke data der skal i ark 3. Hvis du kun ønsker fornavn & efternavn,
            'rettes [For D = 1 To 7] til [For D = 1 To 2]
            ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="Mappe1.xls#A" & I
            For D = 1 To 7
                ActiveCell.Cells(1, D + 1).Value = A(I, D)
            Next
            ActiveCell.Range("A1:G1").Interior.ColorIndex = 19
            ActiveCell.Range("A2").Select 'Sammenligning er færdig og skrevet i ark 3. Vi hopper en celle ned
        End If
       
    Next
Next
Application.ScreenUpdating = True
End Sub
Avatar billede maniacdog Nybegynder
09. juli 2007 - 15:58 #17
Jeg siger dig 1000 tak og tildeler dig velfortjent de 100 point :o)
Avatar billede gider_ikke_mere Nybegynder
09. juli 2007 - 16:02 #18
Velbekomme.
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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