Avatar billede mathiask-o Nybegynder
06. august 2007 - 14:56 Der er 6 kommentarer og
1 løsning

sammenligning af celler i en matrix

Hej,

Jeg har to store og næsten ens datamængder i excel, som jeg skal sammenligne. Jeg har brug for at lave en søgning på en enkelt række i en af datamængderne for at finde et match i hele den anden datamængde, hvorefter hvis der er et match, så skal jeg få retuneret en værdi, der ligger i den anden datamængde.

eks:

Datamængde 1              Datamængde 2
  a  b  c                  a  b  c  d
1  x  y  z                1 y  u  i  11 
2  æ  ø  å                2 x  y  z  4 
3  q  w  e                3 q  w  e  6

Jeg har her brug for at få værdien i datamængde 2-d2 og d3, da a2:d2 er lig a1:d1 i datamængde 1

Håber der er en der kan hjælpe mig.

venlig hilsen
Avatar billede gider_ikke_mere Nybegynder
06. august 2007 - 15:19 #1
Sub test()
Dim Data1, Data2, I As Long, Y As Long
Data1 = Sheets("Ark1").Range("A1:C10")
Data2 = Sheets("Ark2").Range("A1:D10")

For I = 1 To UBound(Data1)
    For Y = 1 To UBound(Data2)
        If Data2(Y, 1) = Data1(I, 1) And Data1(I, 1) <> "" Then
            If Data2(Y, 2) = Data1(I, 2) And Data2(Y, 3) = Data1(I, 3) And Data1(I, 2) <> "" And Data1(I, 3) <> "" Then
                MsgBox Data2(Y, 4)
            End If
        End If
    Next
Next
End Sub
Avatar billede gider_ikke_mere Nybegynder
06. august 2007 - 15:25 #2
Hvis du ikke kender størrelsen på datamængde 1 og 2:

Sub test()
Dim Data1, Data2, I As Long, Y As Long
SlutArk1 = Sheets("Ark1").Range("A65536").End(xlUp).Row
SlutArk2 = Sheets("Ark2").Range("A65536").End(xlUp).Row
Data1 = Sheets("Ark1").Range("A1:C" & SlutArk1)
Data2 = Sheets("Ark2").Range("A1:D" & SlutArk2)

For I = 1 To UBound(Data1)
    For Y = 1 To UBound(Data2)
        If Data2(Y, 1) = Data1(I, 1) And Data1(I, 1) <> "" Then
            If Data2(Y, 2) = Data1(I, 2) And Data2(Y, 3) = Data1(I, 3) And Data1(I, 2) <> "" And Data1(I, 3) <> "" Then
                MsgBox Data2(Y, 4)
            End If
        End If
    Next
Next
End Sub
Avatar billede mathiask-o Nybegynder
07. august 2007 - 09:19 #3
Hej akyhne,

Tusinde tak for hjælpen, Det ser ud som om, at det virker. Jeg var dog ikke helt klar i mit spørgsmål, for jeg har ikke brug for at få værdien i en MsgBox, men i stedet skrevet ud i en celle ud for matchet i Data1, således at data 1 søger efter et match i data2 og derefter henter en værdi derfra.

venlig hilsen
Avatar billede mathiask-o Nybegynder
07. august 2007 - 10:52 #4
Ups, Jeg kom til at svare, hvor jeg blot skulle kommentere. jeg vil gerne give dig points akyhne, så svar lige den her, så får du. Du må dog meget gerne forholde dig til mit ovenstående problem.
Avatar billede gider_ikke_mere Nybegynder
07. august 2007 - 15:31 #5
Jeg har ikke testet, men det burde blot være således:

Sub test()
Dim Data1, Data2, I As Long, Y As Long
SlutArk1 = Sheets("Ark1").Range("A65536").End(xlUp).Row
SlutArk2 = Sheets("Ark2").Range("A65536").End(xlUp).Row
Data1 = Sheets("Ark1").Range("A1:D" & SlutArk1)
Data2 = Sheets("Ark2").Range("A1:D" & SlutArk2)

For I = 1 To UBound(Data1)
    For Y = 1 To UBound(Data2)
        If Data2(Y, 1) = Data1(I, 1) And Data1(I, 1) <> "" Then
            If Data2(Y, 2) = Data1(I, 2) And Data2(Y, 3) = Data1(I, 3) And Data1(I, 2) <> "" And Data1(I, 3) <> "" Then
                Data1(I, 4) = Data2(Y, 4)
            End If
        End If
    Next
Next

Sheets("Ark1").Range("A65536").End(xlUp).Row = SlutArk1 'Skriver tilbage til arket
End Sub

Vær opmærksom på at hvis et dataset fra ark 1 findes flere gange på ark2, bliver det værdien fra det sidst fundne dataset i ark2 der kommer til at blive skrevet.
Avatar billede mathiask-o Nybegynder
08. august 2007 - 10:15 #6
Hej Akyhne,

Ved ikke om du stadig læser på denne, men når jeg kører testen får jeg fejlen:

wrong number of arguments or invalid property assignment. Kan du hjælpe med det?

mvh
Avatar billede gider_ikke_mere Nybegynder
08. august 2007 - 17:59 #7
Det gik lidt for hurtigt:

Sub test()
Dim Data1, Data2, I As Long, Y As Long
SlutArk1 = Sheets("Ark1").Range("A65536").End(xlUp).Row
SlutArk2 = Sheets("Ark2").Range("A65536").End(xlUp).Row
Data1 = Sheets("Ark1").Range("A1:D" & SlutArk1)
Data2 = Sheets("Ark2").Range("A1:D" & SlutArk2)

For I = 1 To UBound(Data1)
    For Y = 1 To UBound(Data2)
        If Data2(Y, 1) = Data1(I, 1) And Data1(I, 1) <> "" Then
            If Data2(Y, 2) = Data1(I, 2) And Data2(Y, 3) = Data1(I, 3) And Data1(I, 2) <> "" And Data1(I, 3) <> "" Then
                Data1(I, 4) = Data2(Y, 4)
            End If
        End If
    Next
Next

Sheets("Ark1").Range("A1:D" & SlutArk1) = Data1
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
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