Menu

INDIRECT באקסל: הפיכת טקסט להפניה לתא

=INDIRECT("C"&E2) קוראת את התא שהכתובת שלו בנויה כטקסט: עמודה C, השורה שב-E2. השתמשו בה כדי לבחור גיליון לפי שם מתוך תא, לבנות טווחים ממספרים וליצור רשימות נפתחות תלויות.

כל גיליון בעמוד הזה חי: שנו מספר או נוסחה והוא יחושב מחדש.

=INDIRECT(E2) קוראת את התא שהכתובת שלו כתובה כטקסט ב-E2. אם ב-E2 כתוב C4, הנוסחה מחזירה את הערך שב-C4. אפשר גם לבנות את הכתובת מחלקים: =INDIRECT("C"&E3) קוראת את עמודה C במספר השורה שב-E3.

הפניה שכתובה כטקסט
F2
ABCDEF
1ProductCategoryPriceAddressValue
2AppleFruit$1.20C4$0.80
3PearFruit$1.506$1.10
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
לחצו על תא כדי לראות את הנוסחה שלו. שנו מספר או נוסחה והגיליון יחושב מחדש.

F2 קורא את C4, המחיר של Carrot, $0.80. שנו את E2 ל-C3 או ל-B5 ו-F2 מתעדכן בהתאם. F3 מחבר את "C" ואת ה-6 שב-E3 לכתובת C6 ומחזיר $1.10. שנו את E3 ל-2 בשביל המחיר של Apple.

התחביר של INDIRECT

=INDIRECT(ref_text, [a1])
  • ref_text: טקסט שמאיית הפניה: "C4", "B2:B6", "Prices!A2", "'Price list'!A2:B9".
  • a1: TRUE או מושמט לכתובות בסגנון A1. FALSE קורא סגנון R1C1, שבו "R4C3" פירושו שורה 4, עמודה 3, וזה מתאים כשגם השורה וגם העמודה הן מספרים.

אם הטקסט אינו כתובת תקינה, התוצאה היא #REF!. INDIRECT מחזירה הפניה אמיתית, ולכן היא עובדת בתוך SUM, COUNTIF, VLOOKUP וכל פונקציה שמקבלת טווח.

בניית טווח ממספרים

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

סכום של N השורות הראשונות
F2
ABCDEF
1MonthSalesRowsTotal
2Jan4,200312,900
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
לחצו על תא כדי לראות את הנוסחה שלו. שנו מספר או נוסחה והגיליון יחושב מחדש.

עם 3 ב-E2 הטקסט הופך ל-B2:B4, ו-F2 מחבר את Jan עד Mar: 12,900. הגדירו את E2 ל-6 בשביל חצי השנה, 27,900. ה-1+E2 נמצא שם כי הנתונים מתחילים בשורה 2. אפשר לכתוב את אותו סכום בלי INDIRECT, =SUM(B2:INDEX(B2:B7,E2)), שאינה נדיפה; העמוד של OFFSET משווה בין האפשרויות.

הפניה לגיליון ששמו כתוב בתא

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

סכום אחד לכל גיליון חודשי
B2
AB
1MonthTotal
2Jan12,500
3Feb12,200
4Mar13,700
לחצו על תא כדי לראות את הנוסחה שלו. שנו מספר או נוסחה והגיליון יחושב מחדש.

B2 בונה את הטקסט 'Jan'!B2:B4 ומסכם אותו: 12,500. B3 ו-B4 הם אותה נוסחה שהועתקה למטה, ולכן הם קוראים את Feb (12,200) ואת Mar (13,700). פתחו את הלשונית Feb ושנו מספר: הסיכום מתעדכן. הקלידו Feb במקום Jan ב-A2 ו-B2 מסכם עכשיו את Feb. ה-B2:B4 שבתוך המירכאות הוא טקסט, ולכן הוא לא משתנה כשהנוסחה מועתקת למטה; רק ההפניה ל-A2 משתנה.

רשימות נפתחות תלויות

רשימה נפתחת שנייה שהפריטים שלה תלויים בראשונה היא העבודה הקלאסית של INDIRECT. באקסל ההגדרה הרגילה היא:

  1. שימו את הפריטים של כל קטגוריה בעמודה ותנו לכל טווח שם לפי הקטגוריה שלו: בחרו את העמודות עם הכותרות שלהן והשתמשו ב'נוסחאות > צור מתוך בחירה > שורה עליונה'. זה יוצר את השמות Fruit, Vegetable ו-Dairy.
  2. תנו ל-A2 רשימה של הקטגוריות: 'נתונים > אימות נתונים', 'אפשר: רשימה', מקור Fruit,Vegetable,Dairy.
  3. תנו ל-B2 רשימה עם המקור =INDIRECT(A2). כשב-A2 כתוב Fruit, הרשימה קוראת את הטווח שנקרא Fruit.

הגיליון למטה בונה את אותו הדבר עם גיליון לכל קטגוריה במקום טווח עם שם. D2 משתמש ב-INDIRECT כדי לשפוך את הפריטים של הגיליון ששמו ב-A2, והרשימה של B2 קוראת את D2:D4.

רשימת פריטים שתלויה בקטגוריה
D2
ABCD
1CategoryItemItems for the category
2FruitAppleApple
3Pear
4Plum
לחצו על תא כדי לראות את הנוסחה שלו. שנו מספר או נוסחה והגיליון יחושב מחדש.

בחרו Dairy ב-A2: D2:D4 עוברים ל-Milk, Butter, Cheese, וכך גם האפשרויות ב-B2. B2 שומר את הערך הישן שלו עד שבוחרים ערך חדש; אקסל מתנהג באותה דרך, ולכן טפסים מוסיפים לעתים קרובות בדיקה כמו =COUNTIF(D2:D4,B2)>0 ליד הפריט. ב-Excel 365 אפשר לוותר על הטווחים עם השם ולהפנות את הרשימה השנייה לנוסחה נשפכת, למשל =INDIRECT("'"&A2&"'!A2:A4") בתא עזר ו-=D2# כמקור. בעמוד של הרשימה הנפתחת יש את שאר ההגדרה.

INDIRECT נדיפה, והיא מתעלמת משורות שנוספו

שתי תופעות לוואי נובעות מכך ש-INDIRECT קוראת טקסט במקום הפניה:

  • היא מחושבת מחדש בכל שינוי. אקסל לא יכול לדעת לאילו תאים קטע טקסט יצביע, ולכן הוא מחשב מחדש כל INDIRECT אחרי כל עריכה בכל מקום בחוברת העבודה. כמה עשרות לא מזיקות; עשרות אלפים הופכים כל הקשה לאיטית. INDEX עם מספר שורה (=INDEX(C:C,E3)) נותנת את אותה תוצאה כמו =INDIRECT("C"&E3) ומחושבת מחדש רק כשהקלטים שלה משתנים.
  • הכתובת לא זזה. הוסיפו שורה מעל שורה 4 ו-=C4 הופכת ל-=C5, אבל =INDIRECT("C4") עדיין קוראת את C4, שהיא עכשיו שורה אחרת. לפעמים זו בדיוק המטרה, הפניה שחייבת להישאר על תא קבוע לא משנה מה קורה לגיליון. לרוב זה באג שמחכה שמישהו יוסיף שורה.

INDIRECT לחוברת עבודה אחרת עובדת רק כל עוד חוברת העבודה הזו פתוחה; כשהיא סגורה, היא מחזירה #REF!.

תרגול: מחיר לפי מספר שורה

מחירון
F2
ABCDEF
1ProductCategoryPriceRowPrice
2AppleFruit$1.205
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
לחצו על תא כדי לראות את הנוסחה שלו. שנו מספר או נוסחה והגיליון יחושב מחדש.

תורכם: ב-F2, השתמשו ב-INDIRECT כדי להחזיר את המחיר בעמודה C במספר השורה שכתוב ב-E2.

שאלות נפוצות

מה INDIRECT עושה באקסל?

היא הופכת טקסט להפניה. =INDIRECT("C4") מחזירה את הערך של C4, ו-=INDIRECT(E2) מחזירה את הערך של התא שהכתובת שלו כתובה ב-E2. אפשר לבנות את הכתובת עם &, ולכן =INDIRECT("C"&E2) קוראת את עמודה C במספר השורה שב-E2.

איך מפנים לגיליון אחר שהשם שלו נמצא בתא?

בנו את הכתובת עם שם הגיליון בגרשיים בודדים: =INDIRECT("'"&A2&"'!B2"). הגרשיים שומרים על הנוסחה עובדת גם לשמות עם רווחים. =SUM(INDIRECT("'"&A2&"'!B2:B4")) מסכמת טווח בגיליון הזה.

למה INDIRECT מחזירה #REF!?

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

האם INDIRECT נדיפה?

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

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל