Comment obtenir le numéro de colonne du nom de la colonne dans Excel en utilisant une macro Excel?
Je pense que tu veux ça?
Nom de la colonne en numéro de colonne
Sub Sample()
ColName = "C"
Debug.Print Range(ColName & 1).Column
End Sub
Edit: Incluant également l'inverse de ce que vous voulez
numéro de colonne à nom de colonne
Sub Sample()
ColNo = 3
Debug.Print Split(Cells(, ColNo).Address, "$")(1)
End Sub
SUIVI
Par exemple, si j'ai un champ salarial au sommet, disons à la cellule C (1,1) maintenant si je modifie le fichier et déplace la colonne des salaires vers un autre endroit, disons F (1,1), puis je devrai modifier le code afin 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 un tel cas, je recommanderais d'utiliser .FIND
Voir cet 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
INSTANTANÉ
Alors que vous recherchiez une solution VBA, c’était mon meilleur résultat sur Google lorsque je recherchais une solution de formule, je vais donc l’ajouter à tous ceux qui sont venus ici pour cela, comme je l’ai fait:
Formule Excel pour renvoyer le numéro d'une lettre de colonne (De @A. Klomp, commentaire ci-dessus), où la cellule A1 contient votre ou vos lettres de colonne:
= colonne (indirecte (A1 & "1"))
Comme la fonction indirecte est volatile, elle recalcule chaque fois qu'une cellule est modifiée. Par conséquent, si vous en avez beaucoup, cela pourrait ralentir votre classeur. Considérez une autre solution, telle que la fonction 'code', qui vous donne le numéro d'un caractère ASCII, commençant par 'A' à 65. Notez que pour ce faire, vous devez vérifier le nombre de chiffres. dans le nom de la colonne et modifiez le résultat en fonction de 'A', 'BB' ou 'CCC'.
Formule Excel pour renvoyer la lettre de colonne d'un nombre (à partir de cette question précédente Comment convertir un numéro de colonne (par exemple, 127) en un Colonne Excel (par exemple AA) , répondue par @Ian), où A1 contient votre numéro de colonne:
= substitut (adresse (1, A1,4), "1", "")
Notez que ces deux méthodes fonctionnent quel que soit le nombre de lettres dans le nom de la colonne.
J'espère que ceci aide quelqu'un d'autre.
Écrivez et exécutez le code suivant dans la fenêtre immédiate
?cells(,"type the column name here").column
Par exemple, ?cells(,"BYL").column
renverra 2014. Le code n'étant pas sensible à la casse, vous pouvez écrire ?cells(,"byl").column
et la sortie sera toujours la même.
Voici une solution VBA pure 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 est identique à toute fonction Hex to Dec, à la différence près qu'elle ne prend que des caractères alphabétiques (A = 1, B = 2, ...). Le caractère le plus à droite compte simple, chaque caractère à gauche compte 26 fois le caractère qui lui correspond (ce qui donne AA = 27 [1 + 26], AAA = 703 [1 + 26 + 676]). L'utilisation de UCase () rend cette fonction insensible à la casse.
Vous pouvez ignorer tout cela et simplement mettre vos données dans un tableau. Ensuite, référez-vous à la table et à l'en-tête et ce sera complètement dynamique. Je sais que cela a été fait il y a 3 ans, mais quelqu'un peut toujours trouver cela utile.
Exemple de code:
Activesheet.Range("TableName[ColumnName]").Copy
Vous pouvez aussi utiliser :
activesheet.listobjects("TableName[ColumnName]").Copy
Vous pouvez même utiliser ce système de référence dans les formules de feuille de calcul. C'est très dynamique.
J'espère que cela t'aides!
Basé sur la réponse d'Anastasiya. Je pense que c'est la commande la plus courte de vba:
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
Mise en garde: la seule condition pour que ce code fonctionne est qu'une feuille de calcul est active, car Columns
est équivalent à ActiveSheet.Columns
. ;)