Czy ktoś zna sposób na skrócenie tej formuły programu Excel, ponieważ osiągnąłem zagnieżdżony limit „JEŻELI”?
=IF(Sheet!$G$2=Sheet1!I2,"Y",IF(Sheet!$H2=Sheet1!I2,"Y",
IF(Sheet!$I2=Sheet1!I2,"Y",IF(Sheet!$J2=Sheet1!I2,"Y",
IF(Sheet!$K2=Sheet1!I2,"Y",IF(Sheet!$L2=Sheet1!I2,"Y",
IF(Sheet!$M2=Sheet1!I2,"Y",IF(Sheet!$N2=Sheet1!I2,"Y",
IF(Sheet!$O2=Sheet1!I2,"Y",IF(Sheet!$P2=Sheet1!I2,"Y",
IF(Sheet!$Q2=Sheet1!I2,"Y",IF(Sheet!$R2=Sheet1!I2,"Y",""))))))))))))
microsoft-excel
worksheet-function
microsoft-excel-2007
Aaron Krauth
źródło
źródło
Odpowiedzi:
Uwaga: do mojej odpowiedzi poniżej podeszliśmy tak, jak w przypadku cyfrowych układów logicznych, w których warunki są oceniane równolegle. W takim przypadku musisz wyraźnie określić każdy warunek. To była całkowita nadmierna zabójstwo tutaj; o wiele bardziej skomplikowane niż to konieczne.
Podejścia przedstawione w odpowiedzi Thiliny R wykorzystują fakt, że Excel ocenia formuły i zakresy w sekwencji, więc Excel już wykonuje większość pracy, ograniczając możliwe warunki podobne do zagnieżdżonych IFs w pytaniu.
Obaj wymyśliliśmy logikę OR przedstawioną poniżej jako moje ostatnie podejście. Pozostawię tę odpowiedź na jakąkolwiek wartość edukacyjną lub nowatorską, jaką może zapewnić. Ale odpowiedź Thiliny R zawiera praktyczne rozwiązania, a mój głos to Metoda 1: WYSZUKIWANIE.
Nie jest jasne, czy możesz używać formuły, która jest bardziej restrykcyjna niż to konieczne. Użyję tutaj krótkiej notacji, aby uprościć dyskusję. Pominę nazwy arkuszy i odniosę się do testów równości w następujący sposób: jeśli to prawda
G2=I2
, po prostu to wywołamG2
. Jeśli to nieprawda, że G2 = I2, wywołam toNot-G2
. Dzięki tej stenografii zagnieżdżone IF mogą być wyrażone w następujący sposób:Jeśli potrzebujesz takich zasad, możesz to zrobić za pomocą jednego IF i całej logiki AND i OR. W skrócie wyglądałoby to tak:
Wypełnienie faktycznej formuły wyglądałoby następująco:
(Nie mogę zagwarantować, że literówka się tam nie poślizgnęła). Długie formuły są bardzo trudne do wprowadzenia i utrzymania. Pomocne może być użycie komórek pomocniczych do fragmentów formuły.
Jeśli tak naprawdę nie potrzebujesz reguł, oto kilka prostszych przypadków:
Jeśli nie potrzebujesz tej sekwencji, a zależy ci tylko na tym, że jedna i tylko jedna komórka jest równa I2, oto sposób na wykonanie tej samej logiki za pomocą jednego IF:
=IF((Sheet!$G$2=Sheet1!I2)+(Sheet!$H2=Sheet1!I2)+(Sheet!$I2=Sheet1!I2)+ (Sheet!$J2=Sheet1!I2)+(Sheet!$K2=Sheet1!I2)+(Sheet!$L2=Sheet1!I2)+ (Sheet!$M2=Sheet1!I2)+(Sheet!$N2=Sheet1!I2)+(Sheet!$O2=Sheet1!I2)+ (Sheet!$P2=Sheet1!I2)+(Sheet!$Q2=Sheet1!I2)+ (Sheet!$R2=Sheet1!I2)=1,"Y","")
Każdy zestaw nawiasów zawiera jeden z twoich testów. Jeśli równość jest prawdą, to daje wartość
1
, jeśli nie jest prawdą, wartość będzie0
. W ten sposób Excel reprezentuje prawdę i fałsz.Wyniki wszystkich tych testów są sumowane. Jeśli suma jest
1
, oznacza to, że jeden i tylko jeden test był prawdziwy.Jeśli w rzeczywistości zależy Ci tylko na tym, że przynajmniej jeden z tych przypadków jest prawdziwy, możesz użyć prostego LUB:
=IF(OR(Sheet!$G$2=Sheet1!I2,Sheet!$H2=Sheet1!I2,Sheet!$I2=Sheet1!I2, Sheet!$J2=Sheet1!I2,Sheet!$K2=Sheet1!I2,Sheet!$L2=Sheet1!I2, Sheet!$M2=Sheet1!I2,Sheet!$N2=Sheet1!I2,Sheet!$O2=Sheet1!I2, Sheet!$P2=Sheet1!I2,Sheet!$Q2=Sheet1!I2,Sheet!$R2=Sheet1!I2),"Y","")
Zauważ, że dodałem podziały linii i dodatkowe spacje we wszystkich formułach, aby logika była łatwiejsza do zobaczenia. Jeśli chcesz skopiować i wkleić, musisz je usunąć.
źródło
Zasadniczo chcesz wiedzieć, czy którakolwiek komórka
G2:R2
w jednym arkuszu ma taką samą wartość jak komórkaI2
w innym arkuszu.Można to zrobić na kilka sposobów. Najłatwiej przychodzi na to, ponieważ sprawdzane wartości znajdują się w ciągłym zakresie:
Metoda 1: HLOOKUP / VLOOKUP
Ta funkcja sprawdza wartość w komórce
I2
na jednym arkuszu i sprawdza, czy znajduje się ona w drugim arkuszu w zakresieG2:R2
. JeśliHLOOKUP
znajdzie co najmniej jedną wartość w zakresieG2:R2
pasującym do komórkiI2
w drugim arkuszu, zwracaY
lub w przeciwnym razie nie zwraca wartości.Używałem,
HLOOKUP
ponieważ podany zakres był zasięgiem poziomym. Jeśli zakres jest zakresem pionowym, możesz użyćVLOOKUP
zamiast tego.Jeśli z jakiegokolwiek powodu wartości nie mieszczą się w ciągłym zakresie, możesz użyć pozostałych 2 poniższych metod.
Oto inny sposób:
Metoda 2: SKONCENTROWANIE
Zasadniczo tworzy to duży ciąg wszystkich wartości w komórkach
G2:R2
i sprawdza, czy jest w tym wartość w komórceI2
drugiego arkusza. Jeśli tak, zwraca, wY
przeciwnym razie nie zwraca wartości.Zauważ, że ponieważ ta metoda tworzy duży ciąg ze wszystkich danych w zakresie komórek, które należy wyszukać, w zależności od rodzaju danych w tych komórkach, może zwrócić
Y
niepoprawnie. Na przykład: JeśliSheet1!I2
ma wartość123
iSheet!G2
ma wartość12
iSheet!H2
ma wartość34
, ta metoda będzie nadal wyświetlana,Y
ponieważ „duży ciąg” będzie zawierał „1234 ...”, a wartość123
będzie w tym ciągu.Jeszcze innym sposobem na to jest:
Metoda 3: Operator boolowski - LUB
[@ fixer1234 wspomniał o tym pierwszy]
Wykorzystuje operator boolowski,
OR
aby sprawdzić, czy którakolwiek z wartości z zakresuG2:R2
znajduje się w komórceI2
drugiego arkusza. Jeśli operator boolowski znajdzie co najmniej jedną wartość pasującą do komórkiI2
w drugim arkuszu, zwracaY
lub w przeciwnym razie nie zwraca wartości.Metoda 4: Rozłóż wzór
IF
warunków (z jakiegoś powodu nie mogę sobie wyobrazić), możesz rozłożyćIF
warunki na wiele komórek, a następnie użyć wyniku tych komórek, aby ustalić ostateczny wynik. Na przykład: możesz mieć kilkaIF
warunków w jednej komórce i możesz użyć wyniku tego w innej komórce wraz z kilkoma innymiIF
warunkami i tak dalej.W komórce
A1
arkusza możesz mieć następujące elementy :Następnie w komórce
A2
arkusza mogą znajdować się następujące elementy :Wreszcie możesz mieć następujące komórki w komórce
A3
arkusza:Metoda 5: VBA
Użyj VBA, jeśli nie masz nic przeciwko, aby utworzyć niestandardową funkcję zdefiniowaną przez użytkownika, w której możesz mieć tyle zagnieżdżonych
If
instrukcji.Uwaga: Dane wyjściowe obu tych formuł są takie same, jak podana formuła.
źródło