2009-07-11 8 views
8

Compte tenu d'une ligne et de colonne (As Long), comment pouvez-vous déterminer la notation de feuille de calcul en utilisant VBA dans Excel (2007):Comment accéder à la notation Row, Column to Excel A1?

par exemple:

(R, C) = (1, 1) -> "A1" 
(R, C) = (2, 1) -> "A2" 
(R, C) = (2, 2) -> "B2" 

Ainsi, si vous aviez une fonction:

Function CellRef(R As Long, C As Long) As String 

qui a fourni cette fonctionnalité, vous pouvez faire quelque chose comme:

Worksheet.Range(CellRef(R1, C1) + ":" + CellRef(R2, C2)).Copy 

Un peu de fond, dans le cas où c'est la mauvaise approche à prendre: Le but de cela est que j'ai une feuille de maître qui décrit d'autres feuilles de calcul dans un tableau:

WorksheetName, Range etc.... 

Ce contrôle feuille maître des transformations sur la feuille , mais la valeur Range est évidemment en notation Excel pour une utilisation ultérieure pratique dans le référencement de la gamme. Cependant, une routine pour gérer cette table, rapporter les exceptions et assurer la cohérence obtient vraiment des choses d'autres feuilles en ligne et en colonne, ainsi par exemple elle obtient une ligne et une colonne où elle sait que quelque chose commence et se termine.

Voici la fonction que j'ai fini avec:

Private Function CellRef(R As Long, C As Long) As String 
    CellRef = vbNullString 
    On Error GoTo HandleError: 
    CellRef = Replace(Mid(Application.ConvertFormula("=R" & R & "C" & C, XlReferenceStyle.xlR1C1, XlReferenceStyle.xlA1), 2), "$", "") 
    Exit Function 
HandleError: 
End Function 

Répondre

4

Peut-être this est ce que vous cherchez?

+0

Avec quelques modifications, qui a bien fonctionné, merci. –

+1

+1. Eh bien, afficher une partie de ce code ici ou au moins expliquer comment cela est fait aiderait. (Link pourri un jour pourrait laisser cette réponse moins utile) :) –

3

Column Numbers to Letters

Column Letters to Numbers

Les bonnes choses est dans les commentaires

+0

Wow, cool stuff. Je ne suis pas sûr que ceux-ci soient meilleurs que ce que j'ai trouvé avec Application.ConvertFormula trouvé par la première réponse, cependant. –

+0

D'accord. Je viens d'inclure pour l'exhaustivité. –

+0

C'est un super blog que tu as là;) – onedaywhen

1

http://support.microsoft.com/kb/833402 est une solution Microsoft pour le problème de la conversion de nombres en lettres (la partie la plus délicate de la conversion de 1,1 à A1). Cela a en fait le mérite de travailler dans d'autres applications qu'Excel car il repose sur VBA de base.

Ensuite, vous ajoutez:

' Converts row and column index to Excel notation, ie (3, 2) to B3. 
Private Function generateExcelNotation(row As Integer, column As Integer) As String 
    ' error handling of your choice, I go for returning an empty string 
    If (row < 1 Or column < 1) Then 
     generateExcelNotation = "" 
     Exit Function 
    End If 
    generateExcelNotation = ConvertToLetter(column) & row 
End Function 
Questions connexes