Desafio de fórmula - sinalizar códigos fora de sequência - Enigma

Índice

O problema

Temos uma lista de códigos alfanuméricos. Cada código consiste em uma única letra (A, B, C, etc.) seguida por um número de 3 dígitos. Esses códigos devem aparecer em ordem alfabética, mas às vezes estão fora de seqüência. Queremos sinalizar códigos fora de seqüência.

Desafio # 1

Qual fórmula na coluna "Verificar" colocará um "x" ao lado de um código fora de seqüência? Neste desafio, estamos apenas verificando se a parte * numérica * do código está fora de seqüência, não se a própria letra está fora de seqüência.

Desafio 2

Como a fórmula acima pode ser estendida para verificar se a parte "alfa" do código (A, B, C, etc.) está fora de seqüência? Por exemplo, devemos sinalizar um código que comece com "A" se ele aparecer depois de um código que comece com "C" ou "B".

Baixe a planilha abaixo e aceite o desafio!

Observação: há 2 planilhas na apostila, uma para o Desafio nº 1 e uma para o Desafio nº 2.

Dica - Este vídeo mostra algumas dicas de como resolver um problema como este.

Suposições

  1. Todos os códigos sempre contêm quatro caracteres: 1 letra maiúscula + 3 números.
  2. O número de códigos por letra é aleatório, mas não deve haver lacunas nos valores numéricos.
  3. É necessário apenas marcar o primeiro código com uma letra fora da seqüência, nem todos os códigos subsequentes.
Resposta (clique para expandir)

Aqui estão algumas soluções de trabalho. É importante entender que existem muitas, muitas maneiras de resolver problemas comuns no Excel. As respostas abaixo são apenas minha preferência pessoal. Em todas as fórmulas abaixo, os nomes das funções podem ser clicados se você quiser mais informações.

Desafio # 1

Eu originalmente usei esta fórmula:

=IF((LEFT(B5)=LEFT(B6))*(MID(B5,2,3)+1MID(B6,2,3)+0),"x","")

Nota MID retorna texto. Ao adicionar 1 e adicionar zero, fazemos com que o Excel converta o texto em um número. A multiplicação dentro do teste lógico dentro de IF usa lógica booleana para evitar outro IF aninhado. Não sei por que não usei RIGHT, o que funcionaria bem aqui também.

Observe também que LEFT não requer o número de caracteres e retornará o primeiro caractere se não for fornecido.

Com base em algumas das respostas inteligentes abaixo, podemos otimizar um pouco mais:

=IF((LEFT(B5)=LEFT(B6))*(MID(B6,2,3)-MID(B5,2,3)1),"x","")

Aqui, a operação matemática de subtrair MID de MID automaticamente transforma os valores de texto em números.

Desafio 2

Para esta solução, usei vários IFs aninhados (quebras de linha adicionadas para facilitar a leitura):

=IF(LEFT(B5)=LEFT(B6), IF((MID(B5,2,3)+1MID(B6,2,3)+0),"x",""), IF(CODE(B5)+1CODE(B6),"x",""))

Fiz isso porque o primeiro teste LEFT (B5) = LEFT (B6) determina se estamos verificando números ou letras. Se o primeiro caractere for o mesmo, estamos verificando os números como acima. Caso contrário, verificamos apenas a primeira letra.

Observe que a função CODE retornará o número ascii do primeiro caractere se uma string de texto contiver mais de 1 caractere. Isso parece um hack e talvez torne o código menos compreensível, mas funciona :)

Se isso ofende sua sensibilidade, use ESQUERDO como acima dentro do CODE para entregar apenas o primeiro caractere.

Artigos interessantes...