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

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

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

vlmt01

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

אציג שני פתרונות: עם פונקציות Excel ועם פונקציה מוגדרת ע"י המשתמש (UDF – user defined function)

פונקציות Excel

בשלב הראשון (ולא הכרחי) נגדיר את טווחי הטבלאות בתוך שמות (names)

vlmt02

ב-Excel "קלאסי" (גרסאות 97-2003) נשתמש בשילוב של פונקציות IF, ISERROR ו-VLOOKUP

=IF(ISERROR(VLOOKUP(C3,ייצור,2,0)),IF(ISERROR(VLOOKUP(C3,לוגיסטיקה,2,0)),

VLOOKUP(C3,אחזקה,2,0),VLOOKUP(C3,לוגיסטיקה,2,0)),VLOOKUP(C3,ייצור,2,0))

vlmt03

ב-Excel 2007 החיים שלנו יהיו יותר קלים ונוכל להשתמש ב-IFERROR

=IFERROR(VLOOKUP(C7,ייצור,2,0),IFERROR(VLOOKUP(C7,לוגיסטיקה,2,0),VLOOKUP(C7,אחזקה,2,0)))

vlmt04

שני הפתרונות מוגבלים. ב-Excel "קלאסי" ישנה מגבלה של מספר פונקציות IF שאפשר לשלב בתוך נוסחה (מקסימום של שבע פונקציות). ב-Excel 2007 אפשר לשלב כמות הרבה יותר גדולה של פונקציות IF, אבל הנוסחה נעשית מסורבלת וקשה לבדיקה.

פתרון עם UDF (פונקציה מוגדרת ע"י המשתמש)

במודול רגיל של עורך ה-Vba כותבים את הקוד הבא

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function VLOOKAllSheets(Look_Value As Variant, Tble_Array As Range, _
Col_num As Integer, Optional Range_look As Boolean)

''''''''''''''''''''''''''''''''''''''''''''''''
'Published by OzGrid.com
'''''''''''''''''''''''''''''''''''''''''''''''''
Dim wSheet As Worksheet
Dim vFound

On Error Resume Next

For Each wSheet In ActiveWorkbook.Worksheets
With wSheet
Set Tble_Array = .Range(Tble_Array.Address)
vFound = WorksheetFunction.VLookup _
(Look_Value, Tble_Array, _
Col_num, Range_look)
End With
If Not IsEmpty(vFound) Then Exit For
Next wSheet

Set Tble_Array = Nothing
VLOOKAllSheets = vFound
End Function

הפונקציה תופיע באשף הפונקציות, תחת  הקטגוריה

vlmt05

מכיוון שכמות השורות בכל טבלה אינה ידועה לנו, נשתמש בטווח העמודות  B:C כארגומנט ה-table_array

vlmt06

© 2012 LookUp - פתרונות Excel והדרכה מתקדמת Suffusion WordPress theme by Sayontan Sinha