Comment obtenir le nom de la colonne actuelle dans Excel?

30

Quelle est la fonction pour obtenir le numéro de ligne actuel et le nom de colonne actuel pour une cellule dans Excel?

Jader Dias
la source
1
Je viens de découvrir les fonctions LINet COLle problème est qu'ils renvoient des nombres et j'ai besoin de la lettre de la colonne INDIRECT.
Jader Dias
2
vous pouvez utiliser la OFFSETfonction conjointement avec, ou au lieu de, la INDIRECTformule dans ce cas. Si vous souhaitez utiliser des chaînes, j'ai également mis à jour ma réponse.
Percée du
Soit dit en passant, INDIRECT est une fonction volatile, alors utilisez-la avec parcimonie. Il semble que je sois OFFSET pourrait être un meilleur choix ici si vous basez la référence que vous voulez sur un calcul de position.
AdamV

Réponses:

33

Vous pouvez utiliser les fonctions ROWet COLUMNpour ce faire. Si vous omettez l'argument de ces formules, la cellule actuelle est utilisée. Ceux-ci peuvent être directement utilisés avec la OFFSETfonction ou toute autre fonction où vous pouvez spécifier à la fois la ligne et la colonne comme valeurs numériques.

Par exemple, si vous entrez =ROW()dans la cellule D8, la valeur renvoyée est 8. Si vous entrez =COLUMN()dans la même cellule, la valeur renvoyée est 4.

Si vous voulez la lettre de colonne, vous pouvez utiliser la CHARfonction. Je ne recommande pas l'utilisation de lettres pour représenter la colonne, car les choses deviennent délicates lors du passage dans des noms de colonne à deux lettres (où l'utilisation de chiffres est de toute façon plus logique).

Quoi qu'il en soit, si vous souhaitez toujours obtenir la lettre de la colonne, vous pouvez simplement ajouter 64 au numéro de colonne (64 étant alors un caractère de moins A), donc dans l'exemple précédent, si vous définissez la valeur de la cellule sur =CHAR(COLUMN()+64), la valeur renvoyée serait D. Si vous vouliez que la valeur d'une cellule soit l'emplacement de la cellule elle-même, la formule complète serait =CHAR(COLUMN()+64) & ROW().


Juste un FYI, j'ai obtenu 64 d'une table ASCII. Vous pouvez également utiliser la CODEformule, de sorte que la formule mise à jour en utilisant ce serait =CHAR(COLUMN() + CODE("A") - 1). Vous devez soustraire 1 puisque la valeur minimale de COLUMNest toujours 1, puis la valeur de retour minimale de la formule entière serait B.

Cependant, cela ne fonctionnera pas avec les colonnes à deux lettres. Dans ce cas, vous avez besoin de la formule suivante pour analyser correctement les colonnes à deux lettres:

=IF(COLUMN()>26,IF(RIGHT(CHAR(IF(MOD(COLUMN()-1,26)=0,1,MOD(COLUMN()-1,26))+64),1)="Y",CHAR(INT((COLUMN()-1)/26)+64) & "Z",CHAR(INT((COLUMN()-1)/26)+64) & CHAR(IF(MOD(COLUMN(),26)=0,1,MOD(COLUMN(),26))+64)),CHAR(COLUMN()+64))&ROW()

Je ne sais pas s'il existe un moyen plus facile de le faire ou non, mais je sais que cela fonctionne de la cellule A1à ZZ99sans problème. Cependant, cela illustre pourquoi il est préférable d'éviter l'utilisation d'identificateurs de colonne basés sur des lettres et de s'en tenir à des formules basées sur des nombres purs (par exemple, en utilisant le numéro de colonne au lieu de la lettre avec OFFSET).

Percée
la source
Cela ne fonctionnera que pour les 26 premières colonnes. Mais cela suffira.
Jader Dias
1
@Jader Dias c'est pourquoi je vous recommande d'utiliser à la OFFSETplace, ce qui vous permet de spécifier des colonnes sous forme de nombres. Quoi qu'il en soit, j'ai mis à jour la réponse avec une formule pour l'étendre pour qu'elle fonctionne avec des colonnes à deux lettres.
Percée du
2
Je ne sais pas pourquoi cette réponse a obtenu autant de votes alors que la réponse de Scot est tellement meilleure, sauf qu'il ne l'a pas expliqué. Aucune formule complexe n'est nécessaire. J'ai ajouté un commentaire pour expliquer pourquoi / comment cela fonctionne.
Gerhard Powell
Cela fonctionne jusqu'à ce que vous passiez à AA, etc., cela ne fonctionnera pas.
krystan honor
@krystanhonour utilise la dernière formule de ma réponse dans ce cas ...However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Percée du
34

Essayez la fonction suivante:

=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")

Explication: ADDRESS(row_num, column_num, [abs_num]). [abs_num] = 4= adresse relative. Cela signifie qu'il n'y a pas de «$» dans la valeur retournée. Pour la colonne 'AB', le ADDRESSretourne 'AB1'. Le remplaçant supprime le «1».

Scot Sutton
la source
5

Essaye ça

=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")

Cela vous donne un en-tête de colonne exact, sans $ etc.

gaurav aggarwal
la source
2

Tapez ceci dans n'importe quelle cellule:

Español :

=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)

Anglais :

=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)

Vous pouvez remplacer la colonne () par le numéro de ligne.

sygn
la source
2

Pour obtenir le nom de la colonne, j'ai utilisé les formules suivantes.

Pour une cellule particulière:

=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")

Pour la cellule actuelle:

=SUBSTITUTE(CELL("address"),"$" & ROW(),"")

Essayez cette variante. Il fonctionne sur des colonnes de 3 lettres et ne laisse pas de "$" sur le front end:

=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Vikas Madaan
la source
2

Légèrement manuel mais moins de VBA et une formule plus simple:

  • Dans une ligne d'Excel, par exemple la cellule A1, entrez le numéro de colonne =column()
  • Dans la ligne ci-dessous, entrez =Address(1,A1)
  • Cela fournira le résultat $A$1

Une fois les valeurs copiées, recherchez et remplacez $et 1avec vide.

Steve
la source
2

Cela fonctionnera aussi

=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)
edl
la source
Pouvez-vous ajouter quelques explications à cela.
ChrisF
1

Une autre façon possible serait d'utiliser quelque chose comme ceci:

=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())

colidfait référence à une plage nommée que vous créeriez ailleurs dans le classeur comprenant deux colonnes adjacentes avec plusieurs lignes: la première colonne contenant les nombres 1 à n correspondant au COLUMN()nombre, la seconde contenant les lettres A - ZZ, ou le nombre de références de colonne que vous avez souhaitent accueillir. Il ROW()n'y a plus de problème car il s'agit de renvoyer le numéro de ligne.

Donc, si vous copiez la chaîne ci-dessus dans la cellule A1 de 'MySheet2', elle serait évaluée comme =MySheet1!A1et retournerait la valeur trouvée dans la cellule correspondante de MySheet1.

Cela vous permettrait, par exemple, d'utiliser MySheet1comme zone de travail, de supprimer et de réinsérer de nouvelles données, tandis que tout formatage ou calcul MySheet2faisant référence à ces contenus continuera de fonctionner correctement avec les nouveaux jeux de données de la feuille de calcul à onglets cible.

Tigrou
la source
1

Solution pour la version Excel polonaise:

  • pour une cellule particulière:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
  • pour la cellule actuelle:
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")
mla
la source
0

Voici une solution VBA, formule définie par l'utilisateur. Il fonctionne avec des colonnes à 1, 2 et 3 lettres.

Mettez ce qui suit dans un module de code:

Function COLUMNLETTER(Optional rng As Range) As String
    'Returns the Column Letter of the top left cell in rng.

    If rng Is Nothing Then Set rng = Application.Caller
    COLUMNLETTER = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))

End Function

= COLUMNLETTER () dans n'importe quelle cellule renverra la lettre de colonne de la cellule.
= COLUMNLETTER (B3) dans une cellule retournera B .

Cette fonction définie par l'utilisateur fonctionne très bien lors de la création de formules génériques à l'intérieur de la fonction INDIRECTE.

GollyJer
la source
0
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)

La formule d'adresse fonctionne en renvoyant le nom de la colonne et de la ligne. Le format renvoyé sera toujours $(Column Letters)$(Row Numbers)- par exemple $AA$2ou$XAA$243556

Si nous savons que $ apparaîtra toujours au premier caractère, nous pouvons utiliser la première formule médiane pour commencer à extraire les caractères après le premier signe $ (c'est-à-dire le deuxième caractère).

Ensuite, nous trouvons le prochain signe $ (comme nous savons qu'il n'y en aura que deux) et nous savons combien de caractères il y a entre le premier et le deuxième signe dollar. Le reste est une simple soustraction.

Jon
la source
0

Voici comment trouver l'en-tête de colonne (c'est-à-dire la lettre):

=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)
Hermen
la source
0

essaye ça:

=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
denz
la source
0

La formule suivante fonctionne peu importe où vous la placez (elle vous donnera le nom de la colonne).

=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")
Excellll
la source
-1

essaye ça:

= SI (COLONNE ()> 26, CHAR (COLONNE () / 26 +64), "") & CHAR (MOD (COLONNE () - 1,26) +65) & LIGNE ()

cette fonction est effective jusqu'à "ZY1" ou colonne = 701

ayus
la source
4
Veuillez développer cette réponse en expliquant quelles sont ces fonctions.
Kevin Panko
obtenir le nom de la colonne actuelle dans Excel, comme "A1", "B1", ... même comme "AA1", "BA1", "CA1", ...
ayus
-1
=IF(COLUMN()>702,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),4),3),IF(COLUMN()>26,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),3),2),RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),2),1)))
mkltmsck
la source