Formula challenge - contrassegna fuori dai codici sequenza - Puzzle

Sommario

Il problema

Abbiamo un elenco di codici alfanumerici. Ogni codice è composto da una singola lettera (A, B, C, ecc.) Seguita da un numero di 3 cifre. Questi codici dovrebbero apparire in ordine alfabetico, ma a volte sono fuori sequenza. Vogliamo contrassegnare i codici fuori sequenza.

Sfida # 1

Quale formula nella colonna "Verifica" inserirà una "x" accanto a un codice fuori sequenza? In questa sfida, stiamo solo controllando che la parte * numerica * del codice sia fuori sequenza, non che la lettera stessa sia fuori sequenza.

Sfida n. 2

Come si può estendere la formula sopra per verificare se la parte "alfa" del codice (A, B, C, ecc.) È fuori sequenza? Ad esempio, dovremmo contrassegnare un codice che inizia con "A" se appare dopo un codice che inizia con "C" o "B".

Scarica il foglio di lavoro qui sotto e accetta la sfida!

Nota: ci sono 2 fogli nella cartella di lavoro, uno per la sfida n. 1, uno per la sfida n. 2.

Suggerimento: questo video mostra alcuni suggerimenti su come risolvere un problema come questo.

Presupposti

  1. Tutti i codici contengono sempre quattro caratteri: 1 lettera maiuscola + 3 numeri.
  2. Il numero di codici per lettera è casuale, ma non dovrebbero esserci spazi vuoti nei valori numerici.
  3. È solo necessario contrassegnare il primo codice con una lettera fuori sequenza, non tutti i codici successivi.
Rispondi (fai clic per espandere)

Ecco alcune soluzioni di lavoro. È importante capire che esistono molti, molti modi per risolvere problemi comuni in Excel. Le risposte seguenti sono solo una mia preferenza personale. In tutte le formule seguenti, i nomi delle funzioni sono selezionabili se desideri maggiori informazioni.

Sfida # 1

Inizialmente sono andato con questa formula:

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

Nota MID restituisce il testo. Aggiungendo 1 e aggiungendo zero, otteniamo che Excel costringa il testo in un numero. La moltiplicazione all'interno del test logico all'interno di IF utilizza la logica booleana per evitare un altro IF annidato. Non sono sicuro del motivo per cui non ho usato RIGHT, che funzionerebbe bene anche qui.

Nota inoltre che SINISTRA non richiede il numero di caratteri e restituirà il primo carattere se non fornito.

Sulla base di alcune delle risposte intelligenti di seguito, possiamo ottimizzare un po 'di più:

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

Qui, l'operazione matematica di sottrarre MID da MID costringe automaticamente i valori di testo a numeri.

Sfida n. 2

Per questa soluzione, ho utilizzato diversi IF annidati (interruzioni di riga aggiunte per la leggibilità):

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

L'ho fatto perché il primo test LEFT (B5) = LEFT (B6) determina se stiamo controllando numeri o lettere. Se il primo carattere è lo stesso, stiamo controllando i numeri come sopra. In caso contrario, stiamo controllando solo la prima lettera.

Nota che la funzione CODICE restituirà il numero ASCII del primo carattere se una stringa di testo contiene più di 1 carattere. Sembra un trucco e forse rende il codice meno comprensibile, ma funziona :)

Se questo offende la tua sensibilità, usa SINISTRA come sopra all'interno di CODICE per fornire solo il primo carattere.

Articoli interessanti...