web-dev-qa-db-fra.com

Formule Excel pour référencer 'CELLULE À GAUCHE'

J'essaie de faire une mise en forme conditionnelle pour que la couleur de la cellule change si la valeur est différente de la valeur dans la cellule à gauche de celle-ci (chaque colonne correspond à un mois, chaque ligne indique les dépenses relatives à un objet. Je souhaite surveiller changements de prix facilement au fil des mois.)

Je peux le faire par cellule et faire glisser le format, mais j'aimerais une formule générale à appliquer à l'ensemble de la feuille de calcul.

Merci!

63
mik
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
71
Jason Young

La version la plus courte et la plus compatible est:

=INDIRECT("RC[-1]",0)

"RC [-1]" signifie une colonne à gauche. "R [1] C [-1]" est en bas à gauche.

Le deuxième paramètre 0 signifie que le premier paramètre est interprété selon la notation R1C1.

Les autres options:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

Trop long à mon avis. Mais utile si la valeur relative est dynamique/dérivée d’une autre cellule. par exemple.: 

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1)

L'option la plus simple:

= RC[-1]

l'inconvénient est que vous devez activer la notation R1C1 à l'aide d'options, ce qui est interdit lorsque d'autres personnes doivent utiliser Excel.

66
seb

Lors de la création de votre mise en forme conditionnelle, définissez la plage à laquelle vous souhaitez appliquer (la feuille entière), puis entrez une formule relative (supprimez les signes $) comme si vous formiez uniquement le coin supérieur gauche.

Excel appliquera correctement la mise en forme au reste des cellules en conséquence.

Dans cet exemple, à partir de B1, la cellule left serait A1. Il suffit d'utiliser cela - aucune formule avancée requise.


Si vous recherchez quelque chose de plus avancé, vous pouvez vous amuser avec column(), row() et indirect(...).

9
Michael Haren

Si vous modifiez votre référence de cellule pour utiliser la notation R1C1 (Outils | Options, onglet Général), vous pouvez utiliser une notation simple et la coller dans une cellule.

Maintenant, votre formule est simplement:

=RC[-1]
6
edoloughlin

Lors de la création d'une fonction définie par l'utilisateur, j'ai découvert que les autres réponses impliquant les fonctions OFFSET et INDIRECT ne peuvent pas être appliquées.

Au lieu de cela, vous devez utiliser Application.Caller pour faire référence à la cellule dans laquelle la fonction définie par l'utilisateur (UDF) a été utilisée. Dans un deuxième temps, vous convertissez l'index de la colonne en son nom.
Enfin, vous pouvez référencer la cellule de gauche à l’aide de la fonction Plage de la feuille de calcul active .

Function my_user_defined_function(argument1, argument2)
    ' Way to convert a column number to its name copied from StackOverflow
    ' http://stackoverflow.com/a/10107264
    ' Answer by Siddarth Rout (http://stackoverflow.com/users/1140579/siddharth-rout)
    ' License (if applicable due to the small amount of code): CC BY-SA 3.0
    colName = Split(Cells(, (Application.Caller(1).Column - 1)).Address, "$")(1)

    rowNumber = Application.Caller(1).Row

    left_cell_value = ActiveSheet.Range(colName & rowNumber).Value

    ' Now do something with left_cell_value
1
ComFreek

remplissez la cellule A1 , avec la formule suivante: 

 =IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"

Puis autoextend à droite, vous obtenez 

 1|  A  |  B  |  C  |  ect ect
 2|    1|   11|  111|  ect ect

Si le décalage est en dehors de la plage de la cellule disponible, vous obtenez le #REF! Erreur.

Espérons que vous apprécierez.

1
MUY Belgium

Encore plus simple:

=indirect(address(row(), column() - 1))

OFFSET renvoie une référence relative à la référence actuelle. Par conséquent, si indirect renvoie la référence correcte, vous n'en avez pas besoin.

1
Gerard ONeill

Au lieu d'écrire le très long: 

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

Vous pouvez simplement écrire: 

=OFFSET(*Name of your Cell*,0,-1)

Ainsi, par exemple, vous pouvez écrire dans Cell B2 :

=OFFSET(B2,0,-1)

faire référence à la cellule B1

Encore merci Jason Young !! Je n'aurais jamais imaginé cette solution sans votre réponse!

1
Sam Fed

Pourquoi ne pas simplement utiliser:

=ADDRESS(ROW(),COLUMN()-1)
0
Andrew Algava

Je suis tombé par hasard sur ce fil parce que je voulais toujours faire référence à la "cellule de gauche" mais CRUCIALEMENT de manière non volatile (pas de catastrophe OFFSET, INDIRECT ou similaire). En regardant le Web de haut en bas, pas de réponses. (Ce fil ne fournit pas non plus de réponse.) Après quelques bricolages, je suis tombé sur la méthode la plus étonnante, que j'aime partager avec cette communauté:

Supposons une valeur de départ de 100 dans E6. Supposons que j'entre un delta à cette valeur dans F5, disons 5. Nous calculerions alors la valeur de continuation (105) dans F6 = E6 + F5. Si vous souhaitez ajouter une autre étape, c'est simple: copiez simplement la colonne F dans la colonne G et entrez un nouveau delta dans G5. 

C'est ce que nous faisons périodiquement. Chaque colonne a une date et ces dates DOIVENT ÊTRE en ordre chronologique (pour aider à MATCH, etc.). De temps en temps, il arrive que nous oublions d'entrer dans une étape. Supposons maintenant que vous souhaitiez insérer une colonne entre F et G (pour rattraper votre omission) et copier F dans le nouveau G (pour repeupler la formule de continuation). Ce n'est rien à court d'un désastre total. Essayez-le - H6 va maintenant dire = F6 + H5 et NON (comme nous en avons absolument besoin) = G6 + H5. (Le nouveau G6 sera correct.)

Pour que cela fonctionne, nous pouvons dissimuler ce calcul banal de la manière la plus étonnante F6 = index ($ E6: F6; 1; colonnes ($ E1: F1) -1) + F5. Copiez à droite et vous obtenez G6 = index ($ E6: G6; 1; colonnes ($ E1: G1) -1) + G5.

Cela ne devrait jamais fonctionner, non? Référence circulaire, clairement! Essayez-le et soyez surpris. Excel semble se rendre compte que, bien que la plage INDEX couvre la cellule que nous recalculons, cette cellule elle-même n’est pas traitée par INDEX et ne crée donc PAS de référence circulaire.

Alors maintenant je suis chez moi et sec. Insérer une colonne entre F et G et nous obtenons exactement ce dont nous avons besoin: La valeur de continuation dans l'ancien H fera référence à la valeur de continuation que nous avons insérée dans le nouveau G.

0
Ollie2893

Sélectionnez la feuille entière et ACCUEIL> Styles - Mise en forme conditionnelle, nouvelle règle ..., . Utilisez une formule pour déterminer les cellules à mettre en forme et Formatez les valeurs où cette formule est vraie::

=A1<>XFD1

Format..., sélectionnez le choix du formatage, OKOK.

0
pnuts

Je pense que c'est la réponse la plus facile.

Utilisez un "Nom" pour référencer le décalage.

Supposons que vous souhaitiez additionner une colonne (colonne A) jusqu'à, mais sans inclure, la cellule contenant la somme (disons la cellule A100); faire ceci:

(Je suppose que vous utilisez le référencement A1 lors de la création du nom; vous pouvez ensuite basculer sur R1C1)

  1. Cliquez n'importe où dans la feuille, pas sur la ligne du haut - dites Cell D9
  2. Définissez une plage nommée appelée, par exemple, "OneCellAbove", mais écrasez la zone "RefersTo" par "= D8" (sans guillemets).
  3. Maintenant, dans la cellule A100, vous pouvez utiliser la formule
    = SUM (A1: OneCellAbove)
0
Gnq

Vous pouvez utiliser un script VBA qui modifie le formatage conditionnel d'une sélection (vous devrez peut-être ajuster la condition et le formatage en conséquence):

For Each i In Selection
i.FormatConditions.Delete
i.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=" & i.Offset(0, -1).Address
With i.FormatConditions(1).Font
    .Bold = True
End With
Next i
0
sdfx