Formeludfordring - flag ud af sekvenskoder - Gåde

Indholdsfortegnelse

Problemet

Vi har en liste over alfanumeriske koder. Hver kode består af et enkelt bogstav (A, B, C osv.) Efterfulgt af et 3-cifret tal. Disse koder skal vises i alfabetisk rækkefølge, men nogle gange er de ude af rækkefølge. Vi vil markere koder uden for rækkefølgen.

Udfordring nr. 1

Hvilken formel i kolonnen "Kontroller" placerer et "x" ved siden af ​​en kode, der er ude af rækkefølge? I denne udfordring kontrollerer vi kun, at den * numeriske * del af koden er ude af rækkefølge, ikke at selve brevet er ude af rækkefølge.

Udfordring nr. 2

Hvordan kan formlen ovenfor udvides til at kontrollere, om "alfa" -delen af ​​koden (A, B, C osv.) Er ude af rækkefølge? For eksempel skal vi markere en kode, der begynder med "A", hvis den vises efter en kode, der begynder med "C" eller "B".

Download regnearket nedenfor og tag udfordringen!

Bemærk: der er 2 ark i projektmappen, et til udfordring nr. 1 og et til udfordring nr. 2.

Tip - Denne video viser nogle tip til, hvordan man løser et problem som dette.

Antagelser

  1. Alle koder indeholder altid fire tegn: 1 stort bogstav + 3 tal.
  2. Antallet af koder pr. Bogstav er tilfældigt, men der skal ikke være nogen huller i numeriske værdier.
  3. Det er kun nødvendigt at markere den første kode med et bogstav ude af rækkefølge, ikke alle efterfølgende koder.
Svar (klik for at udvide)

Her er nogle arbejdsløsninger. Det er vigtigt at forstå, at der er mange, mange måder at løse almindelige problemer i Excel på. Svarene nedenfor er kun min personlige præference. I alle nedenstående formler kan funktionsnavne klikkes, hvis du vil have mere information.

Udfordring nr. 1

Jeg gik oprindeligt med denne formel:

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

Bemærk MID returnerer tekst. Ved at tilføje 1 og tilføje nul får vi Excel til at tvinge teksten til et tal. Multiplikationen inde i den logiske test inde i IF bruger boolsk logik for at undgå en anden indlejret IF. Jeg er ikke sikker på, hvorfor jeg ikke brugte RIGHT, hvilket også fungerer fint her.

Bemærk også VENSTRE kræver ikke antallet af tegn og returnerer det første tegn, hvis det ikke er angivet.

Baseret på nogle af de smarte svar nedenfor kan vi optimere lidt mere:

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

Her tvinger matematikoperationen ved at trække MID fra MID automatisk tekstværdierne til tal.

Udfordring nr. 2

Til denne løsning brugte jeg flere indlejrede IF'er (linjeskift tilføjet for læsbarhed):

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

Jeg gjorde dette, fordi den første test VENSTRE (B5) = VENSTRE (B6) bestemmer, om vi kontrollerer tal eller bogstaver. Hvis det første tegn er det samme, kontrollerer vi numrene som ovenfor. Hvis ikke, kontrollerer vi kun det første bogstav.

Bemærk, at KODE-funktionen returnerer ascii-nummeret på det første tegn, hvis en tekststreng indeholder mere end 1 tegn. Dette føles som et hack, og det gør koden måske mindre forståelig, men det fungerer :)

Hvis det fornærmer dine følelser, skal du bruge VENSTRE som ovenfor inde i KODE for at levere bare det første tegn.

Interessante artikler...