תמונת מקור - Leonardo AI
איתא במתניתין בפרק "גט פשוט" (מסכת בבא בתרא פרק י' משנה ז'):
"שְׁנַיִם שֶׁהָיוּ בְעִיר אַחַת, שֵׁם אֶחָד יוֹסֵף בֶּן שִׁמְעוֹן וְשֵׁם אַחֵר יוֹסֵף בֶּן שִׁמְעוֹן, אֵין יְכוֹלִין לְהוֹצִיא שְׁטָר חוֹב זֶה עַל זֶה,
ופירש רע"ב - דכל אחד מהם יכול לטעון זה השטר שבידך אני החזרתי לך כשפרעת לי המעות שהלויתיך.
וְלֹא אַחֵר יָכוֹל לְהוֹצִיא עֲלֵיהֶן שְׁטָר חוֹב.
ופירש רע"ב - דכל אחד מצי מדחי ליה לגבי חבריה.
נִמְצָא לְאֶחָד בֵּין שְׁטָרוֹתָיו שְׁטָרוֹ שֶׁל יוֹסֵף בֶּן שִׁמְעוֹן פָּרוּעַ,
ובגמרא (דף קע"ג עמוד א') פירשה אביי "הכי קאמר נמצא ללוה בין שטרותיו שטרו של יוסף בן שמעון עלי פרוע שטרות שניהם פרועין"
כלומר, שאדם אחד לווה כסף משני יוסף בן שמעון, ונתן להם שטרות, ונמצא בידי הלווה שובר שהיה כתוב בו שהשטר של יוסף בן שמעון פרוע.
שְׁטָרוֹת שְׁנֵיהֶן פְּרוּעִין.
כלומר, שאינם יכולים לגבות כלום מהשטרות שבידם.
כֵּיצַד יַעֲשׂוּ?
דהיינו - אם רוצים ללוות זה מזה או מאיש אחר או לקנות קרקע - רשב"ם.
יְשָׁלֵשׁוּ.
כלומר, יכתוב שם אבי אביו - רע"ב (מלשון שלוש דורות).
וְאִם הָיוּ מְשֻׁלָּשִׁים, יִכְתְּבוּ סִימָן.
ואם היו משולשים - ששמותן ושמות אבותיהן ואבות אבותיהן שווין.
יכתבו סימן - פלוני. שהוא גיחור (אדמוני) או ארוך או גוץ. - רע"ב.
וְאִם הָיוּ מְסֻמָּנִין, יִכְתְּבוּ כֹּהֵן".
ואם הן שוין בסימנין, יכתבו כהן, אם אחד כהן ואחד ישראל - רע"ב.
ובגמרא הובאה ברייתא "תנא, אם היו שניהם כהנים יכתבו דורות".
ופירש הרשב"ם. יכתבו דורות - מרובעים יוסף בן יעקב בן יצחק בן אברהם, יוסף בן יעקב בן יצחק בן דוד דכולי האי לא יהיו שמות אבותיהן שוין.
עד כאן לשון המשנה וביאורה.
כעת, בואו תראו איך הנ"ל קשור לאקסל ולעולמן של הפונקציות…
ובכן, ראינו ומצינו בדברי המשנה כי כאשר קיימת סיטואציה של שתי שמות זהים (יוסף בן שמעון) בעיר אחת, "אֵין יְכוֹלִין לְהוֹצִיא שְׁטָר חוֹב זֶה עַל זֶה, וְלֹא אַחֵר יָכוֹל לְהוֹצִיא עֲלֵיהֶן שְׁטָר חוֹב". וכל זאת מחוסר אפשרות של בירור והוכחה במי המדובר.
והפתרון שמציעה המשנה הוא - "כֵּיצַד יַעֲשׂוּ? יְשַׁלְּשׁוּ. וְאִם הָיוּ מְשֻׁלָּשִׁים, יִכְתְּבוּ סִימָן. וְאִם הָיוּ מְסֻמָּנִין, יִכְתְּבוּ כֹּהֵן".
ולהבדיל בין קודש לחול…אם נערוך סימולציה לדברי המשנה באקסל / שיטס ונכתוב בשתי שורות (למשל, או יותר) ערכים שווים (כמו יוסף בן שמעון) כאשר הערכים פרוסים בשתי עמודות (בדוגמה שלנו - עמודה 1 = שם דהיינו יוסף ובעמודה 2 שם האב דהיינו שמעון) ואנו מעוניינים "לבקש מהאקסל / שיטס" לבדוק האם קיימות שורות שהערכים בהם זהים בשתי עמודות (או יותר).
האם זה אפשרי?
התשובה היא כן ובהחלט!
לפניכם צילום מסך (מתוך הגיליון המצורף בלינק להלן) ובו תוכלו להבחין ב 2 פתרונות לכך:
פתרון 1:
תכירו, זו פונקציית countifs.
הפונקציה סופרת בתוך רשימה / טווחים כמה פעמים מופיע ערך מסוים בהתאם לתנאי שנציב, כאשר נוכל לבדוק עד 127 רשימות / טווחים, הפונקציה סופרת את התאים התואמים לתנאים (כלומר, לקריטריונים שנציב).
ההבדל בין countif ל- countifs הוא:
שפונקציית - countif מיועדת לספירת תאים עם תנאי אחד בטווח אחד, בעוד שפונקציית - countifs יכולים לבדוק קריטריונים שונים בטווח זהה או שונה.
ומכאן תוספת האות "S" לשמה של הפונקציה - מלשון רבים.
הארגומנט הראשון criteria_range1: כלומר, האיזור בו נבדוק האם התנאי מתקיים ונספור את הרצוי.
הארגומנט השני criteria1: כלומר, הקריטריון. התנאי לפיו נספור את הרצוי.
שני הארגומנטים הראשונים הם חובה!
ארגומנטים אופציונליים criteria_range2-127, criteria2-127: דהיינו, טווחים נוספים והקריטריונים המשויכים שלהם.
ניתן להשתמש ב- 127 זוגות של טווחים/קריטריונים לכל היותר.
ולאחר ההקדמה הקצרה הזו אחזור למקרה שלנו.
שלב 1:
זהו מבנה הפונקציות בתא C7:
קוד:
=ARRAYFORMULA(COUNTIFS(A7:A8,A7:A8,B7:B8,B7:B8))
הפונקציה countifs מבצעת בדיקות על שני טווחים במקביל.
כאן, הפרמטרים הם טווחים שמופיעים פעמיים:
בשני הארגומנטים הראשונים בפונקציה A7:A8,A7:A8 - הבדיקה היא עבור כל ערך תא בטווח A7:A8 מול הטווח A7:A8.
ובשני הארגומנטים הנוספים בפונקציה B7:B8,B7:B8 - הבדיקה היא עבור כל ערך תא בטווח B7:B8 מול הטווח B7:B8.
למעשה, הפונקציה סופרת עבור כל שורה כמה פעמים מופיע שילוב הערכים של A ו-B יחד.
שימו לב שבארגומנט השני והרביעי הוזן טווח ולא תא בודד. זו בדיוק הסיבה לכך שהחזר התוצאות הוא במערך אנכי וזו גם הסיבה לתוספת של פונקציית arrayformula (בשיטס דווקא) "העוטפת" את פונקציית countifs.
על "הטריק" הזה (החוסך את הצורך בגרירת תאים) והלוגיקה שבו כתבתי בארוכה במאמר כאן.
התוצאות הן:
2
2
שהרי הערכים של צמד התאים A7:B7 (יוסף - שמעון) מופיעים פעמיים כצמד בעמודות A ו B. והוא הדין לצמד התאים A8:B8.
שלב 2:
זהו מבנה הפונקציות בתא D7:
קוד:
=ARRAYFORMULA(COUNTIFS(A7:A8,A7:A8,B7:B8,B7:B8)>1)
בשלב זה נוסף האופרטור 1< כלומר גדול מ 1.
הרעיון פה הוא שכאשר ההחזר בשלב 1 הוא 1 זה אומר לנו שבשורה x צמד הערכים (בשתי העמודות) הוא שונה מהערכים ביתר השורות. כלומר אינו זהה / שווה.
וכאשר ההחזר בשלב 1 הוא גדול מ 1 זה אומר לנו שבשורה x צמד הערכים (בשתי העמודות) הוא זהה / שווה (לפחות) לצמד נוסף בשורה אחרת.
ואם נחזור לשאלה שלנו - האם הערכים בשתי העמודות (כלפי כל שורה) הם שווים?
התשובה היא:
true
true
פתרון 2:
שלב 1:
זהו מבנה הפונקציה בתא E7:
קוד:
=CONCATENATE(A7:B7)
במקרה שלנו הואיל ומדובר על בדיקת כל שורה כלפי שתי עמודות, זה (כמעט) הכי טְרִיוְויָאלִי לבצע זאת בעזרת פונקציית countifs. ובכל זאת ניתן לבצע את הבדיקה בדרך מעט מפולפלת גם בעזרת פונקציית countif.
איך לבצע זאת בפועל?
התשובה היא - בעזרת פונקציית concatenate (לדוגמא. ניתן להשתמש גם באמצעות אמפרסנד כזה & או בפונקציות כמו concat או textjoin).
הפונקציה "משרשרת" את ערכי שתי העמודות כמחרוזת רצופה בעמודה אחת.
שלב 2:
זהו מבנה הפונקציות בתא F7:
קוד:
=ARRAYFORMULA(COUNTIF(E7:E8,E7:E8))
רק לאחר שלב 1 ניתן לבצע בדיקה בעמודה אחת בלבד באמצעות countif.
הבדיקה היא עבור כל ערך תא בטווח E7:E8 מול הטווח E7:E8.
גם כאן, התוצאות מוחזרות כמערך אנכי (ולא תוצאה בודדת) וכפי שהסברתי לעיל בפתרון 1 (שלב 1).
שלב 3:
זהו מבנה הפונקציות בתא G7:
קוד:
=ARRAYFORMULA(COUNTIF(E7:E8,E7:E8)>1)
בשלב זה נוסף האופרטור 1< כלומר גדול מ 1.
הרעיון פה הוא שכאשר ההחזר בשלב 1 הוא 1 זה אומר לנו שבשורה x צמד הערכים (בשתי העמודות) הוא שונה מהערכים ביתר השורות. כלומר אינו זהה / שווה.
וכאשר ההחזר בשלב 1 הוא גדול מ 1 זה אומר לנו שבשורה x צמד הערכים (בשתי העמודות) הוא זהה / שווה (לפחות) לצמד נוסף בשורה אחרת.
ואם נחזור לשאלה שלנו - האם הערכים בשתי העמודות A-B (כלפי כל שורה) הם שווים?
התשובה היא:
true
true
נפלא מאוד!
כעת, זהו הזמן לחזור לדברי המשנה לעיל כפתרון לבעיה המורכבת בכל הקשור לדיני "שטרות" מעצם כפילותם של שני יוסף בן שמעון בעיר אחת -
"כֵּיצַד יַעֲשׂוּ? יְשַׁלְּשׁוּ"
ופירש רע"ב - יכתוב שם אבי אביו.
אז הנה, גם בגיליון שיטס המצורף הוספתי בעמודה K את הערכים של שמות הסבים - יעקב ונפתלי.
והפתרונות? כְּמַעֲשֵׂהוּ לעיל כך מעשהו כאן.
רק שכאן יש צורך להוסיף "למשוואה" את טווח K7:K8 הן בפתרון 1 והן בפתרון 2.
והתוצאות הן:
false
false
אכן השמות הם אינם זהים "לגמרי" וכל שורה (ב 3 העמודות שבה) מופיעה רק פעם אחת בטווח.
כי אע"פ שהשמות ושם אביהם זהים (דהיינו שני יוסף בן שמעון) כיוון ששמות אבי אביהם (הסבים) הם שונים (יעקב ונפתלי) נמצא שמדובר כאן "בסימן היכר" שניתן לציינו בשטר והכל שריר וקיים…
ועד כאן לאקסל ולעולמן של הפונקציות…
מקווה שנהניתם…
לינק לגיליון שיטס הכולל 2 פתרונות לבדיקה האם ערכי שורה X (בשתי עמודות או יותר) זהה לשורות נוספות בטווח - מצורף כאן.
הנושאים החמים