J'ai une plage non contiguë sur des lignes (exemple d'adresse de MyRange: 2 $: 2 $ 2, 4 $: 205 $, 215 $, 214 $: 214 $) et j'aimerais accéder à une ligne et à une colonne spécifiques dans la gamme. J'ai essayé ce qui suit:
'Obtenez la valeur de la 2e rangée, 1ère colonne dans la plage p> Cependant, cela me donne la valeur de la 2e rangée Dans la feuille de calcul, et non dans la gamme - ce qui signifie qu'il me donne une adresse 3 $ 1 $ - et pas de 4 $ 1 $ p> Peut-on expliquer comment je peux accéder aux valeurs dans ma gamme? (Cela peut avoir à voir avec différentes zones) P> merci p> p>
4 Réponses :
Je pense que ce que vous voulez que VBA fasse, c'est voir votre gamme non contiguë comme une contiguë. Je ne pense pas que l'approche que vous prenez fonctionnera. Vous devrez traiter cela comme des gammes contiguës à plusieurs mûres. Le code suivant devrait vous aider à démarrer. Lorsque la row sélection est la ligne de votre plage que vous êtes intéressé. Si vous entrez 2, il sélectionnera la ligne 4 dans le classeur, car il s'agit de la deuxième ligne de votre gamme.
Sub Macro1()
Dim rowCounter As Long
Dim rowSelection As Long
rowSelection = 2
For Each Rng In Range("A2:A2,A4:A205,A214:A214").Areas
If Rng.Rows.Count >= rowSelection Then
Rng.Rows(rowSelection - rowCounter).Cells(1, 1).Select
End
Else
rowCounter = rowCounter + Rng.Rows.Count
End If
Next Rng
End Sub
Voici mes entrées - pas nécessairement mieux que Irwin
Sub test()
Dim myRange As Range
Set myRange = Union(Rows(2), Range("4:205"), Rows(214))
Debug.Print GetValue(myRange, 1, 2), GetValue(myRange, 1, 2)
Debug.Print GetValue(myRange, 2, 2), GetValue(myRange, 2, 2)
Debug.Print GetValue(myRange, 3, 2), GetValue(myRange, 3, 2)
Debug.Print GetValue(myRange, 200, 2), GetValue(myRange, 200, 2)
End Sub
Merci à tout le monde pour leurs réponses - Avant de voir ces réponses, je me suis inscrit moi-même et je travaille jusqu'à présent. Je ne dirai pas que c'est la méthode la plus efficace, mais semble fonctionner:
NextRow(2, myRange).Cells(,1).value
Jeffrey, vous devriez envisager de choisir votre propre réponse ou une autre réponse ci-dessous comme réponse correcte en cliquant sur la coche en regard de celui que vous ressentez la meilleure réponse à votre question.
Ce code iTère via une plage nommée: