[VBA] Verschillen tussen 2 kolommen tonen in Excel

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Victorio
  • Registratie: Januari 2001
  • Laatst online: 01-02-2024
In Excel heb ik 2 kolommen, A en B, beiden gevuld met getallen. Het aantal gevulde cellen in beide kolommen kan verschillen.

Nu heb ik op een ander forum een mooi script gevonden dat de verschillen toont tussen beide kolommen.
- Welke waardes komen wél in kolom B voor maar niet in A
- Welke waardes komen wél in kolom A voor maar niet in B

Echter zit er een bug in het script waardoor er altijd maar maximaal 1 verschil wordt getoond onder 'Not in B'.
Kan iemand me helpen debuggen?


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub test()
Dim a, i As Long, b(), n As Long, x
a = Range("a1").CurrentRegion.Resize(,2).Value
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For i = 1 To UBound(a,1)
        If (Not IsEmpty(a(i,1))) * (Not .exists(a(i,1))) Then .add a(i,1), Nothing
    Next
    ReDim b(1 To UBound(a,1), 1 To 1)
    For i = 1 To UBound(a,1)
        If Not IsEmpty(a(i,2)) Then
            If  Not .exists(a(i,2)) Then
                n = n + 1 : b(n,1) = a(i,2)
            Else
                .remove a(i,2)
            End If
        End If
    Next
    x = .keys
End With
With Range("d1")
    .CurrentRegion.ClearContents
    .Resize(,2).Value = [{"Not in A", "No in B"}]
    With .Offset(1)
        If n > 0 Then .Resize(n).Value = b
    End With
    On Error Resume Next
    .Offset(1,1).Resize(.Count).Value = Application.Transpose(x)
End With
End Sub

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23-05 15:21

NMe

Quia Ego Sic Dico.

En wat had je zelf al gedaan om je probleem op te lossen behalve andermans script te copy/pasten en verwachten dat het werkt? Een beetje meer eigen inzet tonen mag wel hoor. ;)

Verder: Waar hoort mijn topic? PRG >> OFF

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Victorio
  • Registratie: Januari 2001
  • Laatst online: 01-02-2024
Nou, ik begrijp zelf best wat van VBA (vooral basic VBA ;) ), maar het lukte me niet (eens) om te achterhalen of er slechts 1 verschil wordt gevonden of dat er wel meer worden gevonden maar er slechts 1 wordt getoond. :?

Als ikzelf een dergdelijk script zou schrijven zou ik denk ik eerst een deel schrijven dat kolom a met b vergelijkt en de verschillen in een array zet. En daarna andersom. Maar die manier zie ik ook niet echt terug in dit script.

Ik weet het, ben een redelijke VBA-leek. :/

[ Voor 3% gewijzigd door Victorio op 16-04-2011 12:35 ]


Acties:
  • 0 Henk 'm!

Anoniem: 147180

Waarom geen gebruikmaken van voorwaardelijke opmaak? Of is het per se nodig dat je de output van de verschillen apart terug krijgt?

Acties:
  • 0 Henk 'm!

  • Victorio
  • Registratie: Januari 2001
  • Laatst online: 01-02-2024
Anoniem: 147180 schreef op zaterdag 16 april 2011 @ 14:38:
Waarom geen gebruikmaken van voorwaardelijke opmaak? Of is het per se nodig dat je de output van de verschillen apart terug krijgt?
Ja dat is wel nodig. Ik heb expliciet de 2 lijstjes nodig (not in A en not in B).

Acties:
  • 0 Henk 'm!

Anoniem: 147180

Dan kun je het ook oplossen met VLOOKUP-formules in kolommen C en D. In kolom C zoek je bij iedere waarde in kolom A op of deze al dan niet voorkomt in kolom B; in kolom D doe je hetzelfde, maar dan andersom.

Voor alle waarden waarvoor je #N/A terugkrijgt, weet je dan dat die niet in de andere kolom staat. Eventueel kun je daar dan weer een formule omheenbouwen, die bij waarde #N/A automatisch de gezochte waarde teruggeeft, en anders niks. Dan heb je je output ook al.

VBA gebruik ik alleen maar voor automatiseringsdoeleinden, bijv steeds dezelfde sheets naar pdf printen, of het automatisch verversen van links als je in een bepaalde cel een waarde wijzigt. Datageoriënteerde vraagstukken probeer ik zoveel mogelijk met formules op te lossen. Wanneer een formule zeer complex wordt of ingewikkelde algoritmes gebruikt, gebruik ik een VBA-functie.
Pagina: 1