התשובה הקצרה היא:
שנה את התנאי לתנאי הבא:
BITAND(B2:B6>100,C2:C6="UP")
או כך:
(B2:B6>100) * (C2:C6="UP")
התשובה הארוכה היא:
הבעיה היא בתנאי. האופרטור AND
(וגם OR
) מוגדר להחזיר ערך יחיד בלבד.
אתה מספק לו כקלט שני מערכים, כי כל אחת מהנוסחאות B2:B6>100
ו- C2:C6="UP"
תחזיר מערך בוליאני.
בדוגמא שהבאת, הנוסחא:
B2:B6>100
תחזיר את המערך הבא:
{ TRUE, FALSE, TRUE, FALSE, FALSE }
והנוסחא
C2:C6="UP"
תחזיר את המערך:
{ TRUE, TRUE, FALSE, FALSE, TRUE }
כשמעבירים קלט של מערך לאופרטור AND
, התוצאה תהיה הפעלת AND
על כל האיברים שבמערך, והחזרת תוצאה יחידה, דהיינו: TRUE
אם כל הערכים בקלט הם TRUE
, ו-FALSE
אחרת.
אבל אתה בעצם מבקש את המערך שמתקבל מהפעלת AND על כל אינדקס במערך הראשון עם האינדקס התואם במערך השני, כלומר אתה בעצם רוצה לקבל את המערך הבא:
{ TRUE, FALSE, FALSE, FALSE, FALSE }
מייקרוסופט יישמו פונקציות חדשות BITAND
BITOR
שמסוגלות להחזיר מערך. לכן תוכל לחליף את התנאי לתנאי הבא:
BITAND(B2:B6>100,C2:C6="UP")
לנוסחאות האלו יש מגבלה מעצבנת שהן מוכנות לקבל רק שני פרמטרים בלבד, (בניגוד ל-AND
ו-OR
שמסכימות לקבל מספר כלשהו של פרמטרים), כך שאם אתה צריך תנאי יותר מורכב, עליך לשרשר אותן, למשל:
BITAND(BITAND(B2:B6>100,C2:C6="UP"),D2:D6="GFS")
לחילופין אפשר להשתמש בטריק אחר, ופשוט לשנות את התנאי AND
למכפלה:
(B2:B6>100) * (C2:C6="UP") * (D2:D6="GFS")