web-dev-qa-db-fra.com

Numéro de colonne Excel à partir du nom de la colonne

Comment obtenir le numéro de colonne du nom de la colonne dans Excel en utilisant une macro Excel?

64
Paritosh Ahuja

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É

enter image description here

152
Siddharth Rout

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.

4
Grade 'Eh' Bacon

É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.

1

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.

0
Spider IT

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!

0
Troy

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. ;)

0
loved.by.Jesus