• 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.

voorwaarde met.. array?

Status
Niet open voor verdere reacties.

koster1984

Gebruiker
Lid geworden
4 jul 2012
Berichten
337
Goedemorgen beste experts,

Ik wil graag met een 'for each' loop, obv variabele voorwaarden, een bewerking doen. Ik dacht dat ik met onderstaande in de buurt kwam, maar niet helemaal dus.

Ik voeg een simpel voorbeeldje bij, zou iemand mij op weg kunnen helpen?

Code:
Sub test()
Dim it As Range
For Each it In Range("A2:A10")
    If it.Offset(, 1) <> Array("ab", "ae", "ag") Then it.Offset(, 2) = "v"
Next
End Sub
 

Bijlagen

Doe het eens zo:
Code:
Sub test()
    Dim it As Range
    Dim Zoek As String

    Zoek = "ab|ae|ag"
    For Each it In Range("B2:B10")
        If InStr(Zoek, it.Value) > 0 Then it.Offset(, 1) = "v"
    Next
End Sub
 
Met een echte Array:

Code:
Sub M_snb()
  sn = Range("B2:C10")

  For j=1 to ubound(sn)
    If InStr("|ab|ae|ag|", "|" & sn(j,1) & "|")  Then sn(j,2) = "v"
  Next

  Range("B2:C10") = sn    
End Sub
 
Dit is inderdaad precies wat ik zoek. Ik maak een combi van beide suggesties, de eerste omdat ik de 'for each' wil behouden en de zoekstring uitbreiden met | tekens om te zorgen dat de code naar de gehele tekst zoekt.

Code:
Sub test()
    Dim it As Range, zoek As String
    zoek = "|ab|ae|ag|"
    For Each it In Range("B2:B10")
        If InStr(zoek, "|" & it.Value & "|") Then
            it.Offset(, 1) = "v"
        End If
    Next
End Sub

Bedankt allebei!
 
Code:
Sub test()
   Dim it      As Range
   For Each it In Range("A2:A10")
      i = Application.Match(it.Offset(, 1).Value, Array("ab", "ae", "ag"), 0)
      If Not IsNumeric(i) Then it.Offset(, 2) = "v"
   Next
End Sub
 
Code:
Sub ZonderLoopVoorDeFun() 'met hele array in geheugen
   Range("B2:C10") = Evaluate("CHOOSE({1,2},B2:B11,IF(ISNUMBER(MATCH(B2:B11,{""ab"",""ae"",""ag""},0)),"""",""v""))")
End Sub
 
Waarom niet met een formule

Code:
=ALS(ISGETAL(VERGELIJKEN($B$2:$B$11;{"ab";"ae";"ag"};0));"v";"")
 
Vertaald naar Vba.

Code:
Range("c2:c11") = [if(isnumber(match(b2:b11,{"ab","ae","ag"},0)),"","v")]

andersom komt de "v" op de andere plaats natuurlijk.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan