78 votes

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

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

171voto

Siddharth Rout Points 63935

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

enter image description here

4voto

Grade 'Eh' Bacon Points 3426

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.

1voto

Spider IT Points 21

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.

1voto

É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 reviendra en 2014. Le code n'est pas sensible à la casse, vous pouvez donc écrire ?cells(,"byl").column et le résultat sera toujours le même.

1voto

loved.by.Jesus Points 1345

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X