¿Cómo puedo configurar el formato condicional en una celda en particular que depende del valor de otra celda?

69

En mi ejemplo, me gustaría formatear condicionalmente las celdas de la columna B. Los marcados con x deben formatearse de acuerdo con el valor en la columna A (en el ejemplo, el valor es 1):

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

NOTA IMPORTANTE 2014 : El formato condicional basado en la fórmula que puede incluir otras celdas ahora es posible en Hojas de cálculo de Google, y funciona de manera muy similar a cómo funcionan las hojas de cálculo de Excel. Esta respuesta explica su uso.

Robert Koritnik
fuente
3
Como agregó esa nota de 2014, considere también mover la marca de verificación a una respuesta que describa el enfoque moderno.

Respuestas:

50

Se puede lograr un formato condicional complejo en las hojas de cálculo de Google mediante Google Apps Script. Por ejemplo, podría escribir una función que cambie el color de fondo de una fila completa en función del valor en una de sus celdas, algo que no creo que sea posible con el menú "Cambiar color con reglas". Probablemente desee establecer activadores para esta función, como "On Edit", "On Open" y "On Form Submit".

Documentación para la función setBackgroundRGB ()

ACTUALIZACIÓN: Aquí hay un ejemplo de Google Apps Script para cambiar el color de fondo de una fila completa según el valor de la columna A. Si el valor es positivo, use verde. Si está vacío, blanco. De lo contrario, rojo. Vea los resultados en esta hoja de cálculo pública de Google . (Deberá haber iniciado sesión para que se ejecute el script, pero sin iniciar sesión aún puede ver los resultados).

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}

Liam
fuente
Obtuve un error en la línea 13: var dataRange = sheet.getRange (r, 1, 1, 3); Si quisiera usar este script para colorear una fila de acuerdo con un nombre específico (por ejemplo, David), ¿cómo lo cambiaría? Y probablemente cambiaría la fuente en lugar del fondo: setFontColor Además, ¿cómo ejecuto el script en mi hoja de cálculo? Gracias
2
El enlace al ejemplo ya no es válido. ¿Cómo se usa este script una vez que se crea? Eso falta en esta respuesta.
Daniel Williams
3
Ahora hay una opción más simple para los casos de uso más comunes, que se describe en mi respuesta a continuación.
Sam Brightman
1
Lamentablemente, el enlace de la hoja de cálculo de Google no funciona. Sería bueno tener una breve descripción sobre cómo usar / activar scripts. Sin embargo, gran respuesta que simplemente funciona. :)
brimborium
19

Las nuevas Hojas de cálculo de Google le permiten hacer esto, como se describe aquí . Primero debe habilitar las nuevas hojas de cálculo en la configuración de su Controlador de Google como se describe en el artículo. Luego puede seleccionar 'La fórmula personalizada es' de las opciones de formato condicional e ingresar cualquier fórmula (¡no olvide agregar el =prefijo!). Las referencias de celda sin $prefijos se ajustan automáticamente cuando se aplican a los rangos como era de esperar.

Parece que falta soporte para la migración de lo antiguo a lo nuevo: solo se aplica a las nuevas hojas y descubrí que solo los valores se podían copiar de uno a otro. Copiar una hoja completa puede ser una opción.

Sam Brightman
fuente
1
Gracias por señalar esto. Realmente funciona exactamente como lo quiero.
Robert Koritnik
En este momento, la mayoría de las hojas de cálculo antiguas se migraron a las nuevas Hojas de cálculo de Google, por lo que la nota sobre el soporte para la migración es obsoleta.
Rubén
2

Escribí esta aplicación web, Color Code + , con Apps-Script, para cubrir la mayoría de las necesidades básicas de formato condicional. El tiro en algunas reglas y va a escupir código que luego se puede pegar en la hoja de cálculo, bajo HerramientasEditor de guiones ... . ( Hilo de ayuda en los foros de Google).

Bryan P
fuente
1

Las reglas de formato condicional de Google Sheets se ven así si desea formatear condicionalmente con un fondo rojo si la suma en dos celdas es diferente que en la tercera celda:

Reglas de formato condicional de Google Sheets con un solo color y fórmula personalizada

ViliusK
fuente
0

Formato condicional - fórmula personalizada

range 2:227

= if($i:$i = "Duplicate",True,False)

seleccione el color que desea que se resalte la fila.

Hari R
fuente
0

(Febrero de 2017) Como se mencionó en otra respuesta, Google Sheets ahora permite a los usuarios agregar Formato condicional directamente desde la interfaz de usuario, ya sea en una computadora de escritorio / portátil, dispositivos Android o iOS. Sin embargo, el resto de esta respuesta es principalmente para desarrolladores porque puedes escribir aplicaciones con el formato condicional "do".

Con la API de Hojas de cálculo de Google v4 (y más reciente), los desarrolladores ahora pueden escribir aplicaciones que cumplan las reglas de formato condicional CRUD. Consulte la guía y las páginas de muestras para obtener más detalles, así como los documentos de referencia (buscar {add,update,delete}ConditionalFormatRule). La guía presenta este fragmento de Python (suponiendo un ID de archivo SHEET_IDy SHEETScomo el punto final del servicio API):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

Además de Python, las API de Google admiten una variedad de idiomas , por lo que tiene opciones. De todos modos, ese ejemplo de código formatea una Hoja (vea la imagen a continuación) de modo que aquellos menores de la edad mediana se resalten en rojo claro, mientras que los que estén por encima de la mediana tengan sus datos coloreados en fuente roja.

Ejemplo de formato condicional

NOTA: mi respuesta aquí es idéntica a la de SO para esta pregunta, excepto que eliminé el PSA ya que no necesita vivir en> 1 lugar.

wescpy
fuente
Hay varias respuestas a esta pregunta también en la pregunta referida a SO. ¿Cuál es la "Otra respuesta" a la que se refiere esta respuesta? (: Por otro lado, aunque las personas que visitan este sitio pueden escribir código, creo que la mayoría de ellos lo hacen como "desarrollo de usuario final" como en funciones personalizadas / funciones definidas por el usuario. No estoy seguro de que términos como CRUDes conocido por la mayoría de ellos y pueden encontrar útiles todos los detalles adicionales que se incluyen en esta respuesta. ”
Rubén
0

Para abordar los detalles específicos de la Q en las hojas 'nuevas', sugiero borrar cualquier formato condicional de B: B, seleccionar Columna B y aplicar una fórmula personalizada es de:

=A1=1

con formato de elección y Done.

nueces
fuente
0

Al editar el formato condicional, seleccione Fórmula personalizada y use lo siguiente ...

=if(A1 = 1 , true)

Seleccione sus colores y ya está.

usuario3246197
fuente
-1

Edite en respuesta a la aclaración de la pregunta:

En la ventana de su Hoja de cálculo de Google, hay un Formato de menú con la opción "Cambiar color con reglas". Esto es tan técnico como el formato condicional de la hoja de cálculo de Google. Por lo que puedo decir, no hay forma de colorear una celda en función del valor de otra: Google no le permite ingresar fórmulas para otras celdas.

A menos que ponga otros datos en la columna B, siempre puede hacer que toda la columna B sea igual a la columna A, y luego usar la opción "Cambiar color con reglas" para colorear todas las celdas con el valor de 1 con colores similares, es decir, fondo rojo y texto rojo cuando el valor es 1, fondo blanco y texto blanco cuando no lo es, ocultando efectivamente el valor en la columna B. Eso le dará el aspecto que desea.

En Excel, puede hacer lo que quiera. Usando sus datos como ejemplo, formateé condicionalmente B1 cuando esta fórmula es verdadera:

=IF(A1=1,true,false)

y luego arrastró el formato hacia abajo, lo que resaltó solo las celdas en B donde es vecino en la columna A igual a 1.

Excel puede hacerlo, pero no Google


Respuesta original

No estoy seguro si puedes hacer esto en 2 columnas, pero sé que puedes hacerlo en 3:

 A  |  B  |  C
----------------
 1  |  f  |  x

En la columna B, puede usar la IFfórmula para ver si se ha colocado una x en la columna C apropiada:

=IF(C1="x",A1,"") 

La IFfórmula tiene 3 partes: la prueba, el valor de entonces y el valor de else . En el ejemplo anterior, la fórmula verifica si hay una xen la columna C. Si lo hay, ingresa el valor de A1; de lo contrario, ingresa un espacio en blanco. No importa si xes mayúscula o minúscula.

Una vez que ingrese esta fórmula en la parte superior de su lista, puede usar la función de arrastre para arrastrar la fórmula hacia abajo para el resto de su lista. Con la celda resaltada en azul, mueva el mouse sobre el cuadrado en la esquina inferior derecha hasta que el cursor se convierta en una cruz. Luego, haga clic y mantenga presionado mientras arrastra hacia abajo para copiar la fórmula en las celdas a continuación.

Jared Harley
fuente
1
Creo que me has malentendido. La pregunta es sobre el formato condicional que no coloca valores en las celdas.
Robert Koritnik el
1
En este momento esta respuesta es obsoleta. Consulte Aplicar reglas de formato condicional - ayuda de editores de Documentos
Rubén