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

Range opvragen

Status
Niet open voor verdere reacties.

Peenvogel

Gebruiker
Lid geworden
5 mei 2015
Berichten
129
Ik heb een werkblad met 41 rijen en 100 kolommen.
Daarin staat de volgende code: (met dank aan Cobbe,Timshell en HSV, die mij geholpen hebben met de eerste aanzet)

Code:
Function VindRange(rng As Range, rng1 As Range) As String
Dim strOut As Variant
Dim RA As Variant
Dim RB As Variant
Dim I As Integer
Dim J As Integer
Dim x As Variant
x = rng1.Value
    
       For J = 2 To 95 Step 13
        
           For I = 2 To 41
               
               RA = Cells(I, J)
               RB = Cells(I, J + 2)
           
                 If RA = x And RB = "." Then
                 strOut = strOut & RA
                 End If
            
          Next I
          
       Next J
    
VindRange = strOut
End Function

Er wordt dus gezocht naar een waarde x
Als die waarde gevonden wordt, wordt er gekeken naar de waarde van de cel die 2 kolommen verderop staat.
Als die gelijk is aan een punt zou ik graag als resultaat in de strOut het adres van de cel die gelijk is aan de waarde van x zien staan.
De functie werkt. Ik krijg bv als er naar x gezocht, 6 keer een resultaat en dat klopt met wat er in dat werkblad staat.

Wat is de juiste syntax om de range-naam van de cel RA in de strOut te krijgen? Kan dit überhaupt of vraag ik iets onmogelijks.

Bij voorbaat dank.
Groetjes, Ron.
Ik gebruik excel-2003.
 
Laatst bewerkt:
Dag Ron,

In jouw voorbeeld kan ik een 'rng' invullen bv. H10:Bl100 in de UDF.
Wie zegt dat het cells(I,J) is?

In jouw beleving van de UDF is de range al bepaald in de code met de lussen denk ik (anders had step 13 er niet gestaan), terwijl ik af ga op de 'rng' van wat ik invul in de UDF.

Zo kan het met een eerste opzet, maar hier krijg jij vast geen adressen retour, terwijl dat in mijn testbestand wel het geval is.
Code:
Function VindRange(rng As Range, rng1 As Range) As String
Dim strOut As Variant
Dim RA As String
Dim RB As String
Dim I As Integer
Dim J As Integer
Dim x As Variant
Application.Volatile
x = rng1
    For J = 2 To 95 Step 13
       For I = 1 To 41
               RA = rng.Cells(I, J - 1).Address
               RB = rng.Cells(I, J + 1).Address
            If Range(RA).Value = x And Range(RB).Value = "." Then
                strOut = strOut & RA & ", "
            End If
         Next I
    Next J
 VindRange = strOut
End Function
 
Laatst bewerkt:
Beste Harry,
Jouw code werkt als een tierelier om de range te krijgen die ik wil.
Het begint erop te lijken, dat ik maar eens moet gaan sparen om je orkest te betalen:d
Groetjes,Ron.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan