วิธีจำลองการรวมภายนอกเต็มรูปแบบใน Excel ได้อย่างไร


34

สมมติว่าฉันมีข้อมูลบางอย่างใน Excel (และไม่ใช่ในฐานข้อมูลจริง) ในแผ่นงานหนึ่งฉันมีข้อมูลโดยที่หนึ่งคอลัมน์ทำหน้าที่เป็น ID และฉันแน่ใจว่าค่าในคอลัมน์นี้ไม่ซ้ำกัน ในชีตอื่นฉันยังมีข้อมูลบางส่วนอีกหนึ่งคอลัมน์ที่สามารถใช้เป็น ID ได้และมันก็เป็นเอกลักษณ์ ถ้าแถว N ในแผ่นที่ 1 มีค่าบางส่วนและแถว M ในแผ่นที่ 2 มีค่าเท่ากันฉันแน่ใจว่าแถว N และแถว M อธิบายวัตถุในโลกแห่งความจริงเดียวกัน

สิ่งที่ฉันถาม: ฉันจะได้รับการเข้าร่วมเต็มรูปแบบภายนอกโดยไม่ต้องเขียนมาโครได้อย่างไร สูตรและฟังก์ชั่นทั้งหมดสามารถเข้าถึงได้ผ่านทางริบบิ้นก็โอเค

ตัวอย่าง "play data" ขนาดเล็ก:

แผ่น 1:

Dostoyevski    Russia
Pushkin        Russia
Shelley        England
Flaubert       France
Hugo           France
Eichendorff    Germany
Byron          England
Zola           France

แผ่นงาน 2:

Shelley        Percy Bysshe
Eichendorff    Josef Freiherr Von
Flaubert       Gustave
Byron          Lord
Keller         Gottfried
Dostoyevski    Fyodor
Zola           Emile
Balzac         Honoré de

ผลลัพธ์ที่ต้องการ (การเรียงลำดับไม่สำคัญ):

Dostoyevski    Russia   Fyodor
Pushkin        Russia
Shelley        England  Percy Bysshe
Flaubert       France   Gustave
Hugo           France
Eichendorff    Germany  Josef Freiherr von
Byron          England  Lord
Zola           France   Emile
Keller                  Gottfried
Balzac                  Honoré de

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


หากคุณเรียงลำดับรายการทั้งสองและวางเรียงซ้อนกันควรจะตรงกับคอลัมน์ที่ต้องการด้วยตนเอง หากคุณมีข้อมูลจำนวนมากคุณสามารถเขียนฟังก์ชั่นที่ใช้สองช่วงและทำสิ่งนี้ให้คุณ
Dan

@Dan ที่ผมกล่าวว่าผมขอให้การทำเช่นนี้โดยไม่ต้องเขียนฟังก์ชั่น ในสถานการณ์ที่ฉันสามารถเขียนได้การแก้ปัญหาเป็นเรื่องเล็กน้อย (อย่างน้อยสำหรับฉันเพราะฉันเคยเขียน VBA มาก่อน)
rumtscho

Excel รองรับการสืบค้น SQL ผ่านการเชื่อมต่อข้อมูล ฉันแย่มากดังนั้นฉันจึงไม่สามารถให้คำแนะนำได้มากนัก แต่มันอาจคุ้มค่าที่จะมองหาคุณ
Kyle

@ ไคล์ฉันเพิ่มตัวเลือกนั้นในคำตอบของฉัน มันไม่ได้มีไว้สำหรับคนที่ใจหดหู่และนี่อาจจะเป็นความยุ่งเหยิงในการเล่นและ / หรือทำเกินความสามารถด้วย แต่เดี๋ยวก่อนทำไมไม่!
enderland

คำตอบ:


43

วิธีการง่าย ๆ - การทำงานของ Excel มาตรฐาน

ก่อนอื่นให้คัดลอก / วางทั้งสองคอลัมน์หลักจากทั้งสองตารางลงในแผ่นงานแผ่นเดียวใหม่เป็นคอลัมน์เดียว

ใช้ "ลบรายการที่ซ้ำกัน" เพื่อรับรายการคีย์ที่ไม่ซ้ำกันทั้งหมดของคุณ

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

=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")

โดยที่Sheet4!A:Bแสดงถึงสิ่งที่ตารางข้อมูลของตารางต้นฉบับนั้นมีไว้สำหรับแต่ละค่านั้น ๆ IFERROR ป้องกันผลลัพธ์ที่น่าเกลียด # N / A ซึ่งปรากฏขึ้นเมื่อ vlookup ไม่สำเร็จและในกรณีนี้คืนเซลล์ว่าง

นี่เป็นตารางผลลัพธ์


Sheet3:

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

Sheet4:

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

ข้อมูลผลลัพธ์:

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

สูตรผลลัพธ์ ( Ctrl+ ~จะสลับนี้):

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


สร้างขึ้นใน SQL Query

คุณสามารถทำได้ด้วยแบบสอบถาม SQL ในตัว มันเป็น ... ผู้ใช้ที่เป็นมิตรน้อยลง แต่อาจจะเป็นกรณีการใช้งานที่ดีขึ้น สิ่งนี้อาจทำให้คุณต้องจัดรูปแบบข้อมูล "แหล่งที่มา" ของคุณเป็นตาราง

  1. คลิกที่เซลล์ในแผ่นงานใหม่
  2. ไปที่ข้อมูล -> จากแหล่งอื่น -> จาก Microsoft Query
  3. เลือกไฟล์ Excel * ภายใต้แท็บฐานข้อมูลแล้วกดตกลง
  4. เลือกสมุดงานของคุณ
  5. เลือกสี่ฟิลด์ต่อไปนี้:
    • ป้อนคำอธิบายรูปภาพที่นี่
  6. คลิก "ถัดไป" และ "ตกลง" ที่คำเตือนที่มีการจัดรูปแบบที่ดีในปี 1990 ที่คุณเห็น
  7. ทำตามคำแนะนำเหล่านี้สร้างการเข้าร่วม Outer Outer ด้านนอกครั้งแรก ในกรณีของฉันฉันใช้ตาราง "ประเทศ" เป็นแหล่งข้อมูลด้านซ้ายและ "ชื่อ" เป็นสิทธิ์
    • ป้อนคำอธิบายรูปภาพที่นี่
    • มีเพียงบางแถวเท่านั้น (เนื่องจากคุณเข้าร่วมใน ID)
  8. ส่วน "สร้างการลบการเข้าร่วมแล้วเพิ่มเมื่อการรวมกัน" เป็นส่วนที่ซับซ้อนมากขึ้น ..

    • นี่คือการกำหนดค่าการเข้าร่วมการลบ: ป้อนคำอธิบายรูปภาพที่นี่
    • คัดลอก SQL ของการเข้าร่วมนี้จากปุ่ม SQL:
    • SELECT countries$.ID, countries$.Val1, .ID,names$ จาก {oj . ภายนอกด้านซ้าย ON. ID = .ID} WHERE ( .ID Is Null)names$Val2C:\Users\Username\Desktop\Book2.xlsxcountries$ countries$C:\Users\Username\Desktop\Book2.xlsxnames$ names$countries$names$names$

  9. กลับไปที่การเข้าร่วมด้านนอกแรกที่คุณสร้าง แก้ไข SQL และด้วยตนเอง

    • เพิ่มUnionไปที่ด้านล่าง
    • เพิ่มการรวมการลบข้อความด้านบนเข้ากับด้านล่างของการเข้าร่วม
  10. กดปุ่ม "ส่งคืนข้อมูล" ทางด้านซ้ายของปุ่ม SQL ทันที
    • คุณอาจต้องการแก้ไข SQL เพื่อเลือกเฉพาะข้อมูลที่คุณต้องการ ณ จุดนี้ ฉันพบว่าการซ่อนคอลัมน์ในผลลัพธ์นั้นง่ายขึ้น
  11. วาง Query ที่ไหนสักแห่งและยืนยันตำแหน่ง
    • ป้อนคำอธิบายรูปภาพที่นี่

ไม่เหมาะสำหรับคนที่ใจหดหู่ แต่ถ้าคุณต้องการโอกาสที่ดีในการดูบางส่วนของ Office ที่ยังไม่ได้อัปเดตตราบใดที่คุณยังมีชีวิตอยู่มันเป็นโอกาสที่ดี


1
คุณมีการอ้างอิงสำหรับสัญกรณ์ [@ID] หรือไม่ ฉันไม่สงสัยเลยว่ามันใช้งานได้ แต่ฉันไม่เคยเห็นมาก่อนและฉันทำงานหนักมากใน Excel
TJL

1
@TJL หากคุณจัดรูปแบบตารางเป็นตารางมันจะใช้รูปแบบสัญกรณ์นั้นเพื่ออ้างอิงคอลัมน์อื่น ชัดเจนกว่าการอ้างอิงเซลล์ อาจเป็นฟีเจอร์ 2010+ ใช่ไหม ฉันไม่แน่ใจ. ฉันไม่ได้ใช้ความมหัศจรรย์ของการจัดรูปแบบเป็นตารางก่อนปี 2010 ..
enderland


คุณไม่สามารถเปลี่ยนคำว่า LEFT เป็นคำว่า FULL ในข้อความค้นหาเดิมได้หรือไม่ ฉันแน่ใจว่าเป็นเพียงการใช้ไดรเวอร์ ACE OLEDB เพื่อเรียกใช้แบบสอบถามซึ่งรองรับไวยากรณ์ FULL JOIN
Kyle Hale

14

ในฐานะที่เป็นทางเลือกอื่นฉันขอแนะนำPower Query ได้ไหม เป็น Add-in ของ Excel ที่ไม่เสียค่าใช้จ่ายจาก Microsoft สำหรับการดำเนินการนี้ ฟังก์ชั่นของมันจะถูกรวมอยู่ใน Excel 2016 ด้วยเช่นกันดังนั้นจึงป้องกันการเกิดขึ้นในอนาคต

อย่างไรก็ตามด้วย Power Query ขั้นตอนนั้นค่อนข้างง่าย:

  1. นำเข้าทั้งสองตารางเป็นแบบสอบถามใน Power Query Editor
  2. ทำการแปลงข้อความค้นหาแบบผสานบนการตั้งค่าคอลัมน์การรวมที่เหมาะสมและการตั้งค่าประเภทการรวมเป็นแบบเต็มด้านนอก
  3. โหลดตารางผลลัพธ์ของคุณลงในแผ่นงานใหม่

สิ่งที่ดีเกี่ยวกับสิ่งนี้คือเมื่อคุณตั้งค่าแล้วหากคุณทำการเปลี่ยนแปลงตารางฐานข้อมูลของคุณคุณเพิ่งกด Data> Refresh All และแผ่นผลลัพธ์ Power Query ของคุณจะได้รับการอัปเดตเช่นกัน


น่าสนใจจริงๆ. เพื่อนของฉันที่เป็นเจ้าของร้านอาหารกำลังถามฉันเกี่ยวกับ MS Office และแสดงให้ฉันเห็นชุด 2016 ของเขาซึ่งไม่รวม MS Access ฉันเห็นตอนนี้ว่าทำไม Excel มีข้อ จำกัด มากมาย ฉันไม่เคยซื้อตั้งแต่ปี 2003 เพราะไม่มีคุณสมบัติที่มีคุณค่าและฉันไม่ชอบรูปลักษณ์ใหม่เช่นกัน ปี 2010 ขึ้นไป Access ทำสิ่งเหล่านี้ทั้งหมดและอื่น ๆ ดังนั้นจึงเป็นคำถามที่ว่าทำไมผู้คนจำนวนมากพยายามที่จะทำงานกับฐานข้อมูลใน Excel เมื่อ Access เป็นวิธีที่จะทำให้บรรลุผล สิ่งเดียวที่ฉันเห็นคือบางทีเพื่อให้ Access DB ทำงานได้ดีมันต้องมีประสบการณ์ VB ที่ดีด้วย
ejbytes

@ejbytes คนส่วนใหญ่เข้าใจแนวคิดของสเปรดชีต ส่วนใหญ่ไม่เข้าใจแนวคิดของฐานข้อมูล ฉันมีโครงการแปลงโครงการสเปรดชีตเป็นฐานข้อมูลและผู้ใช้ยังคงเรียกมันว่า "สเปรดชีต" - แม้หลังจากคำอธิบายที่ครอบคลุมเกี่ยวกับวิธีการทำงานของฐานข้อมูล!
enderland

@enderland ฉันคิดว่าคุณพูดถูก สเปรดชีตที่มีกฎที่ไม่เข้มงวดและมีความยืดหยุ่นไม่ต่อเนื่อง ... และข้อความค้นหาที่ปลอมแปลงเป็นตัวกรอง แพลตฟอร์มสำหรับตารางและรายการเปลี่ยนแปลง
ejbytes

@ejbytes รุ่น tldr คือ MS ต้องการทดสอบเครื่องมือหน่วยความจำ columnstore ใน Excel เพื่อให้มีแถวมากขึ้นรวมถึงการเชื่อมต่อข้อมูลภายนอกมันได้รับความนิยมอย่างสูงดังนั้นพวกเขาจึงเพิ่มเครื่องมือ ETL ตอนนี้พวกเขาได้รวบรวมเครื่องมือทั้งหมดในชื่อ PowerBI
Kyle Hale

@KyleHale ฉันกำลังใช้ Office 2010 และพยายามทำ FULL OUTER JOIN แต่ Power Query ไม่สนใจ ID จากตารางที่สองซึ่งไม่ได้อยู่ในตารางแรก
GeMir

0

วิธีที่รวดเร็วในการจำลองแบบกึ่งนอก (การรวมภายนอก) คือการใช้รายการที่สองของคุณและวางลงใต้รายการกำปั้นของคุณโดยตรงนั่นคือ (กุญแจหลัก) ทั้งหมดอยู่ในคอลัมน์ (หลัก) เดียวกัน จากนั้นจัดเรียงคอลัมน์หลักนั้นคุณจะจบลงด้วยรายการแทรกแล้วทำสมการ IF transposed (superuser กำลังสับสนมุมมองเค้าโครงตาราง .. ):

listA listB


sam blue tim 32874 tim red mary 5710 chris green gustav 047 เฟร็ด
แมรีสีน้ำเงินสีดำ

คัดลอก / วาง / จัดเรียงผลลัพธ์เป็นดังนี้: AB chris green fred blue gustav 047 mary 5710 mary black sam blue tim 32874 tim red

สูตรสำหรับเซลล์ c1: (c1) = if (A1 = A2, B2)

ผลลัพธ์ดูเหมือนว่านี้:

ABC chris เขียว FALSE fred blue FALSE gustav 047 FALSE mary 5710 ดำ mary black FALSE sam สีน้ำเงิน FALSE sam 32874 แดงทิมแดง FALSE

จัดเรียง C เพื่อกำจัดความผิดพลาด ฯลฯ นั่นคือแนวคิดพื้นฐานในรุ่นขยายออกไปถ้ามีข้อมูลมากขึ้น -wag770310


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