Saya ingin menggunakan Excel untuk mencari dan mengembalikan beberapa nilai referensi untuk kunci yang diberikan. VLookup melakukan sesuatu yang sangat mirip dengan yang saya butuhkan - tetapi hanya mengembalikan satu pertandingan.
Saya menganggap itu akan melibatkan metode pengembalian array dan penanganan, meskipun saya belum pernah membahas ini sebelumnya. Beberapa Googling mulai bersandar pada if ([lookuparray] = [value], row [lookuparray]) sebagai bagian dari solusi - meskipun saya tidak bisa mendapatkannya untuk mengembalikan satu pertandingan ...
Misalnya, jika saya memiliki data referensi ini:
Adam Red
Adam Green
Adam Blue
Bob Red
Bob Yellow
Bob Green
Carl Red
Saya mencoba untuk mendapatkan beberapa nilai pengembalian di sebelah kanan. (Dipisahkan koma, jika memungkinkan)
Red Adam, Bob, Carl
Green Adam, Bob
Blue Adam
Yellow Bob
(Saya sudah memiliki nilai kunci di sebelah kiri - tidak perlu mengeluarkan nilai-nilai itu)
Bantuan apa pun tentang cara pendekatan menangani berbagai nilai dalam konteks ini telah disetujui. Terima kasih.
sumber
=SUM(IF($B$2:$B$8="Key", $C$2:$C$8, 0))
Tukar kolom sehingga warnanya ada di kolom A dan namanya ada di kolom B, lalu urutkan warnanya.
Formula dalam C2 (salin ke kolom): = IF (A2 <> A1, B2, C1 & "," & B2)
Formula dalam D2 (salin ke kolom): = A2 <> A3
Saring untuk "TRUE" pada kolom D untuk mendapatkan hasil yang diinginkan. Lihat di bawah:
sumber
Jika Anda menginginkan pendekatan rumus maka jauh lebih mudah untuk mendapatkan hasil dalam sel yang terpisah, jadi mari kita asumsikan bahwa tabel pertama Anda adalah A2: B8 dan warnanya terdaftar lagi dalam D2: D5. Coba rumus ini di E2
=IFERROR(INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))),"")
dikonfirmasi dengan
CTRL+SHIFT+ENTER
dan disalin melintasi dan ke bawah. Ketika pertandingan habis Anda mendapatkan kosong.Rumus mengasumsikan Excel 2007 atau lebih baru - jika versi sebelumnya Anda dapat menggunakan COUNTIF alih-alih IFERROR, yaitu
=IF(COLUMNS($E2:E2)>COUNTIF($B$2:$B$8,$D2),"",INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))))
sumber
Inilah solusi VBA untuk Anda. Pertama, seperti inilah hasilnya:
Dan ini kodenya:
sumber