Fórmula de Excel para hacer referencia a 'CELDA A LA IZQUIERDA'

83

Estoy tratando de hacer un formato condicional para que el color de la celda cambie si el valor es diferente del valor en la celda a la izquierda (cada columna es un mes, en cada fila están los gastos de cierto objeto. Quiero monitorear cambia fácilmente los precios durante meses).

Puedo hacerlo por celda y formatearlo y arrastrarlo, pero me gustaría aplicar una fórmula general a toda la hoja de trabajo.

¡Gracias!

mik
fuente
3
... y en caso de que alguien lo esté buscando ... para poner la columna a la derecha:=INDIRECT("RC[1]",0)
prograhammer
Esta es una gran pregunta. Desafortunadamente, no estoy seguro de haber entendido esto correctamente, el póster original quería que sus celdas cambiaran sin tener que hacer un formato condicional y luego pegar el pintor de formato en cada celda. Digamos que tenemos meses en las filas y plátanos, manzanas y naranjas en las columnas. En la matriz están los precios. ¿Cómo podríamos hacer algo que coloreara automáticamente una celda en rojo si hubiera un cambio de precio del mes anterior al mes actual? Si hay también una forma automática para colorear las celdas verdes si el precio baja y rojo si
Bryan

Respuestas:

95
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
Jason joven
fuente
14
¿Utiliza CINCO funciones de necesidad de buscar el uso que rara vez se utilizan en lugar de una simple referencia relativa A1 o RC [-1]? ¡Eso es como viajar de Brooklyn al Bronx con una escala en Walla Walla WA!
John Machin
5
¿Por qué no esto en su lugar = INDIRECTO (DIRECCIÓN (FILA (), COLUMNA () - 1))
Prometheus
1
"Indirecto" tiene muchos problemas, que incluyen (pero no se limitan a) ser (1) de un solo subproceso y (2) volátil (posiblemente, lo que obliga a que todo el libro se vuelva a calcular con cada cambio). No lo use si el rendimiento importa .
John Joseph
En el formato condicional, establezco la regla como ="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""pero la celda no está formateada. ¿Qué pasa?
cremallera
78

La versión más corta y compatible es:

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

"RC [-1]" significa una columna a la izquierda. "R [1] C [-1]" está en la parte inferior izquierda.

El segundo parámetro 0 significa que el primer parámetro se interpreta utilizando la notación R1C1.

Las otras opciones:

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

Demasiado tiempo en mi opinión. Pero útil si el valor relativo es dinámico / derivado de otra celda. p.ej:

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

La opción más sencilla:

= RC[-1]

tiene la desventaja de que necesita activar la notación R1C1 usando opciones, lo cual no es posible cuando otras personas tienen que usar Excel.

seb
fuente
11

Al crear su formato condicional, establezca el rango al que se aplica a lo que desea (toda la hoja), luego ingrese una fórmula relativa (elimine los $signos) como si solo estuviera formateando la esquina superior izquierda.

Excel aplicará correctamente el formato al resto de las celdas en consecuencia.

En este ejemplo, comenzando en B1, la celda de la izquierda sería A1. Solo use eso, no se requiere una fórmula avanzada.


Si lo que buscas es algo más avanzado, se puede jugar con column(), row()y indirect(...).

Michael Haren
fuente
7

Si cambia la referencia de su celda para usar la notación R1C1 (Herramientas | Opciones, pestaña General), puede usar una notación simple y pegarla en cualquier celda.

Ahora tu fórmula es simplemente:

=RC[-1]
edoloughlin
fuente
5

En lugar de escribir el muy largo:

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

Simplemente puede escribir:

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

Así, por ejemplo, puede escribir en la celda B2 :

=OFFSET(B2,0,-1)

para hacer referencia a la celda B1

¡¡Aún así gracias Jason Young !! ¡Nunca se me hubiera ocurrido esta solución sin tu respuesta!

Sam Fed
fuente
2
Esto no es útil. Si ya sabe que su celda es B2, puede escribir B1 para la celda de la izquierda y no usar compensaciones en absoluto. El punto es hacer algo completamente genérico.
Mateo Leer
1
Es muy conveniente si sabe desde qué celda comienza, y solo el desplazamiento que desea hacer es dinámico, por ejemplo = OFFSET (B2,0, A2). Cuál fue el contexto en el que lo usé.
Sam Fed
¡Esta es la respuesta que estaba buscando! Quería que alguien pudiera seleccionar una sola celda que representara una fila completa y que todo cambiara automáticamente para usar los parámetros de esa fila. ¡Gracias!
BT
1

llene la celda A1 , con la siguiente fórmula:

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

Luego, autoextender a la derecha, obtienes

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

Si el desplazamiento está fuera del rango de la celda disponible, obtienes el #REF! error.

Espero que lo disfrutes.

MUY Bélgica
fuente
1

Aún más simple:

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

OFFSET devuelve una referencia relativa a la referencia actual, por lo que si indirecto devuelve la referencia correcta, no la necesita.

Gerard ONeill
fuente
Nunca hagas esto. INDIRECT rompe el árbol de dependencia, es un desastre.
Ollie2893
Acabo de descubrir esta función que creo que es útil para el formato condicional según la primera fila de la columna. No estoy seguro de si la notación RC [] funciona para eso
narrowtux
1

Al crear una función definida por el usuario , descubrí que las otras respuestas que involucran las funciones OFFSETy INDIRECTno se pueden aplicar.

En su lugar, debe utilizar Application.Callerpara hacer referencia a la celda en la que se ha utilizado la función definida por el usuario (UDF). En un segundo paso, convierte el índice de la columna al nombre de la columna correspondiente.
Finalmente, puede hacer referencia a la celda izquierda usando la función de rango de la hoja de trabajo activa .

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
ComFreek
fuente
0

Puede usar un script VBA que cambie el formato condicional de una selección (es posible que deba ajustar la condición y el formato en consecuencia):

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
sdfx
fuente
0

Me topé con este hilo porque quería siempre hacer referencia a la "celda de la izquierda" pero CRUCIALMENTE de una manera no volátil (sin DESPLAZAMIENTO, INDIRECTO y desastres similares). Mirando la web de arriba abajo, no hay respuestas. (Este hilo tampoco proporciona una respuesta). Después de algunos retoques, me topé con el método más asombroso, que me gusta compartir con esta comunidad:

Suponga un valor inicial de 100 en E6. Suponga que ingreso un delta a este valor en F5, digamos 5. Luego calcularíamos el valor de continuación (105) en F6 = E6 + F5. Si desea agregar otro paso, fácil: simplemente copie la columna F en la columna G e ingrese un nuevo delta en G5.

Esto es lo que hacemos periódicamente. Cada columna tiene una fecha y estas fechas DEBEN ESTAR en orden cronológico (para ayudar con el PARTIDO, etc.). De vez en cuando sucede que nos olvidamos de entrar en un paso. Ahora suponga que desea insertar una columna entre F y G (para ponerse al día con su omisión) y copiar F en la nueva G (para volver a completar la fórmula de continuación). Esto es NADA MENOS que un desastre total. Pruébelo: H6 ahora dirá = F6 + H5 y NO (ya que es absolutamente necesario) = G6 + H5. (El nuevo G6 será correcto).

Para que esto funcione, podemos ofuscar este cálculo banal de la manera más asombrosa F6 = índice ($ E6: F6; 1; columnas ($ E1: F1) -1) + F5. Copie a la derecha y obtendrá G6 = índice ($ E6: G6; 1; columnas ($ E1: G1) -1) + G5.

Esto nunca debería funcionar, ¿verdad? ¡Referencia circular, claro! Pruébelo y sorpréndase. Excel parece darse cuenta de que, aunque el rango de ÍNDICE abarca la celda que estamos recalculando, esa celda en sí no está dirigida por el ÍNDICE y, por lo tanto, NO crea una referencia circular.

Así que ahora estoy en casa y seco. Inserte una columna entre F y G y obtenemos exactamente lo que necesitamos: el valor de continuación en la antigua H se referirá al valor de continuación que insertamos en la nueva G.

Ollie2893
fuente
0

Por qué no usar:

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

Hacer una fórmula con nombre "LeftCell"

Para aquellos que buscan una respuesta no volátil, pueden lograrlo usando la función INDICE en una fórmula con nombre.

  1. Seleccione la celda A2

  2. Abierto Name Manager (Ctrl + F3)

  3. Hacer clic New

  4. Nómbrelo 'LeftCell' (o lo que prefiera)

  5. Para Scope:, seleccioneWorkbook

  6. En Refers to:, ingrese la fórmula:

    =INDEX(!A1:!A2, 1)

  7. Haga clic OKy cierreName Manager

Esto le dice a Excel que siempre mire el valor inmediatamente a la izquierda de la celda actual, y cambiará dinámicamente a medida que se seleccionen diferentes celdas. Si el nombre se usa solo, proporciona el valor de la celda, pero en un rango usa la referencia. Crédito a esta respuesta sobre referencias de celda para la idea.

JCKE
fuente
0

Creo que esta es la respuesta más sencilla.

Utilice un "Nombre" para hacer referencia al desplazamiento.

Supongamos que desea sumar una columna (Columna A) hasta la celda que contiene la suma, pero sin incluirla (por ejemplo, Celda A100); hacer esto:

(Supongo que está utilizando la referencia A1 al crear el nombre; posteriormente, se puede cambiar a R1C1)

  1. Haga clic en cualquier lugar de la hoja que no esté en la fila superior, digamos la celda D9
  2. Defina un rango con nombre llamado, diga "OneCellAbove", pero sobrescriba el cuadro "Se refiere a" con "= D8" (sin comillas)
  3. Ahora, en la celda A100 puedes usar la fórmula
    = SUMA (A1: OneCellAbove)
Gnq
fuente
-1

Seleccione la hoja completa e INICIO> Estilos - Formato condicional, Nueva regla ..., Use una fórmula para determinar qué celdas formatear y Formatear valores donde esta fórmula es verdadera ::

=A1<>XFD1

Format..., Seleccione la opción de formato, OK, OK.

nueces
fuente