06. august 2007 - 14:56Der 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
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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
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
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.
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.
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.
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
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.