Comment puis-je obtenir une cellule du poste au sein d'une gamme?
Comment puis-je obtenir la position relative d'une cellule dans une plage? Trouver la position d'une cellule dans une feuille de calcul est trivial, à l'aide de la Row
- et Column
-propriétés, mais je ne suis pas sûr de la façon de faire de même à l'intérieur d'une plage.
J'ai considéré l'utilisation de la position de la partie supérieure gauche de la cellule dans la plage je veux trouver la position d'une cellule, et ce juste de la déduire (-1) à partir de la position de la cellule dans la feuille de calcul, mais il devient un peu lourd. Est-il une façon plus élégante pour aller à ce sujet?
Ma meilleure tentative, y compris un test, jusqu'à présent, est-ce:
Option Explicit
Sub test()
Dim r As Range: Set r = Sheet1.Range("B2:E10")
Dim c As Range: Set c = Sheet1.Range("C2")
Debug.Print "Column in sheet: " & c.Column
Debug.Print "Row in sheet: " & c.Row
Debug.Print "Column in range: " & column_in_range(r, c)
Debug.Print "Row in range: " & row_in_range(r, c)
End Sub
Function column_in_range(r As Range, c As Range) As Long
column_in_range = c.Column - (r.Cells(1, 1).Column - 1)
End Function
Function row_in_range(r As Range, c As Range) As Long
row_in_range = c.Row - (r.Cells(1, 1).Row - 1)
End Function
Ce qui donne le résultat souhaité:
Column in sheet: 3
Row in sheet: 2
Column in range: 2
Row in range: 1
Mais je me demande si il existe des fonctions natives je peux utiliser à la place?
N'oubliez pas, pas toutes les Gammes sont contigus des rectangles. Le code que vous écrivez, il doit prendre cela en compte.
OriginalL'auteur eirikdaude | 2015-06-15
Vous devez vous connecter pour publier un commentaire.
mis à jour à l'aide de la variante fournie par
lori_m
utiliser cette
sortie
Range(r(1),c).Columns.Count
etRange(r(1),c).Rows.Count
wow, oui, vous êtes également en droit, je l'ai testé uniquement avec OP gamme) si vous n'avez pas l'esprit, je vais poster votre variante pour les prochains utilisateurs, ou vous pouvez répondre et je vais voter, et ma réponse sera supprimé
Pas de soucis pour poster une mise à jour avec au-dessus de variante - l'idée qu'il a suivi de votre proposition initiale, en tout cas
OriginalL'auteur Vasily
Il n'est pas natif façon de le faire. Je fais aussi ce que vous avez mentionné dans le code ci-dessus. Cependant, j'ai mis quelques contrôles supplémentaires.
Je suis très certain, mais se sont avérées fausses couple de fois dans le passé 3 ans... je suis un être humain, après tout 😀
Hehe, je vais le laisser ouvert pour un temps plus long, ensuite, et de voir si d'autres réponses pop-up.
Yup même je recommande 😉
OriginalL'auteur Siddharth Rout
À mon avis il n'y a presque native moyen de le vérifier, mais le résultat est une chaîne demande quelques manipulations supplémentaires. Tout ce que vous devez utiliser est une bonne construction de
.Address property
(selon MSDN). Quelques exemples:en effet, la propriété est la même, mais la construction est totalement différent comme R2uK s n'a pas reconnu l'importance des deux premiers paramètres qui doivent être mis à
False
. Alors, il est de fournir les différentes solutions par rapport à la mienne...OriginalL'auteur Kazimierz Jawor
Prendre un coup d'oeil sur MSDN pour en voir plus.
Vous pouvez utiliser quelque chose comme :
Mais vous aurez à la fois des informations sur de ligne et de colonne dans la plage, mais pas séparément.
De sorte que vous aurez toujours besoin d'extraire ces valeurs à partir de la réponse (comme :
R18C20
) dans deux fonctions, alors à peu près le même problème...Pas de problème, c'est un classique de la question et j'étais juste en pointant une autre façon de l'aborder comme il n'y a aucun natif.
OriginalL'auteur R3uK
Je ne suis pas totalement sûr si c'est ce que vous êtes après.
Mais ici, il va:
Par la présente, vous trouverez la position relative.
Mais peut-être que vous avez été la recherche de quelques construite en fonction ?
Si ce n'était pas la chose que vous avez été au bout, merci d'éditer votre post...
OriginalL'auteur Rycket