Изазов формуле - застава изван кодова секвенце - Слагалица

Преглед садржаја

Проблем

Имамо списак алфанумеричких кодова. Сваки код се састоји од једног слова (А, Б, Ц, итд.) Праћеног троцифреним бројем. Ови кодови би се требали појавити по абецедном реду, али понекад нису у редоследу. Желимо да означимо кодове који нису у низу.

Изазов бр. 1

Која ће формула у колони „Провери“ ставити знак „к“ поред кода који није у низу? У овом изазову само проверавамо да ли је * нумерички * део кода ван редоследа, а не да само писмо није у низу.

Изазов бр

Како се горња формула може проширити да би се проверило да ли је „алфа“ део кода (А, Б, Ц итд.) Ван редоследа? На пример, требало би да означимо код који започиње са „А“ ако се појављује после кода који почиње са „Ц“ или „Б“.

Преузмите доњи радни лист и прихватите изазов!

Напомена: у радној свесци су 2 листа, један за изазов # 1, један за изазов # 2.

Савет - Овај видео приказује неколико савета за решавање оваквог проблема.

Претпоставке

  1. Сви кодови увек садрже четири знака: 1 велико слово + 3 броја.
  2. Број кодова по слову је случајан, али не би требало бити празнина у нумеричким вредностима.
  3. Потребно је само означити први код словом ван редоследа, а не све наредне кодове.
Одговор (кликните за проширење)

Ево неколико радних решења. Важно је схватити да постоји много, много начина за решавање уобичајених проблема у програму Екцел. Одговори у наставку су само моја лична жеља. У свим формулама у наставку називи функција могу се кликнути ако желите више информација.

Изазов бр. 1

Првобитно сам ишао са овом формулом:

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

Напомена МИД враћа текст. Додавањем 1 и додавањем нуле добијамо Екцел да присили текст у број. Множење унутар логичког теста унутар ИФ користи логичку логику да би се избегло ново угнежђено ИФ. Нисам сигуран зашто нисам користио РИГХТ, што би и овде добро функционисало.

Такође имајте на уму да ЛЕВО не захтева број знакова и вратиће први знак ако није наведен.

На основу неких паметних одговора у наставку, можемо још мало оптимизовати:

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

Овде, математичка операција одузимања МИД од МИД аутоматски присиљава вредности текста на бројеве.

Изазов бр

За ово решење користио сам неколико угнежђених ИФ-ова (додани су преломи редова ради читљивости):

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

Урадио сам то јер први тест ЛЕФТ (Б5) = ЛЕФТ (Б6) одређује да ли проверавамо бројеве или слова. Ако је први знак исти, проверавамо бројеве као горе. Ако не, проверавамо само прво слово.

Имајте на уму да ће функција ЦОДЕ вратити асции број првог знака ако текстуални низ садржи више од 1 знака. Ово делује као хакер и чини код мање разумљивим, али успева :)

Ако то вређа вашу осетљивост, користите ЛЕВО као горе у ЦОДЕ да бисте испоручили само први знак.

Занимљиви Чланци...