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?

On dirait que vous êtes en demandant à un CodeReview, pensez à nous la prochaine fois.
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