Como definir formatação condicional em uma célula específica que depende do valor de outra célula?

69

No meu exemplo, eu gostaria de formatar condicionalmente as células da coluna B. Os marcados com x devem ser formatados de acordo com o valor na coluna A (no exemplo, o valor é 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 : A formatação condicional com base na fórmula que pode incluir outras células agora é possível no Planilhas Google e funciona de maneira muito semelhante à forma como as planilhas do Excel funcionam. Esta resposta explica seu uso.

Robert Koritnik
fonte
3
Como você adicionou a nota de 2014, considere também mover a marca de seleção para uma resposta que descreva a abordagem moderna.

Respostas:

50

Formatação condicional complexa pode ser obtida nas planilhas do Google usando o Script do Google Apps. Por exemplo, você pode escrever uma função que altera a cor do plano de fundo de uma linha inteira com base no valor em uma de suas células, algo que não acho possível com o menu "Alterar cor com regras". Você provavelmente desejaria definir gatilhos para esta função, como "Ao editar", "Ao abrir" e "Ao enviar formulário".

Documentação para a função setBackgroundRGB ()

ATUALIZAÇÃO: veja um exemplo de script do Google Apps de como alterar a cor do plano de fundo de uma linha inteira com base no valor da coluna A. Se o valor for positivo, use verde. Se vazio, branco. Caso contrário, vermelho. Veja os resultados nesta planilha pública do Google . (Você precisará estar conectado para que o script seja executado, mas sem entrar, você ainda poderá ver os 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();
}

O que outras pessoas estão dizendo

Liam
fonte
Eu recebi um erro na linha 13: var dataRange = sheet.getRange (r, 1, 1, 3); Se eu gostaria de usar esse script para colorir uma linha de acordo com um nome específico (por exemplo, David), como eu a alteraria. E provavelmente mudaria a fonte em vez do plano de fundo: setFontColor Além disso, como executo o script na minha planilha? Graças
2
O link para o exemplo não é mais válido. Como você usa esse script depois que ele é criado? Isso está faltando nesta resposta.
Daniel Williams
3
Agora existe uma opção mais simples para os casos de uso mais comuns, descritos na minha resposta abaixo.
Sam Brightman
11
Infelizmente, o link da planilha do Google está quebrado. Seria bom ter uma breve descrição de como usar / ativar scripts. No entanto, uma ótima resposta que simplesmente funciona. :)
brimborium
19

O novo Planilhas Google permite que você faça isso, conforme descrito aqui . Você deve primeiro ativar as novas planilhas nas configurações do Google Driver, conforme descrito no artigo. Em seguida, você pode selecionar 'A fórmula personalizada é' nas opções de formatação condicional e inserir qualquer fórmula (não se esqueça de adicionar o =prefixo!). As referências de célula sem $prefixos são ajustadas automaticamente quando aplicadas aos intervalos, como seria de esperar.

Parece que falta suporte para migração de antigos para novos - ele se aplica apenas a novas planilhas e descobri que apenas os valores podiam ser copiados de um para o outro. Copiar uma folha inteira pode ser uma opção.

Sam Brightman
fonte
11
Obrigado por apontar isso. Realmente funciona exatamente como eu quero.
Robert Koritnik
No momento, a maioria das planilhas antigas foi migrada para o novo Google Sheets, portanto, a observação sobre o suporte à migração é obsoleta.
Rubén
2

Eu escrevi este aplicativo Web, código de cores + , com o Apps-Script, para cobrir a maioria das necessidades básicas de formatação condicional. O lance em algumas regras e ele vai cuspir código que você pode em seguida, cole em sua planilha, sob Ferramentaseditor Script ... . ( Tópico de ajuda nos fóruns do Google.)

Bryan P
fonte
1

As regras de formato condicional do Planilhas Google ficam assim se você deseja formatar condicionalmente com fundo vermelho se a soma em duas células for diferente da terceira célula:

Regras de formato condicional do Planilhas Google com cor única e fórmula personalizada

ViliusK
fonte
0

Formatação condicional - fórmula personalizada

range 2:227

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

selecione a cor que você deseja destacar a linha.

Hari R
fonte
0

(Fevereiro de 2017) Conforme mencionado em outra resposta, o Planilhas Google agora permite que os usuários adicionem a Formatação Condicional diretamente da interface do usuário, seja em um desktop / laptop, dispositivos Android ou iOS. No entanto, o restante desta resposta é principalmente para desenvolvedores porque você pode escrever aplicativos "do" formatação condicional.

Com a API do Google Sheets v4 (e mais recente), os desenvolvedores agora podem escrever aplicativos que regras de formatação condicional CRUD. Confira o guia e as páginas de amostra para obter mais detalhes, bem como os documentos de referência (procure por {add,update,delete}ConditionalFormatRule). O guia apresenta esse trecho de código Python (assumindo um ID de arquivo SHEET_IDe SHEETScomo o terminal de serviço da 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()

Além do Python, as APIs do Google suportam uma variedade de idiomas , assim você tem opções. De qualquer forma, esse exemplo de código formata uma Planilha (veja a imagem abaixo), de forma que aqueles com menos de idade média sejam destacados em vermelho claro enquanto aqueles acima da mediana têm seus dados coloridos em fonte vermelha.

Exemplo de formatação condicional

OBSERVAÇÃO: minha resposta aqui é idêntica à da SO para esta pergunta, exceto que eu abandonei o PSA, pois ele não precisa morar em> 1 lugar.

nervoso
fonte
Existem várias respostas para essa pergunta também na questão referida no SO. Qual é a "Outra resposta" a que essas respostas se referem? (: Por outro lado, enquanto as pessoas que acessam este site podem escrever código, acho que a maioria faz isso como "desenvolvimento do usuário final", como em funções personalizadas / funções definidas pelo usuário. Não tenho certeza se termos como CRUDé conhecido pela maioria deles e que eles podem achar úteis todos os detalhes adicionais que estão incluídos nesta resposta.
Rubén
0

Para abordar as especificidades do Q nas 'novas' planilhas, sugiro que apague qualquer formatação condicional de B: B, selecione a Coluna B e aplique uma fórmula personalizada :

=A1=1

com formatação de escolha e Done.

nozes
fonte
0

Ao editar a formatação condicional, selecione Fórmula personalizada e use o seguinte ...

=if(A1 = 1 , true)

Selecione suas cores e pronto.

user3246197
fonte
-1

Edite em resposta ao esclarecimento da pergunta:

Na janela da planilha do Google, existe um menu Formato com a opção "Alterar cor com as regras". Isso é tão técnico quanto a formatação condicional da planilha do Google. Pelo que sei, não há como colorir uma célula com base no valor de outra - o Google não permite inserir fórmulas para outras células.

A menos que você esteja colocando outros dados na coluna B, você sempre pode tornar a coluna B igual à coluna A e, em seguida, usar a opção "Alterar cor com regras" para colorir todas as células com o valor 1 com cores semelhantes - ou seja, fundo vermelho e texto vermelho quando o valor é 1, fundo branco e texto branco quando não estiver, ocultando efetivamente o valor na coluna B. Isso fornecerá a aparência desejada.

No Excel, você pode fazer o que quiser. Usando seus dados como exemplo, formatei condicionalmente B1 quando esta fórmula é verdadeira:

=IF(A1=1,true,false)

e, em seguida, arraste a formatação para baixo, destacando apenas as células em B onde é vizinho na coluna A igual a 1.

O Excel pode fazer isso, mas não o Google


Resposta original

Não tenho certeza se você pode fazer isso em 2 colunas, mas sei que você pode fazer isso em 3:

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

Na coluna B, você pode usar a IFfórmula para verificar se um x foi colocado na coluna C apropriada:

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

A IFfórmula possui 3 partes - o teste, o valor then e o valor else . No exemplo acima, a fórmula verifica se há um xna coluna C. Se houver, ele digita o valor de A1; caso contrário, ele entra em branco. Não importa se xé maiúsculo ou minúsculo.

Depois de inserir esta fórmula no topo da sua lista, você pode usar o recurso de arrastar para arrastar a fórmula para baixo pelo resto da sua lista. Com a célula destacada em azul, mova o mouse sobre o quadrado no canto inferior direito até o cursor se tornar uma cruz. Em seguida, basta clicar e segurar enquanto arrasta para baixo para copiar a fórmula para as células abaixo.

Jared Harley
fonte
11
Eu acho que você me entendeu mal. A questão é sobre formatação condicional, não colocando valores nas células.
Robert Koritnik 01/12/2009
11
Neste momento, essa resposta é obsoleta. Consulte Aplicar regras de formatação condicional - ajuda do editor do Documentos
Rubén