Bagaimana cara mensimulasikan gabungan luar penuh di Excel?

34

Mari kita asumsikan saya memiliki beberapa data di Excel (dan bukan dalam database nyata). Dalam satu lembar, saya memiliki data, di mana satu kolom berfungsi sebagai ID, dan saya telah memastikan bahwa nilai-nilai dalam kolom ini unik. Di lembar lain, saya juga memiliki beberapa data, sekali lagi dengan satu kolom yang dapat diambil sebagai ID, dan juga unik. Jika baris N di Lembar 1 memiliki beberapa nilai, dan baris M di Lembar 2 memiliki nilai yang sama, saya yakin baris N dan baris M menggambarkan objek dunia nyata yang sama.

Apa yang saya tanyakan: bagaimana saya bisa mendapatkan yang setara dengan gabungan luar penuh tanpa menulis makro? Rumus dan semua fungsi yang dapat diakses melalui pita OK.

Contoh "data putar" kecil:

Lembar 1:

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

Lembar 2:

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

Output yang diinginkan (pengurutan tidak penting):

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

Untuk semua orang yang ngeri dengan skenario ini: Saya tahu bahwa ini adalah Cara yang Salah Untuk Melakukannya. Jika saya punya pilihan, saya tidak akan menggunakan Excel untuk ini. Namun, ada cukup situasi di luar sana di mana solusi pragmatis diperlukan, stat, dan solusi yang lebih baik (dari sudut pandang TI) tidak dapat diterapkan.

rumtscho
sumber
Jika Anda mengurutkan kedua daftar dan meletakkannya berdampingan, seharusnya cukup mudah untuk secara manual mencocokkan kolom yang diinginkan. Jika Anda memiliki banyak data, Anda bisa menulis fungsi yang membutuhkan dua rentang dan melakukan ini untuk Anda.
Dan
@Dan seperti yang saya katakan, saya meminta untuk melakukan ini tanpa menulis fungsi . Dalam situasi di mana saya dapat menulisnya, solusinya adalah sepele (setidaknya bagi saya, karena saya sudah menulis VBA sebelumnya)
rumtscho
Excel mendukung kueri SQL melalui koneksi Data. Saya buruk dalam hal itu, jadi saya sayangnya tidak bisa menawarkan lebih banyak saran tetapi mungkin layak untuk Anda.
Kyle
@Kyle saya menambahkan opsi itu ke jawaban saya. Ini bukan untuk yang lemah hati dan untuk ini mungkin berantakan untuk bermain dan / atau berlebihan dengan tapi hei, kenapa tidak!
enderland

Jawaban:

44

Pendekatan mudah - operasi Excel standar

Pertama, salin / tempel kedua kolom kunci dari kedua tabel ke dalam satu lembar, baru sebagai satu kolom.

Gunakan "Hapus Duplikat" untuk mendapatkan daftar tunggal dari semua kunci unik Anda.

Lalu, tambahkan dua kolom (dalam hal ini), satu untuk setiap kolom data Anda di setiap tabel. Saya sarankan Anda menggunakan format sebagai opsi tabel juga karena itu membuat formula Anda terlihat jauh lebih bagus. Menggunakan vlookup, gunakan rumus berikut:

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

Di mana Sheet4!A:Bmewakili apa pun tabel tabel sumber data untuk setiap nilai masing-masing. IFERROR mencegah hasil jelek # N / A yang muncul ketika vlookup tidak berhasil dan dalam kasus ini mengembalikan sel kosong.

Ini memberi Anda tabel hasil Anda.


Sheet3:

masukkan deskripsi gambar di sini

Sheet4:

masukkan deskripsi gambar di sini

Data hasil:

masukkan deskripsi gambar di sini

Rumus hasil ( Ctrl+ ~akan beralih ini):

masukkan deskripsi gambar di sini


Dibangun dalam SQL Query

Anda juga dapat melakukan ini dengan kueri SQL bawaan. Ini ... sangat tidak ramah pengguna, tapi mungkin akan menjadi kasus penggunaan yang lebih baik. Ini kemungkinan akan mengharuskan Anda untuk memformat data "sumber" Anda sebagai tabel.

  1. Klik pada sel di lembar baru
  2. Pergi ke Data -> Dari Sumber Lain -> Dari Microsoft Query
  3. Pilih File Excel * di bawah tab Databases dan tekan ok
  4. Pilih buku kerja Anda
  5. Pilih empat bidang berikut:
    • masukkan deskripsi gambar di sini
  6. Klik "berikutnya" dan "ok" di peringatan berformat 1990-an yang bagus, Anda lihat
  7. Dengan mengikuti petunjuk ini, buat Gabung Luar Kiri pertama. Dalam kasus saya, saya menggunakan tabel "negara" sebagai sumber kiri dan "nama" sebagai kanan.
    • masukkan deskripsi gambar di sini
    • Ini hanya memberikan beberapa baris (karena Anda bergabung di ID)
  8. Bagian "buat gabungan pengurangan lalu tambahkan sebagai kesatuan" lebih rumit ..

    • Berikut adalah konfigurasi join pengurangan: masukkan deskripsi gambar di sini
    • Salin gabung SQL ini dari tombol SQL:
    • SELECT countries$.ID, countries$.Val1, names$.ID names$,. Val2 DARI {oj C:\Users\Username\Desktop\Book2.xlsx. countries$ countries$LEFT OUTER BERGABUNG C:\Users\Username\Desktop\Book2.xlsx. names$ names$ON countries$.ID = names$.ID} WHERE ( names$.ID Is Null)

  9. Kembali ke gabung luar pertama yang Anda buat. Secara manual mengedit SQL dan

    • tambahkan Unionke bawah
    • Tambahkan teks gabungan pengurangan di atas ke bagian bawah gabungan
  10. Tekan tombol "Return Data" segera di sebelah kiri tombol SQL
    • Anda mungkin ingin mengedit SQL untuk hanya memilih data spesifik yang Anda inginkan pada titik ini. Saya merasa lebih mudah untuk menyembunyikan kolom di hasilnya.
  11. Tempatkan Kueri di suatu tempat dan konfirmasikan lokasinya
    • masukkan deskripsi gambar di sini

Bukan untuk orang yang lemah hati. Tetapi jika Anda ingin kesempatan besar untuk melihat beberapa bagian Office yang tidak-diperbarui-selama-Anda-mungkin-sudah-hidup-lagi itu adalah peluang besar.

enderland
sumber
1
Apakah Anda memiliki referensi untuk notasi [@ID]? Saya tidak ragu itu berhasil, tapi saya belum pernah melihatnya sebelumnya dan saya melakukan banyak pekerjaan di Excel.
TJL
1
@ TTJ jika Anda memformat tabel sebagai tabel, itu akan menggunakan semacam notasi untuk referensi kolom lainnya. Jauh lebih jelas daripada referensi sel. Mungkin fitur 2010+? Saya tidak yakin. Saya tidak menggunakan keajaiban format sebagai tabel sebelum 2010 ..
enderland
Tidak bisakah Anda mengubah kata KIRI ke kata LENGKAP dalam kueri asli? Saya yakin itu hanya menggunakan driver ACE OLEDB untuk menjalankan kueri itu, yang mendukung sintaks FULL JOIN.
Kyle Hale
14

Sebagai solusi alternatif, bolehkah saya menyarankan Power Query ? Ini adalah add-in Excel gratis dari Microsoft untuk melakukan hal-hal semacam ini pada dasarnya. Fungsinya sebenarnya akan langsung dimasukkan ke dalam Excel 2016 juga, jadi futureproofed.

Bagaimanapun, dengan Power Query, langkah-langkahnya cukup sederhana:

  1. Impor kedua tabel sebagai kueri ke dalam Power Query Editor.
  2. Melakukan transformasi Gabung Kueri pada mereka, mengatur kolom bergabung yang sesuai dan mengatur tipe bergabung sebagai Full Outer.
  3. Muat tabel hasil Anda ke lembar baru.

Hal yang menyenangkan tentang ini adalah setelah Anda mengatur ini, jika Anda membuat perubahan pada tabel data dasar Anda, Anda cukup menekan Data> Refresh All dan lembar hasil Power Query Anda akan diperbarui juga.

Kyle Hale
sumber
Sangat menarik. Seorang teman saya yang memiliki sebuah restoran bertanya kepada saya tentang MS Office dan menunjukkan kepada saya suite 2016-nya, yang tidak termasuk MS Access. Sekarang saya mengerti mengapa demikian. Excel punya banyak keterbatasan. Saya tidak pernah membeli di atas 2003 karena tidak ada fitur yang bernilai dan saya tidak suka tampilan baru juga; 2010 ke atas. Access melakukan semua ini dan lebih lagi menimbulkan pertanyaan, mengapa begitu banyak orang yang mencoba melakukan pekerjaan Database di Excel ketika Access adalah cara untuk mencapai ini? Satu-satunya hal yang dapat saya lihat adalah bahwa mungkin untuk mendapatkan akses DB yang baik, itu juga membutuhkan pengalaman VB yang baik.
ejbytes
@ejbytes kebanyakan orang memahami konsep spreadsheet. Sebagian besar ... tidak memahami konsep basis data. Saya memiliki proyek yang mengubah proyek spreadsheet-sebagai-basis data menjadi basis data dan pengguna masih menyebutnya "spreadsheet" - bahkan setelah penjelasan yang luas tentang cara kerja basis data!
akhir
@enderland, saya pikir Anda benar. Spreadsheet dengan aturan yang tidak ketat dan fleksibilitas yang tidak berdekatan ... dan kueri yang disamarkan sebagai filter. Sebuah platform untuk tabel dan daftar make-shift.
ejbytes
@ejbytes tldr versi MS ingin menguji mesin memori columnstore di Excel untuk membiarkan lebih banyak baris, termasuk koneksi data eksternal, terbukti sangat populer, sehingga mereka menambahkan dalam alat ETL. Sekarang mereka telah menggulung semua alat sebagai PowerBI.
Kyle Hale
@KyleHale Saya menggunakan Office 2010 dan mencoba melakukan FULL OUTER JOIN, tetapi Power Query mengabaikan ID dari tabel kedua yang tidak ada di tabel pertama.
GeMir
0

Cara cepat untuk mensimulasikan semi (gabungan luar) adalah dengan mengambil daftar kedua Anda dan menempelkannya langsung di bawah daftar kepalan tangan Anda, yaitu sehingga (kunci utama) Anda semua berada di kolom (primer) yang sama. Kemudian Urutkan kolom utama itu, Anda akan berakhir dengan daftar yang disisipkan kemudian melakukan persamaan IF yang ditransformasikan (superuser mengacaukan tampilan tata letak tabel ..):

listA listB


sam blue tim 32874 tim red mary 5710 chris green gustav 047 fred blue
mary black

copy / paste / sortir, hasilnya terlihat seperti ini: AB chris green fred blue gustav 047 mary 5710 mary hitam sam blue tim 32874 tim red

lalu rumus untuk sel c1: (c1) = jika (A1 = A2, B2)

hasilnya terlihat seperti ini:

ABC chris hijau FALSE fred blue FALSE gustav 047 FALSE mary 5710 hitam mary hitam FALSE sam blue FALSE tim 32874 tim merah FALSE merah

Sortir C untuk menghilangkan kesalahan, dll. Itu adalah versi dasar dari ide, cukup rentangkan jika ada lebih banyak data. -wag770310

d587793
sumber
Bisakah Anda memformat ini dengan cara apa pun agar dapat dibaca?
davidbaumann