Provocarea formulelor - semnalează codurile secvenței - Puzzle

Cuprins

Problema

Avem o listă de coduri alfanumerice. Fiecare cod este format dintr-o singură literă (A, B, C etc.) urmată de un număr din 3 cifre. Aceste coduri ar trebui să apară în ordine alfabetică, dar uneori nu sunt în ordine. Vrem să semnalăm coduri în afara secvenței.

Provocarea nr. 1

Ce formulă din coloana „Verifică” va plasa un „x” lângă un cod care nu este în ordine? În această provocare, verificăm doar dacă porțiunea * numerică * a codului este în afara secvenței, nu că litera în sine este în afara secvenței.

Provocarea nr. 2

Cum poate fi extinsă formula de mai sus pentru a verifica dacă o parte a codului „alfa” (A, B, C etc.) este în afara secvenței? De exemplu, ar trebui să semnalăm un cod care începe cu „A” dacă apare după un cod care începe cu „C” sau „B”.

Descărcați foaia de lucru de mai jos și luați provocarea!

Notă: există 2 foi în registrul de lucru, una pentru provocarea nr. 1, una pentru provocarea nr. 2.

Sugestie - Acest videoclip prezintă câteva sfaturi despre cum să rezolvați o astfel de problemă.

Ipoteze

  1. Toate codurile conțin întotdeauna patru caractere: 1 literă mare + 3 cifre.
  2. Numărul de coduri pe literă este aleatoriu, dar nu ar trebui să existe goluri în valorile numerice.
  3. Este necesar să marcați primul cod cu o literă în ordine, nu toate codurile ulterioare.
Răspundeți (faceți clic pentru a extinde)

Iată câteva soluții de lucru. Este important să înțelegeți că există multe, multe modalități de a rezolva problemele obișnuite în Excel. Răspunsurile de mai jos sunt doar preferințele mele personale. În toate formulele de mai jos, numele funcțiilor pot fi făcute clic dacă doriți mai multe informații.

Provocarea nr. 1

Am urmat inițial această formulă:

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

Notă MID returnează text. Adăugând 1 și adăugând zero, obținem Excel pentru a constrânge textul într-un număr. Înmulțirea testului logic din interiorul IF folosește logica booleană pentru a evita un alt IF imbricat. Nu sunt sigur de ce nu am folosit DREAPTA, ceea ce ar funcționa bine și aici.

De asemenea, rețineți că STÂNGA nu necesită numărul de caractere și va returna primul caracter dacă nu este furnizat.

Pe baza unora dintre răspunsurile inteligente de mai jos, putem optimiza puțin mai mult:

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

Aici, operația matematică a scăderii MID din MID constrânge automat valorile textului la numere.

Provocarea nr. 2

Pentru această soluție, am folosit mai multe IF-uri imbricate (pauze de linie adăugate pentru lizibilitate):

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

Am făcut acest lucru deoarece primul test STÂNGA (B5) = STÂNGA (B6) determină dacă verificăm cifre sau litere. Dacă primul caracter este același, verificăm numerele de mai sus. Dacă nu, verificăm numai prima literă.

Rețineți că funcția COD va returna numărul ascii al primului caracter dacă un șir de text conține mai mult de 1 caracter. Se pare că este un hack și poate face codul mai puțin de înțeles, dar funcționează :)

Dacă acest lucru vă ofensează sensibilitățile, utilizați STÂNGA ca mai sus în COD pentru a oferi doar primul personaj.

Articole interesante...