VLOOKUP ในหลายชีตใน Excel พร้อมตัวอย่าง

  • แบ่งปันสิ่งนี้
Michael Brown

บทช่วยสอนแสดงวิธีใช้ฟังก์ชัน VLOOKUP เพื่อคัดลอกข้อมูลจากแผ่นงานหรือสมุดงานอื่น Vlookup ในแผ่นงานหลายแผ่น และค้นหาแบบไดนามิกเพื่อส่งกลับค่าจากแผ่นงานต่างๆ ไปยังเซลล์ต่างๆ

เมื่อค้นหาข้อมูลบางอย่างใน Excel จะพบได้ยากเมื่อข้อมูลทั้งหมดอยู่ในแผ่นงานเดียวกัน บ่อยครั้งที่คุณจะต้องค้นหาในแผ่นงานหลายแผ่นหรือแม้แต่สมุดงานที่แตกต่างกัน ข่าวดีก็คือ Microsoft Excel มีวิธีในการทำเช่นนี้มากกว่าหนึ่งวิธี และข่าวร้ายก็คือทุกวิธีนั้นซับซ้อนกว่าสูตร VLOOKUP มาตรฐานเล็กน้อย แต่ด้วยความอดทนเพียงเล็กน้อย เราจะเข้าใจมัน :)

    วิธี VLOOKUP ระหว่างสองชีต

    สำหรับผู้เริ่มต้น เรามาตรวจสอบกรณีที่ง่ายที่สุด - การใช้ VLOOKUP เพื่อ คัดลอกข้อมูลจากแผ่นงานอื่น คล้ายกับสูตร VLOOKUP ทั่วไปที่ค้นหาในแผ่นงานเดียวกัน ข้อแตกต่างคือคุณต้องใส่ชื่อชีตในอาร์กิวเมนต์ table_array เพื่อบอกสูตรของคุณว่าช่วงการค้นหาอยู่ในเวิร์กชีตใด

    สูตรทั่วไปสำหรับ VLOOKUP จากชีตอื่นมีดังนี้:

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

    ตามตัวอย่าง ลองดึงยอดขายจากรายงาน ม.ค. ไปยัง สรุป แผ่น สำหรับสิ่งนี้ เรากำหนดอาร์กิวเมนต์ต่อไปนี้:

    • Lookup_values อยู่ในคอลัมน์ A บนแผ่นงาน สรุป และเราVLOOKUP:

      VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)

      สุดท้าย สูตร VLOOKUP มาตรฐานนี้จะค้นหาค่า A2 ในคอลัมน์แรกของช่วง A2:C6 ในชีต ตะวันตก และส่งกลับ จับคู่จากคอลัมน์ที่ 2 แค่นั้นแหละ!

      VLOOKUP แบบไดนามิกเพื่อส่งคืนข้อมูลจากหลายชีตไปยังเซลล์ต่างๆ

      ก่อนอื่น เรามานิยามความหมายของคำว่า "ไดนามิก" ในบริบทนี้ และสูตรนี้จะเป็นอย่างไร แตกต่างจากอันก่อนหน้า

      ในกรณีที่คุณมีข้อมูลจำนวนมากในรูปแบบเดียวกันที่แยกออกเป็นหลายสเปรดชีต คุณอาจต้องการแยกข้อมูลจากชีตต่างๆ ลงในเซลล์ต่างๆ ภาพด้านล่างแสดงแนวคิด:

      ไม่เหมือนกับสูตรก่อนหน้านี้ที่ดึงค่าจากแผ่นงานเฉพาะตามตัวระบุที่ไม่ซ้ำกัน ครั้งนี้เราต้องการแยกค่าจากแผ่นงานหลายแผ่นที่ เวลา

      มีสองวิธีแก้ปัญหาที่แตกต่างกันสำหรับงานนี้ ในทั้งสองกรณี คุณต้องทำงานเตรียมการเล็กน้อยและสร้างช่วงที่มีชื่อสำหรับเซลล์ข้อมูลในแผ่นงานการค้นหาแต่ละแผ่น สำหรับตัวอย่างนี้ เรากำหนดช่วงต่อไปนี้:

      • East_Sales - A2:B6 ในแผ่นงาน East
      • North_Sales - A2: B6 บนแผ่นเหนือ
      • South_Sales - A2:B6 บนแผ่นใต้
      • West_Sales - A2:B6 บนแผ่นงานตะวันตก

      VLOOKUP และ IF ที่ซ้อนกัน

      หากคุณมีจำนวนแผ่นงานที่เหมาะสมในการค้นหา คุณสามารถใช้ฟังก์ชัน IF ที่ซ้อนกันได้เพื่อเลือกแผ่นงานตามคีย์เวิร์ดในเซลล์ที่กำหนดไว้ล่วงหน้า (เซลล์ B1 ถึง D1 ในกรณีของเรา)

      ด้วยค่าการค้นหาใน A2 สูตรจะเป็นดังนี้:

      =VLOOKUP($A2, IF(B$1="east", East_Sales, IF(B$1="north", North_Sales, IF(B$1="south", South_Sales, IF(B$1="west", West_Sales)))), 2, FALSE)

      แปลเป็นภาษาอังกฤษ ส่วน IF อ่านว่า:

      หาก B1 คือ ตะวันออก ให้ดูในช่วงชื่อ East_Sales ; ถ้า B1 คือ ทิศเหนือ ให้ดูในช่วงชื่อ North_Sales ถ้า B1 คือ ใต้ ให้ดูในช่วงชื่อ South_Sales และถ้า B1 เป็น ตะวันตก ให้ดูในช่วงชื่อ West_Sales .

      ช่วงที่ส่งคืนโดย IF จะไปที่ table_array ของ VLOOKUP ซึ่งจะดึง ค่าที่ตรงกันจากคอลัมน์ที่ 2 ในแผ่นงานที่เกี่ยวข้อง

      การใช้การอ้างอิงแบบผสมอย่างชาญฉลาดสำหรับค่าการค้นหา ($A2 - คอลัมน์สัมบูรณ์และแถวสัมพัทธ์) และการทดสอบเชิงตรรกะของ IF (B$1 - คอลัมน์สัมพัทธ์ และแถวสัมบูรณ์) อนุญาตให้คัดลอกสูตรไปยังเซลล์อื่นโดยไม่มีการเปลี่ยนแปลง - Excel จะปรับการอ้างอิงโดยอัตโนมัติตามตำแหน่งสัมพัทธ์ของแถวและคอลัมน์

      ดังนั้นเราจึงป้อนสูตรใน B2 คัดลอกไปทางขวาและ ลงในคอลัมน์และแถวได้มากเท่าที่ต้องการ และรับผลลัพธ์ต่อไปนี้:

      INDIRECT VLOOKUP

      เมื่อทำงานกับชีตจำนวนมาก ระดับที่ซ้อนกันหลายระดับอาจทำให้สูตรได้เช่นกัน ยาวและอ่านยาก วิธีที่ดีกว่ามากคือการสร้าง ช่วง vlookup แบบไดนามิก โดยใช้ INDIRECT:

      =VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)

      ที่นี่ เราเชื่อมโยงการอ้างอิงไปยังเซลล์ที่มีส่วนที่ไม่ซ้ำของช่วงที่มีชื่อ (B1) และส่วนทั่วไป (_Sales) สิ่งนี้สร้างสตริงข้อความเช่น "East_Sales" ซึ่ง INDIRECT แปลงเป็นชื่อช่วงที่ Excel เข้าใจได้

      ด้วยเหตุนี้ คุณจะได้สูตรที่กระชับซึ่งใช้งานได้อย่างสวยงามบนแผ่นงานจำนวนเท่าใดก็ได้:

      นั่นคือวิธีการ Vlookup ระหว่างชีตและไฟล์ใน Excel ฉันขอขอบคุณที่อ่านและหวังว่าจะได้พบคุณในบล็อกของเราในสัปดาห์หน้า!

      สมุดฝึกหัดสำหรับการดาวน์โหลด

      ตัวอย่าง Vlookup หลายชีต (ไฟล์ .xlsx)

      อ้างถึงเซลล์ข้อมูลแรก ซึ่งก็คือ A2
    • Table_array คือช่วง A2:B6 ในแผ่นงาน Jan เมื่อต้องการอ้างถึง ให้ใส่ชื่อแผ่นงานนำหน้าการอ้างอิงช่วงด้วยเครื่องหมายอัศเจรีย์: Jan!$A$2:$B$6

      โปรดทราบว่าเราล็อกช่วงด้วยการอ้างอิงเซลล์แบบสัมบูรณ์เพื่อป้องกันไม่ให้เปลี่ยนแปลงเมื่อคัดลอกสูตรไปยังเซลล์อื่น

      Col_index_num เป็น 2 เนื่องจากเราต้องการคัดลอกค่า จากคอลัมน์ B ซึ่งเป็นคอลัมน์ที่ 2 ในอาร์เรย์ของตาราง

    • Range_lookup ถูกตั้งค่าเป็น FALSE เพื่อค้นหาค่าที่ตรงกันทั้งหมด

    เมื่อนำอาร์กิวเมนต์มารวมกัน เราจะได้สูตรนี้:

    =VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)

    ลากสูตรลงในคอลัมน์ แล้วคุณจะได้ผลลัพธ์นี้:

    ใน ในทำนองเดียวกัน คุณสามารถใช้ข้อมูล Vlookup จากชีต ก.พ. และ มี.ค. :

    =VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)

    =VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)

    เคล็ดลับและหมายเหตุ:

    • หากชื่อแผ่นงานมี ช่องว่าง หรือ อักขระที่ไม่ใช่ตัวอักษร จะต้องอยู่ในเครื่องหมายอัญประกาศเดี่ยว เช่น 'ยอดขายเดือน ม.ค.'!$A$2:$B$6 . สำหรับข้อมูลเพิ่มเติม โปรดดูวิธีอ้างอิงแผ่นงานอื่นใน Excel
    • แทนที่จะพิมพ์ชื่อแผ่นงานโดยตรงในสูตร คุณสามารถเปลี่ยนไปใช้แผ่นงานค้นหาและเลือกช่วงที่นั่นได้ Excel จะแทรกการอ้างอิงด้วยไวยากรณ์ที่ถูกต้องโดยอัตโนมัติ ช่วยให้คุณไม่ต้องยุ่งยากในการตรวจสอบชื่อและแก้ปัญหา

    Vlookup จากสมุดงานอื่น

    ถึง VLOOKUP ระหว่างสองรายการสมุดงาน ใส่ชื่อไฟล์ในวงเล็บเหลี่ยม ตามด้วยชื่อแผ่นงานและเครื่องหมายอัศเจรีย์

    ตัวอย่างเช่น หากต้องการค้นหาค่า A2 ในช่วง A2:B6 ใน ม.ค. แผ่นงานใน สมุดงาน Sales_reports.xlsx ใช้สูตรนี้:

    =VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)

    สำหรับรายละเอียดทั้งหมด โปรดดู VLOOKUP จากสมุดงานอื่นใน Excel

    Vlookup ทั่ว แผ่นงานหลายแผ่นที่มี IFERROR

    เมื่อคุณต้องการค้นหาระหว่างแผ่นงานมากกว่าสองแผ่น วิธีแก้ปัญหาที่ง่ายที่สุดคือการใช้ VLOOKUP ร่วมกับ IFERROR แนวคิดคือการซ้อนฟังก์ชัน IFERROR หลายๆ ฟังก์ชันเพื่อตรวจสอบแผ่นงานหลายแผ่นทีละแผ่น: หาก VLOOKUP แรกไม่พบข้อมูลที่ตรงกันในแผ่นงานแรก ให้ค้นหาในแผ่นงานถัดไป และอื่นๆ

    IFERROR(VLOOKUP(...) IFERROR(VLOOKUP(…), …, " ไม่พบ "))

    หากต้องการดูว่าวิธีการนี้ทำงานอย่างไรกับข้อมูลในชีวิตจริง ลองพิจารณาตัวอย่างต่อไปนี้ ด้านล่างคือตาราง สรุป ที่เราต้องการเติมชื่อรายการและจำนวนโดยค้นหาหมายเลขคำสั่งซื้อในแผ่นงาน ตะวันตก และ ตะวันออก :

    ก่อนอื่น เราจะดึงไอเทม สำหรับสิ่งนี้ เราสั่งให้สูตร VLOOKUP ค้นหาหมายเลขคำสั่งซื้อใน A2 บนแผ่นงาน ตะวันออก และส่งกลับค่าจากคอลัมน์ B (คอลัมน์ที่ 2 ใน table_array A2:C6) หากไม่พบข้อมูลที่ตรงกัน ให้ค้นหาในชีต ตะวันตก หากทั้งสอง Vlookups ล้มเหลว ให้ส่งคืน "ไม่พบ"

    =IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))

    หากต้องการส่งคืนจำนวนเงินเพียงเปลี่ยนหมายเลขดัชนีคอลัมน์เป็น 3:

    =IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))

    เคล็ดลับ หากจำเป็น คุณสามารถระบุอาร์เรย์ของตารางที่แตกต่างกันสำหรับฟังก์ชัน VLOOKUP ต่างๆ ในตัวอย่างนี้ แผ่นงานการค้นหาทั้งสองมีจำนวนแถวเท่ากัน (A2:C6) แต่แผ่นงานของคุณอาจมีขนาดต่างกัน

    Vlookup ในสมุดงานหลายเล่ม

    หากต้องการ Vlookup ระหว่างสมุดงานสองเล่มขึ้นไป ให้ใส่ชื่อสมุดงานในวงเล็บเหลี่ยมและวางไว้หน้าชื่อแผ่นงาน ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถใช้ Vlookup ใน ไฟล์ที่แตกต่างกันสองไฟล์ ( Book1 และ Book2 ) ด้วยสูตรเดียว:

    =IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE),"Not found"))

    ทำให้หมายเลขดัชนีคอลัมน์เป็นไดนามิกสำหรับ Vlookup หลายคอลัมน์

    ในสถานการณ์ที่คุณต้องส่งคืนข้อมูลจากหลายคอลัมน์ การทำให้ col_index_num ไดนามิกสามารถช่วยคุณประหยัดเวลาได้ มีการปรับเปลี่ยนสองสามอย่างที่ต้องทำ:

    • สำหรับอาร์กิวเมนต์ col_index_num ให้ใช้ฟังก์ชัน COLUMNS ที่ส่งคืนจำนวนคอลัมน์ในอาร์เรย์ที่ระบุ: COLUMNS($A$1 : 1 เหรียญ) (พิกัดของแถวไม่สำคัญ แต่สามารถเป็นแถวใดก็ได้)
    • ในอาร์กิวเมนต์ lookup_value ให้ล็อกการอ้างอิงคอลัมน์ด้วยเครื่องหมาย $ ($A2) เพื่อให้ยังคงอยู่ แก้ไขเมื่อคัดลอกสูตรไปยังคอลัมน์อื่น

    ด้วยเหตุนี้ คุณจะได้รับสูตรไดนามิกชนิดหนึ่งที่แยกค่าที่ตรงกันจากคอลัมน์ต่างๆ ขึ้นอยู่กับคอลัมน์ที่คัดลอกสูตรไปที่:

    =IFERROR(VLOOKUP($A2, East!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, West!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), "Not found"))

    เมื่อป้อนในคอลัมน์ B COLUMNS($A$1:B$1)ประเมินเป็น 2 บอกให้ VLOOKUP คืนค่าจากคอลัมน์ที่ 2 ในอาร์เรย์ของตาราง

    เมื่อคัดลอกไปยังคอลัมน์ C (เช่น คุณลากสูตรจาก B2 ไปยัง C2) B$1 จะเปลี่ยนเป็น C$1 เนื่องจาก การอ้างอิงคอลัมน์เป็นแบบสัมพัทธ์ ดังนั้น COLUMNS($A$1:C$1) จะประเมินเป็น 3 บังคับให้ VLOOKUP ส่งกลับค่าจากคอลัมน์ที่ 3

    สูตรนี้ใช้ได้ดีกับแผ่นงานการค้นหา 2 - 3 แผ่น หากคุณมีมากกว่านี้ IFERROR ซ้ำๆ จะยุ่งยากเกินไป ตัวอย่างต่อไปแสดงให้เห็นถึงวิธีการที่ซับซ้อนขึ้นเล็กน้อยแต่มีความสวยงามมากขึ้น

    Vlookup หลายแผ่นงานด้วย INDIRECT

    อีกวิธีหนึ่งในการ Vlookup ระหว่างแผ่นงานหลายแผ่นใน Excel คือการใช้ VLOOKUP ร่วมกับ ฟังก์ชันทางอ้อม วิธีนี้ต้องมีการเตรียมการเล็กน้อย แต่ท้ายที่สุด คุณจะมีสูตรที่กระชับมากขึ้นสำหรับ Vlookup ในสเปรดชีตจำนวนเท่าใดก็ได้

    สูตรทั่วไปสำหรับ Vlookup ในชีตต่างๆ มีดังนี้:

    VLOOKUP( lookup_value , INDIRECT("'"&INDEX( Lookup_sheets , MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & " '! lookup_range "), lookup_value )>0), 0)) & "'! table_array "), col_index_num , FALSE)

    ที่ไหน:

    • Lookup_sheets - ช่วงที่ตั้งชื่อซึ่งประกอบด้วยชื่อแผ่นงานการค้นหา
    • Lookup_value - the ค่าที่จะค้นหา
    • Lookup_range - ช่วงของคอลัมน์ในแผ่นงานการค้นหาที่จะค้นหาการค้นหาค่า
    • Table_array - ช่วงข้อมูลในแผ่นการค้นหา
    • Col_index_num - จำนวนคอลัมน์ในอาร์เรย์ของตารางที่จะ คืนค่า

    เพื่อให้สูตรทำงานได้อย่างถูกต้อง โปรดคำนึงถึงคำเตือนต่อไปนี้:

    • สูตรนี้เป็นสูตรอาร์เรย์ ซึ่งต้องทำให้เสร็จโดยการกด Ctrl + ปุ่ม Shift + Enter พร้อมกัน
    • แผ่นงานทั้งหมดต้องมี ลำดับคอลัมน์เดียวกัน .
    • เนื่องจากเราใช้อาร์เรย์ตารางเดียวสำหรับแผ่นงานการค้นหาทั้งหมด ให้ระบุ ช่วงที่กว้างที่สุด ถ้าแผ่นงานของคุณมีจำนวนแถวต่างกัน

    วิธีใช้สูตรเพื่อ Vlookup ข้ามแผ่นงาน

    หากต้องการ Vlookup หลายแผ่นพร้อมกัน ให้ทำดังนี้ ขั้นตอน:

    1. จดชื่อแผ่นงานการค้นหาทั้งหมดไว้ในสมุดงานของคุณและตั้งชื่อช่วงนั้น ( Lookup_sheets ในกรณีของเรา)

  • ปรับสูตรทั่วไปสำหรับข้อมูลของคุณ ในตัวอย่างนี้ เราจะ:
    • ค้นหาค่า A2 ( lookup_value )
    • ในช่วง A2:A6 ( lookup_range ) ใน สี่เวิร์กชีต ( ตะวันออก , เหนือ , ใต้ และ ตะวันตก ) และ
    • ดึงค่าที่ตรงกันจากคอลัมน์ B ซึ่งก็คือคอลัมน์ 2 ( col_index_num ) ในช่วงข้อมูล A2:C6 ( table_array )

    ด้วยอาร์กิวเมนต์ข้างต้น สูตรจะใช้รูปแบบนี้:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)

    โปรดทราบว่าเราล็อคทั้งสองช่วง ($A$2:$A$6 และ $A$2:$C$6) ด้วยการอ้างอิงเซลล์แบบสัมบูรณ์

  • ป้อน สูตรในเซลล์บนสุด (B2 ในตัวอย่างนี้) แล้วกด Ctrl + Shift + Enter เพื่อทำให้เสร็จ
  • ดับเบิลคลิกหรือลากที่จับเติมเพื่อคัดลอกสูตรลงในคอลัมน์
  • ในขณะที่ ผลลัพธ์คือเราได้สูตรสำหรับค้นหาหมายเลขคำสั่งซื้อใน 4 แผ่นและดึงรายการที่สอดคล้องกัน หากไม่พบหมายเลขคำสั่งซื้อที่ระบุ ข้อผิดพลาด #N/A จะแสดงเหมือนในแถวที่ 14:

    หากต้องการคืนจำนวน ให้แทนที่ 2 ด้วย 3 ใน col_index_num อาร์กิวเมนต์เป็นจำนวนอยู่ในคอลัมน์ที่ 3 ของอาร์เรย์ตาราง:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE)

    หากคุณต้องการแทนที่เครื่องหมายข้อผิดพลาดมาตรฐาน #N/A ด้วยข้อความของคุณเอง ให้ตัด สูตรลงในฟังก์ชัน IFNA:

    =IFNA(VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE), "Not found")

    Vlookup หลายแผ่นระหว่างสมุดงาน

    สูตรทั่วไปนี้ (หรือรูปแบบอื่นๆ) ยังสามารถใช้ได้ ไปที่ Vlookup หลายแผ่นใน สมุดงานอื่น สำหรับสิ่งนี้ ให้ต่อชื่อสมุดงานภายใน INDIRECT ตามที่แสดงในสูตรด้านล่าง:

    =IFNA(VLOOKUP($A2, INDIRECT("'[Book1.xlsx]" & INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'[Book1.xlsx]" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 2, FALSE), "Not found")

    Vlookup ระหว่างชีตและส่งคืนหลายคอลัมน์

    หากคุณต้องการดึงข้อมูลจากหลายๆ คอลัมน์ สูตรอาร์เรย์หลายเซลล์ สามารถทำได้ในครั้งเดียว ในการสร้างสูตรดังกล่าว ให้ใส่ค่าคงที่ของอาร์เรย์สำหรับอาร์กิวเมนต์ col_index_num

    ในตัวอย่างนี้ เราต้องการส่งคืนชื่อรายการ (คอลัมน์ B) และจำนวน (คอลัมน์ C) ซึ่ง เป็นคอลัมน์ที่ 2 และ 3 ในอาร์เรย์ของตารางตามลำดับ ดังนั้นอาร์เรย์ที่ต้องการคือ{2,3}.

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets &"'!$A$2:$C$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), {2,3}, FALSE)

    ในการป้อนสูตรอย่างถูกต้องในหลายเซลล์ คุณต้องทำดังนี้:

    • ในแถวแรก เลือกเซลล์ทั้งหมดที่จะเติมข้อมูล (B2:C2 ในตัวอย่างของเรา)
    • พิมพ์สูตรแล้วกด Ctrl + Shift + Enter ซึ่งจะป้อนสูตรเดียวกันในเซลล์ที่เลือก ซึ่งจะส่งคืนค่าที่แตกต่างกันในแต่ละคอลัมน์
    • ลากสูตรลงไปยังแถวที่เหลือ

    สูตรนี้ทำงานอย่างไร

    เพื่อให้เข้าใจตรรกะได้ดีขึ้น เรามาแจกแจงสูตรพื้นฐานนี้เป็นฟังก์ชันแต่ละฟังก์ชันกัน:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)

    ทำงานจากภายในสู่ภายนอก นี่คือสิ่งที่สูตรทำ:

    COUNTIF และ INDIRECT

    โดยสรุป INDIRECT จะสร้างการอ้างอิงสำหรับแผ่นงานการค้นหาทั้งหมด และ COUNTIF จะนับการเกิดขึ้นของการค้นหา ค่า (A2) ในแต่ละชีต:

    --(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)

    รายละเอียดเพิ่มเติม:

    ก่อนอื่น ให้คุณต่อชื่อช่วง (Lookup_sheets) และการอ้างอิงช่วง ($A$2: $A$6) เพิ่มเครื่องหมายอัญประกาศเดี่ยวและเครื่องหมายอัศเจรีย์ในตำแหน่งที่เหมาะสมเพื่อทำการอ้างอิงภายนอก และป้อนสตริงข้อความผลลัพธ์ไปยังฟังก์ชัน INDIRECT เพื่ออ้างอิงถึงแผ่นงานการค้นหาแบบไดนามิก:

    INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})

    COUNTIF ตรวจสอบแต่ละเซลล์ในช่วง A2:A6 บนแต่ละแผ่นการค้นหาเทียบกับค่าใน A2 บนหลัก แผ่นงานและส่งกลับจำนวนการแข่งขันสำหรับแต่ละแผ่น ในชุดข้อมูลของเรา หมายเลขคำสั่งซื้อใน A2 (101) อยู่ในชีต ตะวันตก ซึ่งเป็นลำดับที่ 4 ในช่วงที่ตั้งชื่อ ดังนั้น COUNTIF จึงส่งคืนอาร์เรย์นี้:

    {0;0;0;1}

    ถัดไป คุณเปรียบเทียบแต่ละองค์ประกอบของอาร์เรย์ด้านบนกับ 0:

    --({0; 0; 0; 1}>0)

    ซึ่งให้ผลลัพธ์ อาร์เรย์ของค่า TRUE (มากกว่า 0) และ FALSE (เท่ากับ 0) ซึ่งคุณบังคับค่า 1 และ 0 โดยใช้ double unary (--) และได้รับอาร์เรย์ต่อไปนี้เป็นผลลัพธ์:

    {0; 0; 0; 1}

    การดำเนินการนี้เป็นข้อควรระวังเพิ่มเติมในการจัดการกับสถานการณ์เมื่อแผ่นงานการค้นหามีค่าการค้นหาเกิดขึ้นหลายครั้ง ซึ่งในกรณีนี้ COUNTIF จะส่งกลับจำนวนที่มากกว่า 1 ในขณะที่เราต้องการเพียง 1 และ 0 เท่านั้นใน อาร์เรย์สุดท้าย (อีกสักครู่ คุณจะเข้าใจว่าเหตุใด)

    หลังจากการแปลงทั้งหมดนี้ สูตรของเรามีลักษณะดังนี้:

    VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)

    INDEX และ MATCH

    ณ จุดนี้ ชุดค่าผสม INDEX MATCH แบบคลาสสิกจะเข้าสู่:

    INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))

    ฟังก์ชัน MATCH ที่กำหนดค่าสำหรับการจับคู่แบบตรงทั้งหมด (0 ในอาร์กิวเมนต์สุดท้าย) ค้นหาค่า 1 ในอาร์เรย์ { 0;0;0;1} และส่งกลับตำแหน่ง ซึ่งก็คือ 4:

    INDEX(Lookup_sheets, 4)

    ฟังก์ชัน INDEX จะใช้ตัวเลขที่ส่งกลับ โดย MATCH เป็นอาร์กิวเมนต์หมายเลขแถว (row_num) และส่งกลับค่าที่ 4 ในช่วงที่มีชื่อ Lookup_sheets ซึ่งก็คือ ทิศตะวันตก .

    ดังนั้น สูตรจะลดขนาดลงไปอีก เป็น:

    VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)

    VLOOKUP และ INDIRECT

    ฟังก์ชัน INDIRECT ประมวลผลสตริงข้อความที่อยู่ภายใน:

    INDIRECT("'"&"West"&"'!$A$2:$C$6")

    และแปลง เป็นการอ้างอิงที่ไปยังอาร์กิวเมนต์ table_array ของ

    Michael Brown เป็นผู้ที่ชื่นชอบเทคโนโลยีโดยเฉพาะและมีความหลงใหลในการทำให้กระบวนการที่ซับซ้อนง่ายขึ้นโดยใช้เครื่องมือซอฟต์แวร์ ด้วยประสบการณ์กว่าทศวรรษในอุตสาหกรรมเทคโนโลยี เขาได้ฝึกฝนทักษะของเขาใน Microsoft Excel และ Outlook รวมถึง Google ชีตและเอกสาร บล็อกของ Michael ทุ่มเทให้กับการแบ่งปันความรู้และความเชี่ยวชาญของเขากับผู้อื่น โดยให้คำแนะนำและแบบฝึกหัดที่ทำตามได้ง่ายเพื่อปรับปรุงผลิตภาพและประสิทธิภาพ ไม่ว่าคุณจะเป็นมืออาชีพที่ช่ำชองหรือมือใหม่ บล็อกของ Michael นำเสนอข้อมูลเชิงลึกอันมีค่าและคำแนะนำที่เป็นประโยชน์สำหรับการใช้ประโยชน์สูงสุดจากเครื่องมือซอฟต์แวร์ที่จำเป็นเหล่านี้