01. maj 2003 - 12:05Der er
22 kommentarer og 1 løsning
Sammenlign ark ---- foreslag
Hej exp´er
Jeg sider med en lille opgave i excel hvor jeg skal sammenligne to meget store lister... resultatet skal være en liste med dem der ikke forkommer på begge liste !!
Arket skal bruges at bruger der har meget lidt kendskab til XL så det skal være meget lige til :o)
Jeg ønsker ikke at få det lavet her, jeg ønsker bare nogle imput til hvordan jeg løser dette på den bedst mulig måde
slo >> den makro du linker til .... kan desværre heller ikke bruges, jeg kan ikke rigtig læse makroen da jeg ikke er så stiv til dem .... men det ser ud til den sammenligner celle for celle .... hvis de to celler er ens bliver den nye celle tom og hvis de ikke er ens bliver der skrevet begge resultater i den nye celle adskilt af <> .... den tager ikke højde for om en anden celler i arket også hedder det samme
Sub Find_Ikke_Ens_I_Ark() Dim F, C, T, U, A As Integer, Q As Boolean Application.ScreenUpdating = False A = 1
Worksheets("Ark1").Activate F = ActiveCell.SpecialCells(xlLastCell).Row ' Finder ud af hvor mange rækker der er med data på ark1
Worksheets("Ark2").Activate U = ActiveCell.SpecialCells(xlLastCell).Row ' Finder ud af hvor mange rækker der er med data på ark2
For T = 1 To F Q = True For C = 1 To U Worksheets("Ark1").Activate If Worksheets("Ark1").Cells(T, 2) = Worksheets("Ark2").Cells(C, 2) Then Q = False End If
Next C
If Q = True Then Sheets("Ark1").Select Rows(T & ":" & T).Select Selection.Copy Sheets("Ark3").Select Rows(A & ":" & A).Select ActiveSheet.Paste A = A + 1 Q = False Application.CutCopyMode = False End If Next T Sheets("Ark3").Select Application.ScreenUpdating = True Application.CutCopyMode = False Range("A1").Select End Sub
Sub Find_Ikke_Ens_I_Ark() Dim F, C, T, U, A As Integer, Q As Boolean Application.ScreenUpdating = False A = 1
Worksheets("Nyliste").Activate F = ActiveCell.SpecialCells(xlLastCell).Row ' Finder ud af hvor mange rækker der er med data på ark1
Worksheets("Fastliste").Activate U = ActiveCell.SpecialCells(xlLastCell).Row ' Finder ud af hvor mange rækker der er med data på ark2
For T = 1 To F Q = True For C = 1 To U Worksheets("Nyliste").Activate If Worksheets("NyListe").Cells(T, 2) = Worksheets("Fastliste").Cells(C, 2) Then Q = False GoTo Skift End If
Next C
Skift: If Q = True Then Sheets("Nyliste").Select Rows(T & ":" & T).Select Selection.Copy Sheets("ResultatListe").Select Rows(A & ":" & A).Select ActiveSheet.Paste A = A + 1 Q = False Application.CutCopyMode = False End If Next T Sheets("ResultatListe").Select Application.ScreenUpdating = True Application.CutCopyMode = False Range("A1").Select End Sub
når den finder en der er ens, behøver den jo ikke at teste mere med den celle, og så kan den jo godt hoppe ud af sammenligningen og gå videre til den næste.
Ok ved det er et mega gammelt spørgsmål - jeg har fået brug dette igen og kan nu ikke huske hvordan man får det til at funke.
Har kaldt mine ark "NyListe" "FastListe" og "ResultatListe" Har copy/paste makro ind i et modul
hvad så ?
----------------------------- Sub Init_Compare() '''Dim af variable Dim TB1 As Range, TB2 As Range, TB3 As Range, TB4 As Range Dim Temp As Range Dim IndexCol1 As Long, IndexCol2 As Long Dim StartTid As Double Dim ReturnArray As Variant
Set TB1 = Sheets("NyListe").Range("A1:H1") '1. inputområde Set TB2 = Sheets("FastListe").Range("A1:H1") '2. inputområde
Set TB3 = Sheets("ResultatListe").Range("A1") '1. outputområde Set TB4 = Sheets("ResultatListe").Range("A1") '2. outputområde IndexCol1 = 2 'anden kolonne i TB1 (B) IndexCol2 = 2 'anden kolonne i TB2 (B)
Set ReturnArray = Nothing Application.ScreenUpdating = True MsgBox "Færdig tid : " & Timer - StartTid Sheets("ResultatListe").Select End Sub
Sub DoCompare2Lists(WS1 As Range, WS2 As Range, SearchCol1 As Long, SearchCol2 As Long, aForskel As Variant) Dim xCol As Scripting.Dictionary Dim Fundet As Boolean, Last1 As Long, Last2 As Long Dim Cols2 As Long Dim i As Long, z As Long, x As Long
Set xCol = New Scripting.Dictionary Cols2 = WS2.Columns.Count Last1 = WS1.Cells(65536, SearchCol1).End(xlUp).Row Last2 = WS2.Cells(65536, SearchCol2).End(xlUp).Row ReDim aForskel(Last2, Cols2) z = 0
On Error Resume Next With WS1 For i = 1 To Last1 xCol.Add Item:=CStr(.Cells(i, SearchCol1)), Key:=CStr(.Cells(i, SearchCol1)) Next End With With WS2 For i = 1 To Last2 Fundet = xCol.Exists(CStr(.Cells(i, SearchCol2))) If Not Fundet = True Then z = z + 1 For x = 1 To Cols2 aForskel(z, x) = .Cells(i, x) Next End If Fundet = True Next End With Set xCol = Nothing 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.