web-dev-qa-db-fra.com

Référence Excel à la cellule actuelle

Comment obtenir une référence à la cellule actuelle?

Par exemple, si je veux afficher la largeur de la colonne A, je pourrais utiliser ce qui suit:

=CELL("width", A2)

Cependant, je veux que la formule ressemble à ceci:

=CELL("width", THIS_CELL)
57
Steven

Créez une formule nommée appelée THIS_CELL

  1. Dans la feuille de calcul actuelle, sélectionnez la cellule A1 (c'est important!)
  2. Ouvrez Name Manager (Ctl + F3)
  3. Cliquez sur New...
  4. Entrez "THIS_CELL" (ou simplement "THIS", ce qui est ma préférence) dans Name:
  5. Entrez la formule suivante dans Refers to:

    =!A1

    Remarque: assurez-vous que la cellule A1 est sélectionnée. Cette formule est relative à ActiveCell.

  6. Sous Scope:, sélectionnez Workbook.

  7. Cliquez sur OK et fermez le Name Manager

Utilisez la formule de la feuille de calcul exactement comme vous le souhaitiez

=CELL("width",THIS_CELL)

EDIT: Meilleure solution que d'utiliser INDIRECT()

Il convient de noter que la solution que j'ai donnée doit être préférée à toute solution utilisant la fonction INDIRECT() pour deux raisons: 

  1. Elle est non volatile, alors que INDIRECT() est une fonction Excel volatile, ce qui ralentit considérablement le calcul du classeur s’il est beaucoup utilisé.
  2. C'est beaucoup plus simple et il n'est pas nécessaire de convertir une adresse (sous la forme ROW()COLUMN()) en une référence de plage en adresse et de revenir à une référence en plage. 

EDIT: Voir aussi cette question pour plus d’informations sur les plages nommées, classées au niveau du classeur.

EDIT: Voir aussi la réponse de @ imix ci-dessous pour une variation de cette idée (en utilisant des références de style RC). Dans ce cas, vous pouvez utiliser =!RC pour la formule de plage THIS_CELL ou simplement utiliser RC

32
Rick Teachey

Plusieurs années trop tard:

Juste pour être complet, je veux donner encore une autre réponse:

Premièrement, allez dans Excel-Options -> Formulas et activez les références R1C1. Puis utiliser

  =CELL("width", RC)

RC fait toujours référence à la ligne en cours, à la colonne en cours, c’est-à-dire "cette cellule".

_ { Solution de Rick Teachey } _ est fondamentalement un Tweak pour rendre la même chose possible dans le style de référence A1 (voir aussi le commentaire de GSerg à la réponse de Joey et notez son commentaire à la réponse de Patrick McDonald).

À votre santé
:-)

32
imix

Vous pourriez utiliser

=CELL("width", INDIRECT(ADDRESS(ROW(), COLUMN())))
31
Patrick McDonald

=ADDRESS(ROW(),COLUMN(),4) nous donnera l'adresse relative de la cellule en cours. =INDIRECT(ADDRESS(ROW(),COLUMN()-1,4)) nous donnera le contenu de la cellule à gauche de la cellule actuelle =INDIRECT(ADDRESS(ROW()-1,COLUMN(),4)) nous donnera le contenu de la cellule au-dessus de la cellule actuelle (idéal pour calculer les totaux cumulés)

Utiliser CELL () function renvoie des informations sur la dernière cellule modifiée. Ainsi, si nous entrons dans une nouvelle ligne ou colonne, la référence CELL () sera affectée et ne sera plus celle de la cellule actuelle.

24
andy

A2 est déjà une référence relative et changera lorsque vous déplacez la cellule ou copiez la formule.

7
Joey

Sans INDIRECT (): =CELL("width", OFFSET($A$1,ROW()-1,COLUMN()-1) )

5
Cosmin Rus
=ADDRESS(ROW(),COLUMN())
=ADDRESS(ROW(),COLUMN(),1)
=ADDRESS(ROW(),COLUMN(),2)
=ADDRESS(ROW(),COLUMN(),3)
=ADDRESS(ROW(),COLUMN(),4)
4
Sebasitankg

Il existe un meilleur moyen, plus sûr et qui ne ralentira pas votre application. Comment Excel est configuré, une cellule peut avoir une valeur ou une formule; la formule ne peut pas faire référence à sa propre cellule. Vous vous retrouvez avec une boucle infinie, car la nouvelle valeur provoquerait un autre calcul .... Utilisez une colonne d'assistance pour calculer la valeur en fonction de ce que vous avez mis dans l'autre cellule. Par exemple:

La colonne A est vraie ou fausse, la colonne B contient une valeur monétaire, la colonne C contient la formule suivante: = B1

Maintenant, pour calculer que la colonne B sera surlignée en jaune dans un format conditionnel uniquement si la colonne A est vraie et la colonne B supérieure à zéro.

= ET (A1 = Vrai, C1> 0)

Vous pouvez ensuite choisir de masquer la colonne C

1
Ester

J'ai trouvé le meilleur moyen de gérer cela (pour moi), c'est d'utiliser ce qui suit:

Dim MyString as String
MyString = Application.ThisCell.Address
Range(MyString).Select

J'espère que cela t'aides.

1
Barry LaBonte

Dans les tables, vous pouvez utiliser [@] qui (malheureusement) Excel est automatiquement développé en Table1[@] mais cela fonctionne. (J'utilise Excel 2010)

Par exemple, lorsque vous avez deux colonnes [Change] et [Balance], mettez ceci dans la colonne [Balance]:

=OFFSET([@], -1, 0) + [Change]

Notez bien sûr que cela dépend de l'ordre des lignes (comme la plupart des solutions), donc c'est un peu fragile.

1
Jannes

EDIT: le texte suivant est incorrect, car Cell ("width") renvoie la largeur de la dernière cellule modifiée.

Cell("width") renvoie la largeur de la cellule en cours, vous n'avez donc pas besoin d'une référence à la cellule en cours. Si vous en avez besoin, cell("address") renvoie l'adresse de la cellule actuelle. Si vous avez besoin d'une référence à la cellule actuelle, utilisez indirect(cell("address")). Voir la documentation: http://www.techonthenet.com/Excel/formulas/cell.php

0
P. Myer Nore