Excel VLOOKUP 2 คอลัมน์


1

ฉันมีปัญหากับฟังก์ชั่น VLOOKUP นี่คือแผ่นงานของฉัน:

sheet1

id_1  id_2 count
28273 15   5
31866 19   4
2827  315  5
...

sheet2

id_1  id_2 count
2827  315  155
141   1064 555
...

โดยทั่วไปฉันต้องการที่จะเพิ่มcountจากแถวที่เกี่ยวข้องในsheet2 sheet1แต่ฉันพบปัญหา: เพื่อเปรียบเทียบค่าฉันต่อกัน: ดังนั้นสำหรับแถวแรกที่sheet1ฉันใช้id_1&id_2ในค่า VLOOKUP ปัญหาคือว่า28273 and 15จากการsheet1ที่ผมได้รับจาก2827 and 315 sheet2ดังนั้นมันไม่ตรงกับที่ฉันต้องการ

ฉันควรใช้สูตรใดเพื่อรับcountค่าจากsheet2ค่าที่เกี่ยวข้องเช่น:

sheet1

id_1  id_2 count count2
2827  315  5     155
...

พารามิเตอร์สุดท้ายควรเป็น FALSE สำหรับการค้นหาที่แน่นอน คุณกำลังเปรียบเทียบค่าการค้นหาที่ต่อกันกับคอลัมน์ตัวช่วยกับค่าที่ได้ต่อกันแล้วหรือไม่?
fixer1234

มันเป็นเท็จ ปัญหาคือการ2827 and 315จับคู่แถวด้วย28273 and 15เนื่องจาก3938315เป็นการจับคู่ที่ตรงกันกับ2827315
Simon Osipov

ใช่ฉันพยายามเปรียบเทียบคอลัมน์ที่ต่อกันกับคอลัมน์ที่ต่อกันอื่นเผชิญกับปัญหานี้และต้องการหาวิธีแก้ปัญหาโดยไม่ต้องต่อคอลัมน์หรือคอลัมน์ผู้ช่วย
Simon Osipov

ฮ่า ๆ. ไม่แม้แต่จะจับรายละเอียดนั้นเกี่ยวกับชุดค่าผสมสองชุดที่เหมือนกันหลังจากต่อกัน เพิ่มจุดหรือสัญลักษณ์อื่น ๆ ระหว่างพวกเขาเมื่อคุณเชื่อมต่อ: A1 & "." & B1 ทำทั้งคอลัมน์ผู้ช่วยและสตริงการค้นหา ช่วงเวลาจะทำให้แน่ใจว่าสตริงนั้นไม่ซ้ำกัน การต่อข้อมูลและคอลัมน์ตัวช่วยเป็นโซลูชันที่ง่ายที่สุด
fixer1234

มันจะมีประโยชน์ถ้าคุณโพสต์สูตรที่คุณมีอยู่แล้ว ฉันเชื่อว่าทางออกที่ง่ายที่สุดคือใช้คำสั่ง IF () เพียงทำตาม VLOOKUP () ดังนั้นถ้า (VLOOKUP (หนึ่ง); VLOOKUP (สอง); ???)
Kevin Anthony Oppegaard Rose

คำตอบ:


0

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

ฉันใช้ตัวอย่างของคุณ Sheet2:

ป้อนคำอธิบายรูปภาพที่นี่

Sheet1:

ป้อนคำอธิบายรูปภาพที่นี่

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

=INDEX(Sheet2!$C$2:$C$6,MATCH(1,(Sheet2!$A$2:$A$6=A4)*(Sheet2!$B$2:$B$6=B4),0))

สังเกตเห็นในภาพว่ามันถูกล้อมรอบด้วยเครื่องหมายปีกกา นั่นเป็นเพราะเป็นสูตรอาร์เรย์และจะต้องได้รับการยืนยันด้วยCtrl+ Shift+ แทนเพียงEnterEnter

INDEX ดึงจำนวนการจับคู่จาก Sheet2 มันทำการทดสอบเชิงตรรกะที่จะเป็นจริงเฉพาะในกรณีที่เงื่อนไขทั้งสองเป็นจริงดังนั้นจึงเปรียบเทียบ1(True) กับผลลัพธ์สำหรับแต่ละแถว โดยเปรียบเทียบคอลัมน์ Sheet2 ค่ากับคอลัมน์ A ใน Sheet1 และค่า Sheet2 คอลัมน์ B กับค่า B คอลัมน์ใน Sheet1 หากพบระเบียนที่ค่าทั้งคอลัมน์ A และ B ตรงกับค่า A และ B ของแถวปัจจุบันนั่นคือการจับคู่

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

=IFERROR( INDEX(Sheet2!$C$2:$C$6,MATCH(1,(Sheet2!$A$2:$A$6=A4)*(Sheet2!$B$2:$B$6=B4),0)) ,"")

1

หากค่าคีย์สองค่าสร้างคีย์เฉพาะคุณสามารถใช้ SUMIFS และข้ามสูตรอาร์เรย์ได้:

=SUMIFS(Sheet2!C:C,Sheet2!A:A,A2,Sheet2!B:B,B2)

สิ่งนี้จะส่งกลับค่า0ใด ๆ ที่ไม่มีการจับคู่กับค่าคีย์ แต่คุณสามารถใช้รูปแบบที่กำหนดเองของ#;#;;@เพื่อแสดงเซลล์ว่างเมื่อ 0 หรือ#;#;"No Match";@เพื่อกลับNo Matchเมื่อ0


ฉันชอบทางออกที่ดีที่สุดของคุณ :-)
fixer1234

0

เสนอวิธีแก้ปัญหาที่ง่ายที่สุดในข้อคิดเห็นเพื่อใช้สัญลักษณ์เฉพาะบางชนิดระหว่างคอลัมน์เพื่อสร้างคอลัมน์ตัวช่วยสำหรับทั้งแผ่นงานเช่น: id_1&"."&id_2

ดังนั้นก่อนหนึ่ง - ฉันสร้างคอลัมน์ช่วยสำหรับการเป็นsheet2id_1&"."&id_2

แล้วฉันมีในsheet1คอลัมน์:

id_1 id_2 count1 count2
...

เปิดsheet2:

id_1 id_2 helper count2
...

จากนั้นฉันเปรียบเทียบคอลัมน์ผ่านVLOOKUPในsheet1:count2: VLOOKUP(sheet1!id_1&"."&sheet1!id_2;sheet2!helper:count2;2;FALSE)


สวัสดีไซม่อนมันเยี่ยมมากที่คุณพบวิธีแก้ปัญหา โปรดโพสต์คำตอบจริงแทนความคิดเห็นสั้น ๆ ที่คุณมี จากนั้นคุณสามารถทำเครื่องหมายคำตอบของคุณเป็นคำตอบของคำถามเพื่อลบออกจากตัวเลือกคำถามที่ยังไม่ได้ตอบ
Kevin Anthony Oppegaard Rose

0

fixer1234 ให้ทางออกที่ดีที่สุดในความคิดเห็นแล้วซึ่ง Simon โพสต์

ฉันมีวิธีแก้ปัญหาที่ซับซ้อนอย่างโง่เขลาที่ยังใช้งานได้หากคุณไม่สามารถเพิ่มคอลัมน์ได้ มันจำเป็นต้องมี ID ของแต่ละคนที่ไม่ซ้ำกันถ้ารหัสเดียวกันเกิดขึ้นสองครั้งมันจะไม่ทำงานอย่างถูกต้อง

IF(MATCH(A2;Sheet2!A:A;0)=MATCH(B2;Sheet2!B:B;0);INDEX(Sheet2!C:C;MATCH(A2;Sheet2!A:A;0));0)

คำอธิบาย: INDEXและค่อนข้างเหมือนองค์ประกอบของที่ MATCH ค้นหา rownumber และค้นหาค่าที่ rownumber ในช่วงที่คุณเลือก ฉันจะตรวจสอบว่า rownumber ของอันแรกเท่ากับ rownumber ของอันแรกหรือไม่และถ้าอย่างนั้นฉันจะทำในสิ่งที่เร็วกว่าและยืดหยุ่นกว่าหรือไม่VLOOKUPMATCHINDEXid_1id_2VLOOKUP


หนึ่งข้อแม้: หากมีหลายชุดของ id_1 และ id_2 สิ่งนี้อาจส่งคืนผลลัพธ์ที่ผิด การจับคู่ครั้งแรกสำหรับ id_1 อาจไม่ตรงกับการจับคู่ครั้งแรกสำหรับ id_2 ดังนั้นมันจะกลับข้อผิดพลาดแม้ว่าจะมีการแข่งขันที่เกิดขึ้นจริงในภายหลัง และศักยภาพของการจับคู่ id_1 (เท่านั้น) สำหรับดัชนีการค้นหาระเบียนที่แตกต่างจากคู่แรกจะถูก จำกัด ไว้เพียงเพราะคู่แรกจะสร้างข้อผิดพลาดเป็นครั้งแรกในกรณีนั้น
fixer1234

0
=INDEX(SHEET2!C:C,aggregate(14,6,row(Sheet2!A$2:A$10)/((Sheet2!A$2:A$10=A2)*(Sheet2!B$2:B$10=B2)),1))

สูตรข้างต้นใช้ AGGREGATE ซึ่งดำเนินการเช่นเดียวกับการดำเนินการโดยไม่ต้องเป็นอาร์เรย์อย่างน้อยสำหรับฟังก์ชั่นบางอย่างเช่น 14 และ 15 โดย 14 บอกให้ AGGREGATE เรียงลำดับผลลัพธ์จากมากที่สุดไปหาน้อยที่สุด 15 เรียงลำดับจากน้อยที่สุดไปหามากที่สุด 6 บอก AGGREGATE ให้ละเว้นผลลัพธ์ที่ทำให้เกิดข้อผิดพลาด

ROW(SHEET2!A$2:A$10)

ส่วนนี้ให้ AGGREGATE หมายเลขแถวที่ถูกประเมินอยู่ในขณะนี้

((Sheet2!A$2:A$10=A2)*(Sheet2!B$2:B$10=B2))

ส่วนนี้เป็นสองเงื่อนไขที่ทั้งสองต้องเป็นจริงเพื่อให้ AGGREGATE ไม่ได้รับข้อผิดพลาด * ทำหน้าที่เหมือนฟังก์ชัน AND เมื่อทั้งสองอย่างใดอย่างหนึ่งเป็นเท็จผลลัพธ์จะสิ้นสุดลงที่ 0 ซึ่งทำให้การหารด้วยข้อผิดพลาด 0 หากผลลัพธ์ทั้งคู่เป็นจริงผลลัพธ์จะเป็น 1 และหมายเลขแถวจะไม่ถูกปรับเปลี่ยนโดยการหารด้วยหนึ่ง คุณจะได้รับรายการผลลัพธ์ที่กรองแล้วที่ตรงกับเกณฑ์ของคุณ

1 บอกให้ AGGREGATE ส่งคืนผลลัพธ์ 1 รายการจากรายการที่เรียง ซึ่งหมายความว่าเมื่อมีหลายแถวที่ตรงกับเกณฑ์ของคุณแถวสุดท้ายที่ตรงกันจะถูกส่งคืนสำหรับฟังก์ชัน AGGREGATE 14 และแถวแรกจะถูกส่งคืนสำหรับฟังก์ชัน 15

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

เนื่องจาก AGGREGATE ใช้อาร์เรย์เช่นการคำนวณการอ้างอิงคอลัมน์แบบเต็มภายในฟังก์ชัน AGGREGATE ควรหลีกเลี่ยงเพื่อลดการคำนวณเพิ่มเติมซึ่งจะทำให้ระบบของคุณไม่ทำงาน ภายในฟังก์ชัน AGGREGATE ช่วงควร จำกัด ข้อมูลของคุณ

ปรับช่วงเพื่อให้เหมาะกับข้อมูลของคุณ

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

=IFERROR(INDEX(Sheet2!C:C,AGGREGATE(14,6,ROW(Sheet2!A$2:A$10)/((Sheet2!A$2:A$10=A2)*(Sheet2!B$2:B$10=B2)),1)),"NO MATCH")

POC

poc2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.