רבותי.על "ממתקי אקסל" כבר שמעתם?...אז הנה אחד כזה...
תשמעו סיפור.היום חבר שלי (אקסליסט במהותו) שאל אותי שאלה מאתגרת.
יש לנו כאן טבלת מקור.בעמודה A שמות.יש כפילויות בהם.ובעמודה b קיימים מספרים לצד השמות.
החבר רצה החזר של
כל (
אני מדגיש)התוצאות מעמודה b לפי השם בעמודה a.
אם נרצה להשתמש בעזרת פונקציית xlookup שום דבר ושום קומבינציה לא תוכל לסייע כאן.חד משמעית!!!
וקל וחומר שפונקציית vlookup לא תוכל לסייע.
("תפקיד" שכזה לא מוטמע במהותן וב-D.N.A של פונקציות אלו.ואולי בהזדמנות בל"נ ארחיב על כך)
לשם כך בדיוק קיים פיתרון נפלא עם פונקציית filter הידועה.וכפי שמוצג בצילום מסך לעיל .הפונקצייה מחזירה את הערכים לפי תא החיפוש.
חבר שלי רצה שיוצג לו שם אחד ללא כפילות בתא g1.ולצידו בעמודה h יוצגו כל התוצאות ולא זו בלבד אלא צריך שיוצגו לפי הסדר מהקטן לגדול.
מיד שאלתי.וכי נעלמה חלילה מעיני כבודו פונקציית unique ?
תשובתו היתה:-"תנסה ותעדכן..."
ואכן ניסיתי כל מניפולציה עם הפונקצייה הזו בשיתוף עם filter .ושום דבר לא עזר!
ובכן.חשבתי וחשבתי מה קורה פה?אולי הפונקצייה זקוקה להחייאה עם דפיברילטור?
לאחר הרבה מחשבה הבנתי את הסיבה.
פונקציית unique אינה רואה בתוצאות הסינון ערך כפול שמיותר "סתם ככה"
לכל ערך בעמודת g יש ערך כנגדו בעמודה h
ומה המשך המשוואה? אם "נוותר" על ערך בעמודה g גם הערך בעמודה h יעלם בו זמנית.
וזו כבר שגיאה חמורה מאוד הפוגעת בתיפקודה המהותי והבסיסי של פונקציית filter.
ולכן פונקציית unique מתייחסת לכל שם בעמודה g כאינדיבידואלי לעצמו "ועולם בפני עצמו"
(כשאני מדבר על חקר/הפילוסופיה של האקסל אז זו עוד דוגמא לכך...)
זה עמוק..תחשבו על זה....
לאחר כל זאת.המשכתי לחשוב ולבדוק מה ניתן לעשות פה בכל זאת?
ובכן .לאחר הרבה מאוד ניסויים וחיפושים ברשת.הצלחתי בס"ד למצוא פיתרון.
וכפי שתראו בצילום מסך את שרשרת הפונקציות כאן.וזה פשוט עובד!
אני אסביר ממש בקצרה מה תפקידה של כל פונקצייה פה.
הסדר הכללי הוא, יציאה מהפונקצייה הפנימית אל החיצונה.(ממש כמו "חוקי" פיתרון תרגילים הנלמדים אי שם ביסודי.לפיהם ,יש להתחיל לפתור את הסוגריים הפנימיים ביותר ואחכ לחיצוניים יותר וכו..)
פונקציית filter ,עליה כבר נכתב לעיל.
פונקציית sort תפקידה למיין את התוצאות מהקטן לגדול.
אח"כ
פונקציית textjoin "דוחסת" את כל התוצאות לתא אחד ומוסיפה להן נקודה-לנקודה זו יש חשיבות רבה "כאות זיהוי" עבור פונקציית split (זה יוצא ככה-יוסי 2.יוסי 5.יוסי 6.)
אחכ
פונקציית substitute מבצעת המרה של השם יוסי בכלום.(מה שנותר בתא הוא 2.5.6.)
אח"כ
פונקציית split מפרקת את תכולת התא לפי סימן הזיהוי של הנקודה(.) הערכים נחלקים ל3 תאים ברצף במאוזן.
אח"כ
פונקציית transpose מחזירה את התאים ממאוזן למאונך.
והנה לפניכם הפלא.כאשר בוחרים מתוך אימות נתונים בתא D2 .מוחזרים בעמודה E התוצאות ברצף מאונך.
נ.ב מצורף הגיליון כאן
זה כל כך נפלא וכל כך יפה!
תהנו מהקסם,תהנו מהחכמה!תהנו מאקסל!
שבת שלום ומבורכת