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 اطلاعات بیشتری کسب کنید.با همین روش میتونیم اطلاعات مربوط به هر یک از محصولات رو فراخوانی کنیم.جستجو بین دو فایل (Workbook)
در جستجو بین دو فایل، مثل حالت بین دو شیت عمل میکنیم. در این حالت نام فایل هم به ادامه اسم شیت اضافه میشه. اسم فایل داخل براکت و بعد اسم شیت و بعد محدوده مورد نظر. یعنی:=VLOOKUP(A2, [فروش.xlsx]اردیبهشت!$A$۲:$B$۶, ۲, FALSE)
Vlookup بین چند شیت با Iferror
وقتی تعداد شیت ها کم هست این روش مناسب هست و براحتی میتونیم ازش استفاده کنیم. منطق این روش به این صورت هست که به تعداد شیت ها، باید Vlookup بنویسیم. به این صورت که اگر Vlookup اولی با خطا مواجه شد، در یک شیت دیگه Vlookup انجام بشه. ساختار کلی فرمول به شرح زیر خواهد بود:=IFERROR(VLOOKUP(…), IFERROR(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 (A2, INDIRECT (“‘محصول ۱’!A2:B7”),۲, FALSE)
فراموش نکنید که این فرمول آرایه ای هست و باید با Ctrl+shift+Enter ثبت بشه.در ویدئو زیر نحوه محاسبه فرمول رو مشاهده میکنید:





سلام
ممنونم از وبسایت خوب و عالیتون
من یک فایل اکسل دارم که از یک شیت “کلی “و تعدادی شیت مشتریان (مثلا از ۱ تا ۲۰) تشکسل شده ، من میخوام زمانی که یک حساب رو در شیت کلی وارد می کنم و جلوی اون ردیف مثلا مینویسم مربوط به حساب مشتری ۵ هست اتومات اون ردیف کپی بشه تو اخرین ردیف حساب فرد شماره ۵ و دیگه مجبور نشم دونه دونه حسابها رو مجدد کپی کنم تو حساب شخصی نفرات
چند تا از اموزشهای خوبتون در مورد vlookup & indirect و … رو مطالعه کردم ولی نتونستم چیزی باهاشون درست کنم
میشه راهنمایی بفرمایید از چه فرمولی استفاده کنم؟
درود بر شما
جواب سوالتون همون vlookup میشه
باید دقیق اجرا کنید
برای جزییات میتونید داخل گروه اکسل پدیا مطرح کنید دوستانی هستن کمکتون کنن
با سلام یه لیست آمادگی جسمانی دارم که از جندین آیتم مثل بارفیکش ؛ شنا سوئدی ؛ پرش و .. در جندین گروه سنی امتحان گرفته میشه و برای هر گروه سنی نیز برای هر حرکت امتیاز خاصی در نظر گرفته میشه با عنایت به اینکه هر گروه جدول مخصوص به خود دارد و از A تا H نام گداری شده اند میخوام وقتی در سلولی به عنوان مثال با شرایط تعریف شده H میاد از جدول مخصوص خود برای هریک از آیتم های گفته شده برای پرش ۲ متر امتیازی که در نظر گرفته شده مثلا ۱۰۰ را بیاورد عاجزانه خواهش میکنم راهنمایی کنید هر چه گشتم و فرمولهای IF و VLOOKUP ;V کردم نتونستم به جواب برسم ایمیل هم که ندارید فایل را بفرستم اینجا هم برای ارسال موردی پیدا نکردم
درود بر شما
ی مقدار باید به فرمول نویسی مسلط باشید
با ترکیب نامگذاری و indirect و توابع جستجو میشه اینکار و کرد
واقعیت اینه که ما اینجا هدفمون اموزشه و کار رو مستقیم انجام نمیدیم. یعنی نمیرسیم که بخوایم بکنیم این کار و
برای موارد بالا هم آموزش هایی رو گذاشتیم داخل سایت، شروع کنی به مطالعه و سع ی کنید حل کنید
گروه تلگرامی هم دوستانی هستن که کمک میکنن بتونید انجام بدید. شاید انجام هم بدن البته
لینک در فوتر سایت هست
د
با سلام و عرض ادب
من میخواستم اعداد غیر تکراری در ستونa شیت یک را با مقادیر یکسان در یکی از ستون های شیت ۲ لینک کنم. به طوری که مثلاً روی عدد ۱۲۳ در شیت یک کلیک میکنیم با همون عدد (۱۲۳)در ستون مشخص شیت ۲ لینک باشه.لطف میکنید راهنمایی بفرمایید.
درود بر شما
از ترکیب توابع جستجو و تابع hyperlink استفاده کنید
مقاله تابع هایپرلینک
https://excelpedia.net/hyperlink/
سلام. من ۲ شیت دارم .
در شیت اول و دوم کد کالا دارم ولی از نظر تعداد و ترتیب با هم یکسان نیستند و امکان تناظر گیری نیست . ولی در دو شیت کد کالا مشابه وجود داره.
چطوری میتونم مشخص کنم نوع کالا از شیت دوم در کنار کد کالا در شیت اول قرار بگیره ؟
درود بر شما
این مقاله رو بخونید ببینی کمکی میکنه؟
https://excelpedia.net/compare-lists/
سلام
چطور می تونیم کدملی ها رو براساس ۳ رقم اولشون که هرعددی باشه فیلتر کنیم و خروجی بگیریم.
ممنون
درود
کد ملی غالبا داده متنیه
پس میتونید filter از الگوی text filter/ begin with استفاده کنید
باسلام
من لیست خروجی محصولات چوبی دارم مثل:هایگلاس و ملامینه
و تب هایی مثل:اسم خریدار .راننده.سریال فرم و تعداد پالت هست
میخاسم ببینم میشه کاری کرد مثلا طی ۶ماه ببینیم فروش ملامینه و هایگلاس چقدر بوده (به حالت نمودار رنج نشون بده)یا کدوم مشتری چندبار خرید انجام داده طی این ۶ ماه
ممنون
درود بر شما
یکی از کارکردهای اصلی کسل گزارشگیری است
به بهترین نحو متیونید اینو انجام بدید
دیتا رو درست وارد کنید و برای شروع گزارشگیری از pivottable استفاده کنید
سلام خسته نباشید
تو قسمت خرید کار میکنم و هر سری قیمت محصولات تغییر میکنه
میخوام قیمت خرید – تولد و مصرف هر بار رو راحت تر کنترل کنم.
تو اکسلی که استفاده میکنم بدلیل ارسال بارهای جور واجور و کم یا اضافه شدن ردیف نمیشه با = تو دو شیت یا اکسل متفاوت این کار رو انجام داد ( برای مثال ممکنه رب تو اکسلی که امروز درست میکنم ردیف ۱ باشه و تو سفارش بعدی اصلا وجود نداشته باشه که داخل اکسل بیاد و یا ردیف هر دو بار تو اکسل ها متفاوت باشه). برای هر محصول کد در نظر گرفتم . میخوام ببینم میشه تو اکسل در اصطلاح مادر بر اساس کد کالا قیمت های قدیم رو بیارم تو سلول مورد نظرم؟
درود بر شما
بله حتما میتونید
باید ی مقدار با توابع جستجو و ابزارهای گزارشگیری آشنا باشید
خیلی راحت میتونید انجام بدید
من چندین شیت دارم که هرماه افرادی بازرسی میشوند و براساس بازرسی تایید یا عدم تایید و یا نامشخص ثبت میشوند میخواهم بر اساس کد ملی تعداد تایید شده و عدم تایید مشخص شود باید چکار کنم
درود بر شما
تابع Countifs که یک شرط کدملی است و یک شرط “تایید”/”عدم تایید”
https://excelpedia.net/countifs-function/
سلام جناب چراغی خسته نباشید
فرمودید :بله امکان انجام این کار هست. کافیه آخرین کد کالا درون فاکتور رو با ترکیب Index و Counta بدست بیارید و اگر دیتابیسی جهت ثبت ورود و خروج اون کالا دارید، با Sumifs برآیند ورود و خروج اون کالا رو بدست بیارید.
منظورتون از آخرین کد کالا درون فاکتور چیه؟برآیند ورود و خروج؟!
اگه امکان داره با مثال توضیح بدین بینهایت ممنون میشم
سپاسگزارم
درود
طبق توضیحات خودتون در هر فاکتور چند کالا وارد شده که زیر هم قرار گرفته و شما میخواید موجودی آخرین کالایی که وارد شده رو در فاکتور ببینید.
حالا کافیه با استفاده از ترکیب Counta و Index این کد کالا رو بدست بیارید. مرحله بعدی باید موجودی اون رو حساب کنید که باید هر چقدر خروجی برای این محصول ثبت شده از میزان ورودی های اون کسر بشه که منطقا باید یک دیتابیس براش تعریف شده باشه. تا اینجا شما کد کالای مورد نظر رو دارید و یک دیتابیس جهت ورود و خروج کالاها، با یک Sumifs برآیند این ورود و خروج برای کالای مورد نظر رو بدست میارید که میشه موجودی مانده اون کالا
باسلام
چطور میشه همین جستجو رو در دوتا workbook مجزا انجام داد؟ یعنی شیت های حاوی اطلاعات در فایل جداگانه باشه!
درود
ما هم فایل جداگانه رو دز این مقاله توضیح دادیم
منظور اینه دیتابیس جستجو در دو شیته هست؟
اگر اینه، باید اول ترکیب بشه و یکی از بهترین راه ها پاور کوئری و امکانات append/ merge هست