24. november 2003 - 08:24Der er
10 kommentarer og 1 løsning
Programmering af modul til sammenligning af data i excel
Jeg har behov for et modul som kan sammenligne alle data i to rækker. eks. Rækken C i ark1 med alle data i række C ark2. Det er et 15 cifret tal som befinder sig i cellerne. Hvis samme tal findes i begge rækker skal der ikke gøres noget, men hvis ikke tallet optræder i begge rækker skal hele linien hvor tallet står kopieres ud i ark3.
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
ption Explicit Option Base 1 Sub Init_Compare() '''Dim af variable Dim TB1 As Range, TB2 As Range, TB3 As Range Dim Temp As Range Dim IndexCol1 As Long, IndexCol2 As Long Dim StartTid As Double Dim ReturnArray As Variant
With Application Set TB1 = .InputBox("Marker overskrift af område 1", Type:=8) TB1.Parent.Activate Set Temp = .InputBox("Marker 1.celle i sammenligningskolonnen", Type:=8) IndexCol1 = Temp.Column - TB1.Column + 1 Set TB2 = .InputBox("Marker overskrift af område 2", Type:=8) TB2.Parent.Activate Set Temp = .InputBox("Marker 1.celle i sammenligningskolonnen", Type:=8) IndexCol2 = Temp.Column - TB2.Column + 1 Set TB3 = .InputBox("Marker 1. celle af resultatområde", Type:=8) TB3.Parent.Activate End With
MsgBox "Færdig tid : " & Timer - StartTid Set ReturnArray = Nothing 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
du skal have referance til Microsoft scripting runtime.
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
Worksheets("Ark2").Activate F = ActiveCell.SpecialCells(xlLastCell).Row ' Finder ud af hvor mange rækker der er med data på ark1
Worksheets("Ark1").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("Ark2").Activate If Worksheets("Ark2").Cells(T, 2) = Worksheets("Ark1").Cells(C, 2) Then Q = False End If
Next C
If Q = True Then Sheets("Ark2").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
Her er en husmandsløsning:-) skriv i en af D-kolonnerne: =HVIS(Ark1!C3=Ark2!C3;"Dublet";"") så får du skrvet Dublet alle de steder, hvor der er sammenfald. På ark3 skriver du i alle felter: =HVIS(Ark2!$D3="Dublet";"";Ark1!$A3) Dette er hvad der skal stå i A3. Du kan selv passe til for øvrige felter i række 3 og så kopiere nedefter.
Kommentar: Det er kabbak's løsning som jeg anvender. Da han også var hutigst med svaret finder jeg det mest retfærdigt at tildele ham mine point. Håber på forståelse og takker for interessen for at løse mit problem.
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.