• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA: Bereik controleren op toegestane waarden

Status
Niet open voor verdere reacties.

RoCompy87

Gebruiker
Lid geworden
13 nov 2006
Berichten
284
Bereik controleren op toegestane waarden

Goedendag,

Ik heb twee kolommen met getallen. Hoe kan ik in één formule nagaan hoeveel van de getallen in de tweede kolom, niet voorkomen in de eerste kolom?

Alvast bedankt!
 
Laatst bewerkt:
Misschien helpt een bijlage :)

Ter aanvulling: ik kan per cel evalueren of de waarde uit de tweede kolom ook in de eerste kolom voorkomt, maar ik hoop dat het efficiënter kan in één formule.
 

Bijlagen

Formule lukt mij niet maar misschien heb je hier iets aan?

Code:
Sub test()

For x = 1 To 7
c = WorksheetFunction.CountIf(Range("A1:A4"), Cells(x, 2))
If c = 0 Then aantal = aantal + 1
Next x
[b8] = aantal

End Sub

Niels
 
Niels, bedankt voor je reactie.

Ik had ook een loop gemaakt in VBA, maar in het 'echte' bestand gaat het om 10.000 regels. Ik vraag me daarom af of er ook een manier is zonder loop...
 
Laat eens weten hoe deze het doet met 10000 regels
Code:
Sub tst()
Dim i As Long, t As Long, p As Long
Dim v1 As Variant, v2 As Variant
    v1 = WorksheetFunction.Transpose(Sheets("Blad1").Range("A1:A" & Sheets("Blad1").Cells(Rows.Count, 1).End(xlUp).Row))
    v2 = WorksheetFunction.Transpose(Sheets("Blad1").Range("B1:B" & Sheets("Blad1").Cells(Rows.Count, 2).End(xlUp).Row))
    p = 0
    On Error Resume Next
        With WorksheetFunction
            For i = LBound(v2) To UBound(v2)
                t = .Match(v2(i), v1, 0)
                    If t = 0 Then
                        p = p + 1
                    Else
                        t = 0
                    End If
            Next i
        End With
        [c1] = p
End Sub
 
Dat scheelt wel. Nu nog even jouw code ontcijferen :D

Sowieso bedankt voor de code! :thumb:
 
Laatst bewerkt:
In een notedop. Je vormt 2 matrixen met je 2 bereiken, daarna gebruik je de werkbladfunctie Vergelijken om elk element van matrix 2 te vergelijken met de volledige matrix 1. Bij overeenkomst krijgt t de waarde van het element van matrix 2 dus <> 0 en de macro gaat naar het volgende element. Bij geen overeenkomst krijgt t de waarde 0 dus wordt bij het resultaat p 1 opgeteld en de macro gaat verder met het volgende element totdat alle elementen van matrix 2 doorlopen zijn.
Het voordeel van deze werwijze is dat ze volledig gebeurt in het werkgeheugen wat tijdswinst oplevert tegenover een loop op het werkblad.
Hoop dat het hiermee iets duidelijker wordt.
 
Misschien helpt een bijlage
ik hoop dat het efficiënter kan in één formule.
Ja, dat kan:
=som(als(aantal.als(a1:a4;b1:b7);;1))
Invoeren via Ctrl-Shift-Enter.
En bereiken aanpassen aan je bestand met 10000 rijen.
 
Rudi, je uitleg is helemaal helder. Weer iets geleerd! :thumb:

Zapatr, ik ga jouw oplossing ook nog uittesten, ben benieuwd! :thumb:

Bedankt voor het meedenken iedereen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan