Izazov formule - oznaka izvan sekvencijalnih kodova - Puzzle

Sadržaj

Problem

Imamo popis alfanumeričkih kodova. Svaki se kod sastoji od jednog slova (A, B, C, itd.) Nakon kojeg slijedi troznamenkasti broj. Ti bi se kodovi trebali pojaviti abecednim redom, ali ponekad nisu u redoslijedu. Želimo označiti kodove koji nisu u slijedu.

Izazov br. 1

Koja će formula u stupcu "Provjeri" staviti znak "x" pored koda koji nije u nizu? U ovom izazovu samo provjeravamo je li * numerički * dio koda izvan redoslijeda, a ne da samo slovo nije u nizu.

Izazov br. 2

Kako se gornja formula može proširiti kako bi se provjerilo je li "alfa" dio koda (A, B, C itd.) Izvan redoslijeda? Na primjer, trebali bismo označiti kod koji započinje s "A" ako se pojavi nakon koda koji započinje s "C" ili "B".

Preuzmite donji radni list i prihvatite izazov!

Napomena: u radnoj su knjižici 2 lista, jedan za izazov # 1, jedan za izazov # 2.

Savjet - Ovaj video prikazuje nekoliko savjeta za rješavanje ovakvog problema.

Pretpostavke

  1. Svi kodovi uvijek sadrže četiri znaka: 1 veliko slovo + 3 broja.
  2. Broj kodova po slovu je slučajan, ali ne bi trebalo biti praznina u numeričkim vrijednostima.
  3. Potrebno je samo označiti prvi kôd slovom izvan redoslijeda, a ne sve naredne kodove.
Odgovor (kliknite za proširenje)

Evo nekoliko radnih rješenja. Važno je shvatiti da postoji mnogo, mnogo načina za rješavanje uobičajenih problema u programu Excel. Odgovori u nastavku samo su moja osobna preferencija. U svim formulama u nastavku nazivi funkcija mogu se kliknuti ako želite više informacija.

Izazov br. 1

Izvorno sam išao s ovom formulom:

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

Napomena MID vraća tekst. Dodavanjem 1 i dodavanjem nule dobivamo Excel da prisili tekst u broj. Množenje unutar logičkog testa unutar IF koristi logiku logike kako bi se izbjeglo novo ugniježđeno IF. Nisam siguran zašto nisam koristio RIGHT, što bi i ovdje dobro funkcioniralo.

Također imajte na umu da LIJEVO ne zahtijeva broj znakova i vratit će prvi znak ako nije naveden.

Na temelju nekih pametnih odgovora u nastavku, možemo još malo optimizirati:

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

Ovdje matematička operacija oduzimanja MID od MID automatski prisiljava tekstualne vrijednosti na brojeve.

Izazov br. 2

Za ovo rješenje koristio sam nekoliko ugniježđenih IF-ova (dodani su prijelomi redaka radi čitljivosti):

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

Učinio sam to jer prvi test LIJEVO (B5) = LIJEVO (B6) određuje provjeravamo li brojeve ili slova. Ako je prvi znak isti, provjeravamo brojeve kao gore. Ako nije, provjeravamo samo prvo slovo.

Imajte na umu da će funkcija CODE vratiti ascii broj prvog znaka ako tekstualni niz sadrži više od 1 znaka. Ovo se čini kao hakiranje i možda kôd čini manje razumljivim, ali djeluje :)

Ako to vrijeđa vašu osjetljivost, upotrijebite LIJEVO kao gore u CODE da biste isporučili samo prvi znak.

Zanimljivi članci...