תמונת שער.jpg


תמונת מקור - Leonardo AI

בּפרשתן - פרשת וישלח, יעקב אבינו ע"ה מתכונן לפגישה עם עשיו אחיו ומתקין עצמו לג׳ דברים - לדורון, למלחמה ולתפילה. ובמסגרת ההכנות הוא פונה בתפילה לה':

"וַיֹּאמֶר יַעֲקֹב אֱלֹוקֵי אָבִי אַבְרָהָם וֵאֱלֹוקֵי אָבִי יִצְחָק ה' הָאֹמֵר אֵלַי שׁוּב לְאַרְצְךָ וּלְמוֹלַדְתְּךָ וְאֵיטִיבָה עִמָּךְ.

קָטֹנְתִּי מִכֹּל הַחֲסָדִים וּמִכָּל הָאֱמֶת אֲשֶׁר עָשִׂיתָ אֶת עַבְדֶּךָ כִּי בְמַקְלִי עָבַרְתִּי אֶת הַיַּרְדֵּן הַזֶּה וְעַתָּה הָיִיתִי לִשְׁנֵי מַחֲנוֹת.

הַצִּילֵנִי נָא מִיַּד אָחִי מִיַּד עֵשָׂו כִּי יָרֵא אָנֹכִי אֹתוֹ פֶּן יָבוֹא וְהִכַּנִי אֵם עַל בָּנִים.

וְאַתָּה אָמַרְתָּ הֵיטֵב אֵיטִיב עִמָּךְ וְשַׂמְתִּי אֶת זַרְעֲךָ כְּחוֹל הַיָּם אֲשֶׁר לֹא יִסָּפֵר מֵרֹב."

(בראשית פרק ל"ב פסוקים י' - י"ג)

והנה בתלמודא - מסכת סוטה (דף ה' עמוד א') איתא:

"אָמַר רַב חִיָּיא בַּר אָשֵׁי אָמַר רַב. תַּלְמִיד חָכָם צָרִיךְ שֶׁיְּהֵא בּוֹ אֶחָד מִשְּׁמוֹנָה בִּשְׁמִינִית".

וזהו לשונו הטהור של רבינו הגר"א - רבי אליהו מווילנה זצ"ל בספרו "קול אליהו" (דפים פ"א - פ"ב):

"יש לפרש כי יעקב אבינו ע"ה אמר קטנתי מכל החסדים ומכל האמת אשר עשית את עבדיך. ותלה החסד והאמת שקיבל מהשי"ת על נפשו.

ולכאורה קשה, הרי על פי מדת הענוה אין לו לתלות הגדולה בעצמו רק בזכות אברהם ויצחק?

אלא למדנו מזה, דהטובות שמקבל האדם מהשי"ת יש לו לתלות בעצמו כדי להקטין את עצמו, כמו שאמר יעקב אבינו ע"ה קטנתי מכל החסדים והיינו אם ידבר האדם מהטובות אשר קיבל.
אבל אם יבקש הצלה או טובה לקבל עתה או לעתיד, לא יבקש בזכות עצמו. שהרי שלמה המלך ע"ה לא נענה בזכות עצמו עד שאמר זכרה לחסדי דוד אבי וכן חזקיהו המלך ע"ה כמבואר בגמרא.


וזהו הכוונה תלמיד חכם מותר לו להתגאות שמונה שבשמינית. כי הפסוק קטנתי מכל החסדים וגו' הוא הפסוק השמיני שבפרשת וישלח שהיא פרשה השמינית שבתורה, להורות שעל אופן זה מותר להתגאה ולתלות בעצמו כמבואר".עכ"ל.

דִּבְרֵי פִי חָכָם חֵן…

כעת, בואו ותראו איך הנ"ל קשור לאקסל ולעולמן של הפונקציות…

יומן מסע - חלק א:


תמונה גיליון ראשי 1.png


בצילום מסך הנ"ל (מתוך הגיליון המצורף בלינק להלן) תוכלו להבחין בסימולציה לפירושו של הגר"א מווילנא הנ"ל, כאשר:

שורות 1-8 מתייחסות ל 8 פרשיות הראשונות בתורה מבראשית ועד וישלח.

ועמודות A-H (שהן למעשה עמודות 1-8 "האמיתיות" בגיליון האקסל/שיטס) מתייחסות ל 8 הפסוקים הראשונים שבכל פרשה ופרשה.

נ.ב באופן חריג ביותר הכותרות נכתבו על ידי בעמודה I ובשורה 9. זה קצת מוזר לכם אני יודע…אני רק אספר לכם שהמניע לכך הוא למען "הסדר הטוב" וההמחשה הויזואלית בנוסחאות להלן בפירושו של הגר"א מווילנא(סביב המספר 8 - "שמונה שבשמינית").

יומן מסע - חלק ב:

ראינו לעיל בפירושו של הגר"א מוילנא שהפירוש "שמונה שבשמינית" הוא הפסוק השמיני מתחילתה של הפרשה השמינית בתורה.

בצילום מסך הנ"ל, כולכם רואים שאם "נצעד" שמונה שורות (מלמעלה למטה) מראש הגיליון וכמו כן "נצעד" שמונה עמודות (מימין לשמאל - בגיליון הנוכחי שהכיוון בו מימין לשמאל) "נגיע" אל היעד ששמו תא H8.

כולכם גם רואים שהטקסט / הערך בתא זה הוא הפסוק - "קטנתי מכל החסדים ומכל האמת אשר עשית את עבדך כי במקלי עברתי את הירדן הזה ועתה הייתי לשני מחנות".

כולכם גם חובבי אתגרים ובעיקר אתגרי אקסל ושות'. נכון?

אז הנה "האתגר" הבא:

כיצד "להסביר" ולבקש מהאקסל / השיטס להחזיר לפנינו (בעזרת נוסחאות / פונקציות) את הערך שכתוב בתא "ההוא" שממוקם בעמודה השמינית ובשורה השמינית…?אה, כלומר תא H8. כן כן, בדיוק לזה התכוונתי…

יומן מסע - חלק ג:


תכירו את פונקציית address הנפלאה!

מהי הפונקציה הזו ומה תפקידה?

פונקציה זו מקבלת כקלט מספר שורה ומספר עמודה, ומחזירה מחרוזת טקסט שמייצגת את כתובת התא באקסל. לדוגמה, אם נרצה לקבל את הכתובת של התא שנמצא בשורה 3 ועמודה 2, הפונקציה תחזיר "B3".

הפונקציה בנויה מ 5 ארגומנטים כדלהלן. אני אסביר על כל ארגומנט לחוד תוך כדי הדגמה והמחשה מתוך הצילום מסך שלפניכם (אף הוא מתוך הגיליון המצורף בלינק להלן).

תמונה גיליון נספח.png


הארגומנט הראשון - row_num:

ארגומנט זה הוא חובה, ויש להזין בו את מספר השורה שבו יש להשתמש בהפניה לתא.

הארגומנט השני - column_num:

גם ארגומנט זה הוא חובה, ויש להזין בו את מספר העמודה שבו יש להשתמש בהפניה לתא.
כאמור לעיל, שאנו מדברים פה על המונח "מספר העמודות" הכוונה למספר "האמיתי" לדוגמא - עמודה A היא מספר 1, עמודה B היא מספר 2 וכן הלאה…

הארגומנט השלישי - abs_num:

ארגומנט זה אינו חובה אלא אופציונלי. ובו יש לכתוב את הערך המספרי (1-4) המציין את סוג ההפניה שיש להחזיר.

הערך 1 - מציין הפניה "מוחלטת" כלומר עם קיבוע מוחלט.

הערך 2 - מציין הפניה של שורה "מוחלטת" ועמודה "יחסית".

הערך 3 -
מציין הפניה של שורה "יחסית" עמודה "מוחלטת".

הערך 4
- מציין הפניה של הפניה "יחסית" הן כלפי השורה והן כלפי העמודה.

את כל 4 סוגי ההפניות הנ"ל תוכלו לראות בצילום מסך הנ"ל בטווח F3:F6.

שימו לב, כי כאשר לא הוזן כל ערך מספרי בארגומנט השלישי - ברירת המחדל היא הערך 1 כפי שתוכלו להבחין בתא F2.

הארגומנט הרביעי - [a1]:


גם ארגומנט זה אינו חובה אלא אופציונלי. כאשר הוזן הערך הלוגי rtue או לא מוגדר, הפונקציה מחזירה הפניה בפורמט A1, וכאשר הוזן הערך הלוגי false, הפונקציה מחזירה הפניה בפורמט R1C1.(על פורמט זה הסברתי באריכות במאמר בלינק כאן - חלק ב').
תוכלו לראות המחשה ויזואלית לכך בצילום מסך הנ"ל בטווח F7:F10.

הארגומנט החמישי - sheet_text:

וגם ארגומנט זה אינו חובה אלא אופציונלי. בארגומנט זה יש להזין את שם הגיליון אליו מתייחסים, שמו של הגיליון יוצג לפני הכתובת.
תוכלו לראות המחשה ויזואלית לכך בצילום מסך הנ"ל בטווח F11:F12.

ואחרי הקדמה זו וההיכרות עם 5 הארגומנטים של פונקציה זו נתקדם לשלב הבא…

יומן מסע - חלק ד:

אתם זוכרים את "האתגר" שלנו. נכון?

כיצד "להסביר" ולבקש מהאקסל / השיטס להחזיר לפנינו (בעזרת נוסחאות / פונקציות) את הערך שכתוב בתא "ההוא" שממוקם בעמודה השמינית ובשורה השמינית…?

אז הנה התשובה לכך:

לפניכם צילום מסך מתוך הגיליון המצורף בלינק להלן:

תמונה גיליון ראשי 2.png


זהו מבנה הפונקציות בתא K9:

קוד:
=INDIRECT(ADDRESS(M1,M1))

אתם בוודאי זוכרים היטב את פונקציית indirect הגאונית והנפלאה - עליה כתבתי באריכות בלינק כאן. נכון?

פונקציה זו היא "חֲבֶרְתָּהּ הטובה" של פונקציית address ובבחינת "טוֹבִים הַשְּׁנַיִם מִן הָאֶחָד"..."

וכאן במקרה שלנו, בשני הארגומנטים של פונקציית address קיימות הפניות לתא M1 שהערך שנכתב בו הוא - 8.

ולכן, פונקציית address מחזירה את הפלט:

h8.png


ומדוע? כי העמודה H היא העמודה השמינית (האמיתית) בגיליון האקסל / שיטס וכן השורה 8 היא אכן השמינית בגיליון מלמעלה למטה (פשוט וברור…).

שימו לב שההפניה שנוצרה לפנינו היא "מוחלטת" לגמרי, זאת משום שלא הוזן כלום בארגומנט השלישי וברירת המחדל הוא מספר 1 בארגומנט זה כאמור לעיל.

עד כה, הסיפור תם אך לא נשלם…

והסיבה לכך היא - שפונקציית address מחזירה לפנינו כתובת תא בפורמט "טקסט" ולא כהפניה.

כדי שהאקסל / שיטס "יבין" שהטקסט הזה מתייחס לתא מסוים ויחזיר את ערכו אנחנו "עוטפים" את פונקציית address בפונקציית indirect.

עבודת "צוות" מושלמת! אכן כן!

והתוצאה היא הפסוק שנכתב בתא H8:

"קטנתי מכל החסדים ומכל האמת אשר עשית את עבדך כי במקלי עברתי את הירדן הזה ועתה הייתי לשני מחנות".
נהדר. כעת האתגר נפתר והושלם בהצלחה!

יומן מסע - חלק ה:


כן, אני סמוך ובטוח שהשאלה הבאה עומדת לכם על קצה הלשון. ובצדק…

השאלה הזו כל כך "זועקת" ומתבקשת מאליה…

במילה אחת - למה?

ובכמה מילים וביתר פירוט-

למה לנו להסתובב סחור סחור כדי להשיג תוצאה בעוד שניתן להשיג את אותה התוצאה בדרך הכי ישירה, פשוטה וקלה?

למה ולשם מה להזין בארגומנטים של פונקציית address "הפניה" לתא M1 וליצור טקסט שנראה כך:

h8.png

ואז…לעטוף את הפונקציה בפונקציית indirect על מנת להמיר את הטקסט האנונימי הזה להפניה לתא…

וכי מה יותר פשוט בעולם לכתוב נוסחה קצרצרה כזו H8= וזהו זה???

יומן מסע - חלק ו:


השאלה היא שאלה מצוינת…

והתשובה במילה אחת - דִּינָמִיּוּת!

נכון, במקרה הספציפי שלנו לא היה צורך בכל הנ"ל מהסיבה שהגיליון סטטי ללא שינויים והמטרה היא אחת ויחידה - לחלץ את ערכו של התא H8.

במקרה שלנו אכן היה ניתן לבצע הפניה פשוטה כמו H8=.

אך יש לא מעט מקרים שבהם ההפניה לתא צריכה להיות דינמית ולא קבועה.

זה יכול לקרות בהרבה סיטואציות שבכולן הצד השווה שבהן שנדרשת הפניה דינמית.

לשבר את האוזן אתן דוגמה אחת פשוטה:

לפעמים ה"מיקום" של הערך הרצוי הוא תוצאה של חישוב.

לדוגמה: כאשר תא M1 = מספר היום בשנה. ואנו מעוניינים לשלוף את הנתון המתאים מתוך רשימה של 365 תאים!!!
דהיינו, אם היום הוא 200 - אנו נרצה את ערכו של התא ה־200. ואם היום הוא 201 - אנו נרצה את ערכו של התא ה־201.

במקרה הזה הפתרון עם צמד הפונקציות (address & indirect) הוא הכי פנטסטי.

כל שנדרש הוא פשוט לשנות את הערך בתא M1 וזהו…


וזו כאמור רק דוגמה קטנה. ואידך זיל גמור…

ועד כאן לאקסל ולעולמן של הפונקציות…

מקווה שנהנתם מהמסע המופלא לנבכי פונקציית address הנפלאה…

לסיום, אפרופו דברי הש"ס וביאורו של רבינו הגר"א מוילנא זצ"ל שהובאו בתחילתו של מאמר זה, אחתום בפירושו הנפלא שהביא רבי צבי הירש קאיידנובר זצ"ל בספר המוסר "קב הישר" (פרק ס"ה) המלמד שאדרבא, כוונת דרשת רבי חייא בר רב אשי בשם רב היא לומר שתלמיד חכם יש לו לנהוג במידת הענוה הרמוזה "בשמונה שבשמינית". וזהו לשונו הטהור:

"שָׁמַעְתִּי הַפֵּרוּשׁ בְּשֵׁם הַגָּאוֹן הָרַב מוֹרֵנוּ ווֹלְף, אַב בֵּית דִּין דִּקְהִלַּת קֹדֶשׁ פּוֹזְנָא זִכְרוֹנוֹ לִבְרָכָה, דְּאָמַר שֶׁכַּוָּנַת רַבִּי חִיָּא הָיָה בָּזֶה, שֶׁאַדְּרַבָּה, שֶׁתַּלְמִיד חָכָם צָרִיךְ לִהְיוֹת עָנָו. וְלָכֵן אָמְרוּ- אֶחָד מִשְּׁמִינִית שֶׁבַּשְּׁמִינִית.

דַּע, כִּי הַשֵּׁם הַקָּדוֹשׁ שֶׁל ע"ב הַיּוֹצֵא מִפְּסוּקִים: וַיִּסַּ"ע וַיָּבֹ"א וַיֵּ"ט (שְׁמוֹת יד, יט־כא), כַּאֲשֶׁר הוּא מְסֻדָּר בַּזֹּהַר, פָּרָשַׁת בְּשַׁלַּח, בִּרְתִיכָא קַדִּישָׁא עִלָּאָה, תִּמְצָא בַּשּׁוּרָה שְׁמִינִית אֶחָד מִשְּׁמוֹנָה שֵׁמוֹת, שֶׁבָּהּ תֵּבַת ענ"ו וְקַל לָנוּ לְהָבִין".


קב הישר.png


צילום מסך מתוך ספר "קב הישר" מהדורת ירושלים תשמ"ב באדיבותו של האתר "HebrewBooks"

פלא פלאות!

ממש געוואלדיג!


לינק לגיליון שיטס אודות פונקציית ADDRESS - מצורף כאן.