سبد خرید
0

محصولی در سبد خرید نیست.

بازگشت به فروشگاه

Vlookup از چند شیت یا فایل

vlookup در چند شیت
۲.۶/۵ - (۷ امتیاز)

vlookup در چند شیت و فراخوانی داده ها

وقتی میخوایم یک داده ای رو در یک دیتابیس جستجو کنیم، از Vlookup استفاده میکنیم. اما عموما کمتر پیش میاد که محل جستجو با دیتابیس در یک شیت قرار گرفته باشند. عمدتا جستجو بین چند شیت یا چند فایل انجام میشه. در این مقاله نحوه جستجو بین شیت ها و فایل های مختلف رو با هم میبینیم. اگر با تابع Vlookup و آرگومان های اون آشنا نیستید حتما مقاله مربوط به این تابع رو مطالعه کنید.

جستجو بین دو شیت

وقتی میخوایم جستجوی داده رو بین دو شیت انجام بدیم، روش کار خیلی مشابه Vlookup معمولی هست. تنها تفاوت این هست که نام شیت رو در قسمت Table_Array باید اضافه کنیم. یعنی ساختار تابع بصورت زیر خواهد بود:

=VLOOKUP(lookup_value, Sheet!range, col_index_num, [range_lookup])

فرض کنید میخوایم بدونیم که میزان فروش محصول ۱ در ماه اردیبهشت چقدر بوده است. با توجه به اینکه اطلاعات فروش هر محصول در ماه های مختلف در یک شیت قرار گرفته، فرمول رو به شکل زیر می نویسیم:

=VLOOKUP (A2 ,’محصول ۱′!A1:B13 , ۲,۰)

در واقع کافیه در حین نوشتن فرمول و انتخاب آرگومان دوم، روی شیت محصول ۱ کلیک کنیم و Table_Array رو محدوده A1:B13 انتخاب کنیم.فراخوانی داده از چندین شیتآرگومان های تابع به شرح زیر است:Lookup_Value: مقداری که میخواهیم جستجو کنیم. در اینجا یعنی “اردیبهشت” یا سلول A2 که در اون کلمه اردیبهشت نوشته شده.Table_Array: جدولی که جستجو در اون انجام میشه. در اینجا داده های فروش مربوط به محصول ۱ در شیت به نام “محصول ۱” قرار گرفته. محدوده A1:B13Col_indx_num: شماره ستونی از محدوده جستجو که میخواهیم نمایش داده بشه. مقدار فروش ستون دوم از جدول هست پس این آرگومان عدد ۲ تعیین میشه.Range_Lookup: با گذاشتن مقدار صفر، جستجو دقیق انجام میدیم. در مورد این آرگومان میتونید در مقالات جستجوی بازه ای و Vlookup اطلاعات بیشتری کسب کنید.با همین روش میتونیم اطلاعات مربوط به هر یک از محصولات رو فراخوانی کنیم.
نکته: اگر اسم شیت Space یا کاراکترهای غیرالفبایی وجود داشته باشه، اسم شیت در یک سینگل کوتیشن قرار میگیره. برای مشاهده جزئیات و نحوه کار با رفرنس ها در شیت های دیگه، مقاله ارجاع به سایر منابع رو مطالعه کنید.
 

جستجو بین دو فایل (Workbook)

در جستجو بین دو فایل، مثل حالت بین دو شیت عمل میکنیم. در این حالت نام فایل هم به ادامه اسم شیت اضافه میشه. اسم  فایل داخل براکت و بعد اسم شیت و بعد محدوده مورد نظر. یعنی:

=VLOOKUP(A2, [فروش.xlsx]اردیبهشت!$A$۲:$B$۶, ۲, FALSE)

Vlookup بین چند شیت با Iferror

وقتی تعداد شیت ها کم هست این روش مناسب هست و براحتی میتونیم ازش استفاده کنیم. منطق این روش به این صورت هست که به تعداد شیت ها، باید Vlookup بنویسیم. به این صورت که اگر Vlookup اولی با خطا مواجه شد، در یک شیت دیگه Vlookup انجام بشه. ساختار کلی فرمول به شرح زیر خواهد بود:

=IFERROR(VLOOKUP(…), IFERROR(VLOOKUP(…), …, “پیدا نشد“))

مثلا محصول ۱ در شش ماه اول و محصول ۲ در شش ماه دوم به فروش رسیده. حالا میخوایم در یک شیت همه اطلاعات رو تجمیع کنیم (شکل ۱).vlookup در چند شیت

شکل ۱- جستجو بین چند شیت با Vlookup و Iferror

 برای این کار فرمول رو به شرح زیر می نویسیم:

=IFERROR (VLOOKUP (A2,’محصول ۱′!$A$۲:$B$۷,۲,۰) , IFERROR (VLOOKUP (A2,’محصول ۲′!$A$۲:$B$۷,۲,۰) ,”پیدا نشد”) )

با این فرمول اگر داده مورد نظر در شیت محصول ۱ پیدا نشه، جستجو در شیت محصول ۲ انجام میشه و اگر در شیت محصول ۲ هم مورد جستجو پیدا نشه و با خطا مواجه بشیم، عبارت “پیدا نشد” نمایش داده میشه.

جستجو بین شیت ها با استفاده از Indirect

وقتی تعداد شیت ها بیشتر میشه اینکه برای هر شیت یک Vlookup جداگانه نوشته بشه و به شیت مربوطه ارجاع داده بشه کار سختی هست و انجام این کار با استفاده از vlookup در چند شیت کار خوبی نیست. در این قسمت میخوایم با استفاده از تابع Indirect جستجو رو بین همه شیت ها انجام بدیم. برای این کار باید از فرمول نویسی آرایه ای استفاده کنیم. قبل از نوشتن این فرمول، باید به چند نکته دقت کنیم:
  • در یک محدوده اسم شیت های مورد نظر رو وارد کنیم:
نامگذاری محدوده اسم شیت ها

شکل ۲- جستجو بین شیت ها – نامگذاری محدوده اسم شیت ها

  • فرمول نویسی آرایه ای با کلید ترکیبی Ctrl+Shift+Enter ثبت میشه.
  • ساختار داده ها (ترتیب ستون ها) در شیت ها باید مشابه باشند.
  • چون از یک Table_Array در کل فرمول استفاده خواهیم کرد، بهتره بزرگترین محدوده بین شیت ها رو در نظر بگیریم که مطمئن باشیم همه داده ها پوشش داده شده.
ساختار کلی فرمول مورد نظر به شرح زیر هست:

=VLOOKUP(lookup_value, INDIRECT(“‘”&INDEX(Sheets_name, MATCH(1, –(COUNTIF(INDIRECT(“‘” & Sheets_name & “‘!lookup_range“), lookup_value)>0), 0)) & “‘!table_array“), col_index_num, FALSE)

Sheets_name: اسم شیت هایی که در یک محدوده قرار گرفتهLookup_value: مقدار مورد جستجو. مثلا در اینجا نام ماهLookup_range: ستونی که مورد جستجو قرار میگیره و داده Lookup value در اون قرار دارهTable_array: محدوده مورد جستجو (جدول مورد نظر)Col_index_num: شماره ستون داده مورد نظر در این قسمت تعیین میشهاین فرمول رو با داده های فعلی بنویسیم به شکل زیر در میاد:

=VLOOKUP (A2, INDIRECT(“‘”&INDEX(Sheets_name, MATCH (1, –COUNTIF(INDIRECT(“‘”&Sheets_name& “‘!A2:A7”),A2) >0), 0) ) & “‘!A2:B7”),2, FALSE)

این فرمول چطور کار میکنه؟برای اینکه بتونیم درک کنیم که این فرمول چطور کار میکنه، باید به اجزا کوچکتر تجزیه کنیم.از داخلی ترین توابع یعنی Countif (Indirect(….)) شروع میکنیم:با استفاده از تابع Indirect اسم شیت ها رو به محدوده A2:A7 که محدوده جستجو هست میچسبونیم.

INDIRECT({“‘محصول ۱’!A2:A7″;”‘محصول ۲’!A2:A7”})

و حالا میتونیم مقدار مورد جستجو رو در این شیت ها بشماریم که ببینیم مقدار مورد نظر در کدوم شیت وجود داره. برای این کار از countif استفاده میکنیم.

COUNTIF ({“‘محصول ۱’!A2:A7″;”‘محصول ۲’!A2:A7”} , A2)

این فرمول تعداد A2 (داده مورد جستجو) رو در دو شیت محصول ۱ و محصول ۲ در محدوده A2:A7 محاسبه میکنه.نتیجه فرمول Countif بصورت زیر خواهد بود:

{1;0}

این یعنی مقدار A2 در شیت محصول ۱ یکبار تکرار شده و در شیت محصول ۲ اصلا وجود نداره.حالا برای اینکه نام شیتی که رکورد مورد نظر داخلش وجود داره رو پیدا کنیم، اول باید نتایج Countif که بزرگتر از ۰ هست رو پیدا کنیم. پس برای این کار نتیجه Countif رو با ۰ مقایسه میکنیم. و نتیجه بصورت False / True نمایش داده میشه.

COUNTIF(INDIRECT(“‘” &Sheets_name& “‘!A2:A7”),A2)>0

حالا برای تبدیل مقادیر logical به مقدار عددی – –  رو قبل از تابع countif قرار میدیم.

–(COUNTIF(INDIRECT(“‘” &Sheets_name& “‘!A2:A7”),A2)>0)

نتیجه این فرمول مقدار ۰ و ۱ خواهد بود. در واقع مقدار ۱ تعیین میکنه داده مورد نظر در کدوم شیت وجود داره. در نتیجه زیر نشون میده که داده مورد نظر در شیت اول یعنی شیت محصول ۱ وجود داره و در شیت محصول ۲ (شیت دوم) وجود نداره.

{1;0}

حالا باید مکان این عدد ۱ رو تعیین کنیم. برای این کار از Match استفاده میکنیم. این فرمول مکان اولین عدد ۱ رو تعیین میکنه.

MATCH (1, –(COUNTIF(INDIRECT(“‘” &Sheets_name& “‘!A2:A7”),A2)>0), 0)

حالا باید با توجه به این نتیجه، اسم شیت رو فراخوانی کنیم. برای این کار خروجی تابع Match رو در تابع Index قرار میدیم. تابع Index بین اسم شیت ها، داده متناسب با خروجی Match رو به عنوان خروجی میده.

INDEX (Sheets_name, MATCH(1, –(COUNTIF(INDIRECT(“‘” &Sheets_name& “‘!A2:A7”),A2)>0), 0))

نتیجه فرمول زیر بصورت زیر خواهد بود:

INDEX {“محصول ۲″;”محصول ۱”}),۱)

خروجی این فرمول عبارت “محصول ۱” خواهد بود که نام شیت داده مورد جستجو هست.حالا برای اینکه این اسم بدست آمده را به یک آدرس تبدیل کنیم. باید طبق الگوی آدرس دهی عمل کنیم و الگوی مورد نظر رو بسازیم. برای این کار آدرس رو میسازیم و در Indirect قرار میدیم.

INDIRECT(“‘”&INDEX(Sheets_name, MATCH(1, –(COUNTIF(INDIRECT(“‘” &Sheets_name& “‘!A2:A7”),A2)>0), 0)) & “‘!A2:B7”)

خروجی این فرمول بورت زیر خواهد بود: (نام شیت به همراه آدرس محدوده)

“‘محصول ۱’!A2:B7”

نکته: به ساختار آدرس محدوده با ! دقت داشته باشید. این الگو باید برای همه آدرس دهی ها رعایت بشه. اول نام شیت، بعد علامت تعجب و بعد محدوده مورد نظر.
 حالا فرمول به یک Vlookup ساده تبدیل شده که جستجو در محدوده مورد نظر انجام میشه.

=VLOOKUP (A2, INDIRECT (“‘محصول ۱’!A2:B7”),۲, FALSE)

فراموش نکنید که این فرمول آرایه ای هست و باید با Ctrl+shift+Enter ثبت بشه.در ویدئو زیر نحوه محاسبه فرمول رو مشاهده میکنید:

دانلود فایل آموزش نحوه انجام Vlookup در چند شیت

برای دانلود فایل این آموزش از لینک زیر استفاده کنید:
آواتار
145

فارغ التحصیل لیسانس مهندسی صنایع، ارشد مدیریت صنعتی از دانشگاه تربیت مدرس و عاشق اکسل هستم. از سال 1388 که ترم 2 لیسانس بودم، به توصیه استاد مشاورم شروع به خوندن اکسل بصورت حرفه ای کردم و همچنان در حال مطالعه و یادگیری و البته آموزش به بقیه هستم.

دیدگاه کاربران
  • محسن ۲ اسفند ۱۴۰۱ / ۱۰:۰۹ ق٫ظ

    سلام و خسته نباشید
    یه نرم افزاری فروشگاهی جایی دیدم وقتی کد کالا رو در فاکتور می زنی بلافاصله مشخصات کالا اتوماتیک میاد تا اینجا مساله ای نیست(وی لوک آپ اکسل هم می تونه اینکارو انجام بده) ولی یه فیلد خارج از محدوده فاکتور تعبیه شده که با ورود کد کالا موجودی لحظه ای اون کالا نمایش داده میشه! جالبتر اینکه وقتی کد کالای دوم زده میشه اون فیلد, موجودی کالای دوم رو نشون میده! خیلی برام جالبه بتونم با اکسل اینکارو انجام بدم می خواستم ببینم چنین چیزی امکانش هست؟!!

    • سامان چراغی ۵ اسفند ۱۴۰۱ / ۱۰:۴۱ ق٫ظ

      سلام
      وقت بخیر
      بله امکان انجام این کار هست. کافیه آخرین کد کالا درون فاکتور رو با ترکیب Index و Counta بدست بیارید و اگر دیتابیسی جهت ثبت ورود و خروج اون کالا دارید، با Sumifs برآیند ورود و خروج اون کالا رو بدست بیارید.

  • حسینجان ۱۴ آذر ۱۴۰۱ / ۸:۵۲ ق٫ظ

    درود بر شما
    بنده یک فرم دارم که داده هاش متغیر و بهم پیوسته هست
    در یک فایل اکسل در شیت ۱ داده های متغیر رو قرار دادم
    در شیت ۲ فرم ثابت خودم رو قرار دادم و با تابع vlookup فرم خودم رو در جایی که نیاز به تغییر داشت درست کردم
    حالا که میخام پرینت بگیرم فقط همون اویل داده متغیر شیت ۱ رو پرینت میده و داده های متغیر دیگه رو بهم پرینت نمیده
    دستور خاصی غیر از Ctrl+p باید انجام داد ؟؟؟
    ممنون میشم راهنمایی کنین

    • آواتار
      حسنا خاکزاد ۲۴ دی ۱۴۰۱ / ۴:۲۹ ب٫ظ

      درود بر شما
      این دو به هم ارتباطی ندارن
      یعنی vlookup به پرینت ارتباطی نداره
      اگر ج رو در فرم میبینید، در پرینت هم باید بیاد
      اگر فرم درسته و پرینت نمیشه، تنظیمات پرینت اشکال داره

      • عماد ۲۸ دی ۱۴۰۱ / ۸:۳۹ ق٫ظ

        سلام وقت بخیر
        یک فولدر دارم که ورک شیت های مختلف رو هر روزه داخلش با شماره مشخص بارگذاری می کنیم و با توجه به اینکه این ورک شیت ها همیشه با یک فرمت هست و فقط یکسری مقادیر در اون تغییر می کنه میخوام یک ورک شیت درست کنم که بهش بگه اگر اسم ورک شیت “فلان ” باشد و ستون اول کد “۴۰۱۲۳۴۵” باشد مقدار ستون دوم را فراخوانی کن ،اما table_array در vlookup را نمی توان متغیر کرد ، چه کنم؟ ممنون میشم راهنمایی کنید

        • آواتار
          حسنا خاکزاد ۱۵ تیر ۱۴۰۲ / ۸:۳۹ ب٫ظ

          درود
          از ترکیب indirect استفاده کنید که بتونید جدول رو متغیر کنید
          در فرمول زیر نام شیت از سلول a4 گرفته شده و محدوده در هر شیت از a1:D10 هست. هر کدوم و میتونید تغییر بدید

          =VLOOKUP(“اکسل پدیا”,INDIRECT(A4&”!”&”A1:D10″),2,0)

          در فرمول بالا مقدار مورد جستجو “اکسل پدیا” است

  • محسن سعید ۲۷ آبان ۱۴۰۱ / ۱۱:۲۳ ق٫ظ

    سلام وقت بخیر کلید میانبر تابع vlookup چیه ؟ ممنون میشم جوابشو به ایمیلم ارسال کنید

    • آواتار
      حسنا خاکزاد ۲۹ آبان ۱۴۰۱ / ۱۰:۱۴ ق٫ظ

      درود
      کلید میانبر نداره
      شما میتونید برای خودتون بسازید، از قسمت autocorrection افیس این کار رو انجام بدید که مثلا نوشتید RT اینتر زدید تبدیل بشه به تابع مورد نظر

      • سحر قلی پور ۲ آذر ۱۴۰۱ / ۲:۳۹ ق٫ظ

        سلام خدا قوت
        من چجوری میتونم کل اطلاعات ستون c در اکسل ۱ را در اکسل شماره ۲ به یک باره پیدا کنم و رنگی بشن؟

        • آواتار
          حسنا خاکزاد ۲۴ دی ۱۴۰۱ / ۴:۳۸ ب٫ظ

          درود
          بسته به شرایط و جنس و چینش داد ها متفاوته ولی مثلا میتونید با vlookup در conditional formatting این کار رو بکنید

  • قاسم ۱۰ آبان ۱۴۰۱ / ۸:۱۹ ق٫ظ

    سلام دوتا شیت دارم و در هردو شیت شماره سند مشترک هست ولی یکی از شیتها سند یک ردیف هست و کلی نوشته شده و در شیت دو همان سند چند ردیف شده که سرجمع اونها میشه همون یک ردیف شیت اول.
    از چه فرمولی استفاده کنم که ردیف ها روبروی هم قرار بگیرن
    مثلا شماره سند شیت اول روبروش شماره سند شیت دوم قرار بگیره ولی ممکنه چند ردیف باشه.
    لطفا فرمول یا روش رو بم میگید بنده اکسلم زیاد قوی نیست و گزارش ازم خواستن و کمبود زمان دارم

    • آواتار
      حسنا خاکزاد ۱۰ آبان ۱۴۰۱ / ۲:۰۵ ب٫ظ

      درود بر شما
      خواسته خیلی واضح نیست و امکان راهنمایی نیست چون ساختار فایل دقیقا باید مشخص بشه
      میتونید داخل گروه تلگرام مطرح کنید
      شاید دوستان بتونن کمک کنن

  • حمید رضا ۳۰ مهر ۱۴۰۱ / ۵:۴۰ ب٫ظ

    با سلام و تشکر از سایت پربارتون
    من یک فایل اکسل درست کردم که که اطلاعاتش را به کمک تابع direct از حدود ۲۰ فایل دیگه میخوام جمع آوری کنه اما زمانیکه اون فایلها بسته انددر فایل مقصد به من ارور ref میده از طرفی نمیتونم اون فایلها را همیشه باز نگه دارم (و از سوی دیگه لازم است این فایل مقصد را بدون فایلهای مرجع جای دیگه ارسال کنم) ممنون میشم راهنمایی بفرمایید.

    • آواتار
      حسنا خاکزاد ۱۵ تیر ۱۴۰۲ / ۸:۴۳ ب٫ظ

      درود
      نمیشه دیگه
      مگر اینکه از کوری استفاده کنید
      فایل ها رو فراخوانی کنید در کوئری
      و این کار و انجام بدید
      که نیاز نباشه فایل مرجع رو بفرستید جایی

  • سپیده مرادی ۲۲ مرداد ۱۴۰۱ / ۴:۳۴ ب٫ظ

    ممنونم از شما
    خیلی خوب بود??

  • سپیده مرادی ۲۱ مرداد ۱۴۰۱ / ۱۱:۵۷ ب٫ظ

    سلام و عرض ادب
    خانم مهندس ازتون راهنمایی میخوام
    من یه workbook دارم با ۳۰ شیت که هفته‌ای یک شیت جدید هم به اون اضافه میشه
    میخوام در یک شیت جدا، داده سلول C2 تمام شیت‌ها رو با هم داشته باشم
    که برای چند شیت اول به این صورت فرمول نویسی کردم:
    “sheet1” ! $C2$

    “sheet2” ! $C2$

    اما تعداد شیت‌ها زیاده و مدام در حال اضافه شدن
    میخوام لطف کنید راهنمایی کنید چجور می‌تونم این کارو انجام بدم که هم نخوام تک تک فرمول بنویسم و هم اینکه با اضافه شدن شیت جدید این جدول هم بصورت پویا بروز بشه؟
    ممنونم از راهنمایی‌تون

    • آواتار
      حسنا خاکزاد ۲۲ مرداد ۱۴۰۱ / ۴:۰۸ ب٫ظ

      درود
      از تابع address, indirect استفاده کنید
      مثال داخل این مقاله وجو داره

      فقط کافیه که لیست اسم شیت ها رو داشته باشید:
      https://excelpedia.net/address-function/

  • حیدری ۱۹ مرداد ۱۴۰۱ / ۹:۴۳ ق٫ظ

    سلام
    اگر در یک شیت اطلاعات سرپرست خانوار با کد ملی منحصر به فرد و در شیت دیگر اطلاعات افراد تحت تکفل)فرزندان ، همسر و…) را به همراه کد ملی سرپرست اصلی و داشته باشیم چگونه میتوان اطلاعات افراد تحت تکفل را از شیت دیگر به سطری زیر سرپرست خانوار اضافه کرد؟

    • آواتار
      حسنا خاکزاد ۲۲ مرداد ۱۴۰۱ / ۴:۱۰ ب٫ظ

      درود
      اول دیتابیس ها رو مرج کنید داده یکپارچه بشه بعد پیوت بگیرید و هر طور خواستید بچینید
      نمیتونید طوری فرمول بنویسید که سطر ایجاد کنه و داده رو فراخوانی کنه
      برای این کار باید کد بنویسید که به نظرم ارزششو نداره و خیلی پیچیده میشه

  • امیر ۲۷ خرداد ۱۴۰۱ / ۵:۱۸ ب٫ظ

    با سلام
    آیا می شود در ستون های اکسل کاری کرد که از space اضافی جلوگیری کرد یعنی بیش از یک space را نشود وارد کرد.

    • سامان چراغی ۲۸ خرداد ۱۴۰۱ / ۹:۵۲ ق٫ظ

      سلام
      در data validation این فرمول رو بنویسید:
      ۱=>LEN(A1)-LEN(SUBSTITUTE(A1,” “,””))

  • آواتار
    amir ۲۷ خرداد ۱۴۰۱ / ۵:۱۵ ب٫ظ

    با سلام و احترام
    در تابع vlookup یکی از آرگومان های آن این است که columun index number را مشخص کرد یعنی بگوییم که در ستون چندم جستجو شود اگر که جدول ما خیلی طولانی بود و ستون های زیادی داشت آیا راهی وجود دارد که مثلا شمارش کردن ستون ۲۰ بود خوب با شمارش دست در ستون ۲۰ خیلی سخت است آیا می شود کاری کرد که در جدول که حاوی ستون های زیادی است در این آرگامون که ستون چندم است کاری کرد که شماره ستون بدون شمارش دست مشخص شود؟ شماره ستون بدون شمارش مشخص شود
    با تشکـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــر

    • آواتار
      حسنا خاکزاد ۲۸ خرداد ۱۴۰۱ / ۱۰:۴۷ ق٫ظ

      درود بر شما
      بله دقیقا
      خیلی راحت با match میتونید این کار و انجام بددی
      نمونه مقاله استفاده شده با match زیاد داریم داخل سایت

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

توسط
تومان