
A probléma
Van egy alfanumerikus kódok listája. Minden kód egyetlen betűből (A, B, C stb.) Áll, amelyet egy háromjegyű szám követ. Ezeknek a kódoknak ábécé sorrendben kell megjelenniük, de néha sorrenden kívül vannak. Sorozaton kívüli kódokat szeretnénk megjelölni.
1. kihívás
A "Ellenőrzés" oszlop melyik képlete fog "x" -et elhelyezni a sorozaton kívüli kód mellett? Ebben a kihívásban csak azt ellenőrizzük, hogy a kód * numerikus * része sorrendben van-e, nem azt, hogy maga a betű sorrenden kívül van-e.
2. kihívás
Hogyan lehet kibővíteni a fenti képletet annak ellenőrzésére, hogy a kód "alfa" része (A, B, C stb.) Nincs-e sorrendben? Például meg kell jelölnünk egy „A” betűvel kezdődő kódot, ha az egy „C” vagy „B” betűvel kezdődő kód után jelenik meg.
Töltse le az alábbi munkalapot, és vállalja a kihívást!
Megjegyzés: 2 lap van a munkafüzetben, egy az 1. kihíváshoz, egy a 2. kihíváshoz.
Tipp - Ez a videó néhány tippet tartalmaz az ilyen problémák megoldásához.
Feltételezések
- Minden kód mindig négy karaktert tartalmaz: 1 nagybetű + 3 szám.
- Betűnként a kódok száma véletlenszerű, de a numerikus értékekben nem szabad hézagokat feltüntetni.
- Csak az első kódot kell sorozaton kívüli betűvel megjelölni, nem az összes következő kódot.
Íme néhány működő megoldás. Fontos megérteni, hogy az Excel problémáinak megoldására sok-sok módszer létezik. Az alábbi válaszok csak személyes preferenciáim. Az összes alábbi képletben a függvények nevére kattintani lehet, ha további információt szeretne.
1. kihívás
Eredetileg ezzel a képlettel jártam:
=IF((LEFT(B5)=LEFT(B6))*(MID(B5,2,3)+1MID(B6,2,3)+0),"x","")
Megjegyzés: A MID visszaadja a szöveget. 1 és nulla hozzáadásával megkapjuk az Excel-t, hogy a szöveget számgá kényszerítse. Az IF-n belüli logikai teszten belüli szorzás logikai logikát használ az újabb beágyazott IF elkerülésére. Nem tudom, miért nem használtam a RIGHT-ot, ami itt is jól működne.
Vegye figyelembe azt is, hogy a BALRA nincs szükség a karakterek számára, és az első karaktert adja vissza, ha nincs megadva.
Az alábbi okos válaszok alapján még egy kicsit optimalizálhatunk:
=IF((LEFT(B5)=LEFT(B6))*(MID(B6,2,3)-MID(B5,2,3)1),"x","")
Itt a MID MID-ből történő kivonásának matematikai művelete automatikusan a számértékekre kényszeríti a szöveges értékeket.
2. kihívás
Ehhez a megoldáshoz több beágyazott IF-t használtam (az olvashatóság érdekében sortöréseket adtunk hozzá):
=IF(LEFT(B5)=LEFT(B6), IF((MID(B5,2,3)+1MID(B6,2,3)+0),"x",""), IF(CODE(B5)+1CODE(B6),"x",""))
Ezt azért tettem, mert az első teszt BAL (B5) = BAL (B6) határozza meg, hogy számokat vagy betűket ellenőrizünk-e. Ha az első karakter megegyezik, akkor a fentiek szerint ellenőrizzük a számokat. Ha nem, akkor csak az első betűt ellenőrizzük.
Vegye figyelembe, hogy a CODE függvény visszaadja az első karakter ascii számát, ha a szöveges karakterlánc 1-nél több karaktert tartalmaz. Ez hacknek tűnik, és talán kevésbé érthetővé teszi a kódot, de működik :)
Ha ez sérti az érzékenységedet, a CODE belsejében a fentiek szerint baloldalt használd az első karakter megadásához.