Comment obtenir le numéro de colonne à partir du nom de la colonne dans Excel en utilisant une macro Excel ?
Réponses
Trop de publicités?Je pense que tu veux ça ?
Du nom de la colonne au numéro de la colonne
Sub Sample()
ColName = "C"
Debug.Print Range(ColName & 1).Column
End Sub
Modifier : Y compris l'inverse de ce que vous voulez
Numéro de colonne vers nom de colonne
Sub Sample()
ColNo = 3
Debug.Print Split(Cells(, ColNo).Address, "$")(1)
End Sub
SUIVRE
Par exemple, si j'ai un champ de salaire tout en haut, disons dans la cellule C(1,1), si je modifie le fichier et que je déplace la colonne de salaire à un autre endroit, disons F(1,1), je devrai modifier le code. Je veux que le code vérifie le salaire et trouve le numéro de colonne, puis effectue le reste des opérations en fonction de ce numéro de colonne.
Dans ce cas, je recommande d'utiliser .FIND
Voir l'exemple ci-dessous
Option Explicit
Sub Sample()
Dim strSearch As String
Dim aCell As Range
strSearch = "Salary"
Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
MsgBox "Value Found in Cell " & aCell.Address & _
" and the Cell Column Number is " & aCell.Column
End If
End Sub
SNAPSHOT
Pendant que vous cherchiez une solution VBA, c'était le premier résultat que j'ai obtenu sur Google lorsque je cherchais une solution pour une formule, alors je vais l'ajouter pour tous ceux qui sont venus ici pour cela comme moi :
Formule Excel pour retourner le numéro d'une lettre de la colonne (D'après le commentaire de @A. Klomp ci-dessus), où la cellule A1 contient la ou les lettres de votre colonne :
\=colonne(indirect(A1&"1"))
Comme la fonction indirecte est volatile, elle recalcule chaque fois qu'une cellule est modifiée. Si vous en avez beaucoup, cela peut ralentir votre classeur. Envisagez une autre solution, telle que la fonction "code", qui vous donne le numéro d'un caractère ASCII, en commençant par le "A" à 65. Notez que pour ce faire, vous devrez vérifier combien de chiffres se trouvent dans le nom de la colonne et modifier le résultat en fonction de 'A', 'BB' ou 'CCC'.
Formule Excel pour retourner le lettre de la colonne à partir d'un nombre (D'après cette question précédente Comment convertir un numéro de colonne (par exemple 127) en une colonne Excel (par exemple AA) ? (réponse de @Ian), où A1 contient votre numéro de colonne :
\=substituer(adresse(1,A1,4), "1","")
Notez que ces deux méthodes fonctionnent quel que soit le nombre de lettres du nom de la colonne.
J'espère que cela aidera quelqu'un d'autre.
Voici une solution purement VBA, car Excel peut contenir des cellules jointes :
Public Function GetIndexForColumn(Column As String) As Long
Dim astrColumn() As String
Dim Result As Long
Dim i As Integer
Dim n As Integer
Column = UCase(Column)
ReDim astrColumn(Len(Column) - 1)
For i = 0 To (Len(Column) - 1)
astrColumn(i) = Mid(Column, (i + 1), 1)
Next
n = 1
For i = UBound(astrColumn) To 0 Step -1
Result = (Result + ((Asc(astrColumn(i)) - 64) * n))
n = (n * 26)
Next
GetIndexForColumn = Result
End Function
Fondamentalement, cette fonction fait la même chose que n'importe quelle fonction Hex vers Dec, sauf qu'elle ne prend que des caractères alphabétiques (A = 1, B = 2, ...). Le caractère le plus à droite ne compte qu'une fois, chaque caractère à gauche compte 26 fois le caractère à droite (ce qui donne AA = 27 [1 + 26], AAA = 703 [1 + 26 + 676]). L'utilisation de UCase() rend cette fonction insensible à la casse.
Basé sur la réponse d'Anastasiya. Je pense que c'est la commande vba la plus courte :
Option Explicit
Sub Sample()
Dim sColumnLetter as String
Dim iColumnNumber as Integer
sColumnLetter = "C"
iColumnNumber = Columns(sColumnLetter).Column
MsgBox "The column number is " & iColumnNumber
End Sub
Avertissement : La seule condition pour que ce code fonctionne est qu'une feuille de calcul soit active, parce que Columns
est équivalent à ActiveSheet.Columns
. ;)
- Réponses précédentes
- Plus de réponses