Daftar Isi
Ketika kita memiliki data dalam jumlah besar, terkadang sulit untuk mengekstrak data spesifik apa pun dari dataset. Bersama dengan Excel's INDEX dan PERTANDINGAN dapat mengambil segala jenis data bahkan dalam dataset yang sangat besar. VBA adalah metode yang paling efektif, tercepat, dan teraman untuk menjalankan operasi apa pun di Excel. Pada artikel ini, kami akan menunjukkan kepada Anda 3 metode berbeda tentang cara melakukan INDEX MATCH berdasarkan beberapa kriteria di Excel dengan Makro VBA .
Unduh Buku Kerja
Anda bisa mengunduh buku kerja Excel latihan gratis dari sini.
VBA INDEX MATCH Berdasarkan Beberapa Kriteria.xlsm3 Metode dengan VBA INDEX MATCH Berdasarkan Beberapa Kriteria di Excel
Pada bagian berikut ini, kami akan menunjukkan kepada Anda cara melakukan INDEX MATCH berdasarkan beberapa kriteria untuk suatu rentang , untuk pilihan tertentu dan untuk sebuah tabel di Excel dengan VBA .
Di atas kita memiliki dataset yang akan diikuti oleh artikel ini. Nama Siswa , ID Siswa, dan Tanda Ujian Kita akan mengekstrak hasil tertentu yang berada di satu kolom berdasarkan kondisi dari dua kolom lainnya.
Kriteria - 1: Sematkan VBA dengan INDEX MATCH untuk Pencarian Beberapa (Dua) Dimensi di Excel
Perhatikan gambar berikut ini. Kita telah menyimpan nama siswa tertentu " Tepi" di Sel G4 dan kolom yang akan kita cari di Hasil di, Tanda Ujian disimpan dalam Sel G5 Kami akan mencari di Tanda Ujian dan menyimpan kolom Tanda bahwa " Tepi" masuk Sel G6 .
Langkah-langkah untuk mencari hasil dalam larik dua dimensi dengan INDEX dan PERTANDINGAN di Excel dengan VBA diberikan di bawah ini.
Langkah-langkah:
- Pada awalnya, tekan Alt + F11 pada keyboard Anda atau buka tab Pengembang -> Visual Basic untuk membuka Editor Visual Basic .
- Berikutnya, di jendela kode pop-up, dari bilah menu, klik Sisipkan -> Modul .
- Kemudian, salinan kode berikut dan tempelkan itu ke dalam jendela kode.
Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Dua Dimensi") iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) End Sub
Kode Anda sekarang siap untuk dijalankan.
- Sekarang, tekan F5 pada keyboard Anda atau dari bilah menu pilih Jalankan -> Jalankan Sub/UserForm Anda juga bisa mengklik pada ikon Jalankan kecil di bilah sub-menu untuk menjalankan makro.
Setelah eksekusi kode, lihat gif di bawah ini untuk melihat hasilnya.
Sebagai hasilnya, yang Tanda bahwa " Tepi" mendapat ujian, 67 diambil dalam Sel G7 .
Penjelasan Kode VBA
Dim iSheet Sebagai Lembar Kerja
Mendefinisikan variabel Lembar Kerja.
Set iSheet = Lembar Kerja ("Dua Dimensi")
Simpan nama lembar kerja. Nama sheet kita adalah "Two Dimension", anda harus memberikan nama sesuai dengan spreadsheet anda.
iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)))
Bagian kode ini memilih kisaran C5:D14 sebagai rentang pencarian. Kemudian cari kecocokan yang disimpan di sel G4 dalam jangkauan B5:B14 dan mencari kecocokan yang disimpan dalam sel G5 dalam jangkauan C4:D4 dan meneruskan hasilnya ke sel G6 .
Baca selengkapnya: Cara Menggunakan INDEX MATCH dengan Beberapa Kriteria untuk Rentang Tanggal
Kriteria - 2: Menerapkan Makro untuk Menemukan Nilai MATCH dengan INDEX dengan User-Defined Function (UDF)
Anda bisa mengekstrak nilai yang cocok dari dataset dengan a fungsi yang ditentukan pengguna (UDF) Dari gambar berikut ini, apa yang akan kita lakukan adalah, kita akan melewatkan Identitas Siswa dan Tanda Ujian dari siswa tertentu dan fungsi tersebut akan melemparkan kita Nama dari siswa tertentu.
Mari kita lihat bagaimana cara mencapainya untuk Nama Siswa "Finn" dengan VBA .
Langkah-langkah:
- Seperti yang ditunjukkan sebelumnya, buka Editor Visual Basic dari Pengembang tab dan Sisipkan a Modul di jendela kode.
- Kemudian, di jendela kode, salinan kode berikut dan tempelkan itu.
Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y ThenMatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Data Tidak ditemukan" End Function
- Jangan lari kode ini, Simpan itu.
- Sekarang, kembali ke lembar kerja yang menarik. Pilih sel apa saja yang ingin Anda simpan hasilnya. Dalam kasus kami, itu adalah Sel F5 .
- Di dalam sel itu, menulis UDF yang baru saja Anda buat dalam kode ( MatchByIndex ) dan lulus ID Siswa dan Tanda Ujian dari siswa tertentu di dalam tanda kurung fungsi.
Karena kita mencoba mengekstrak nama " Finn" dari ID (105) dan Tanda (84) , sehingga untuk kasus kita rumusnya menjadi,
=MatchByIndex(105,84)
- Kemudian, tekan Masuk .
Lihat gambar berikut ini.
Dalam Sel F5 , kita telah berhasil mengambil nama " Finn" dengan hanya melewati ID dan Tanda di dalam fungsi yang kita buat di dalam VBA kode.
Penjelasan Kode VBA
Fungsi MatchByIndex(x Sebagai Ganda, y Sebagai Ganda)
Membuat fungsi baru dan mengoper variabel di dalamnya. Anda dapat mendefinisikan nama apa pun untuk fungsi tersebut.
Const StartRow = 4
Baris kami dimulai dari baris nomor 4. Anda harus memberikan nomor baris tempat dataset Anda dimulai.
Dim EndRow As Long Dim iRow As Long
Mendefinisikan variabel.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Pertama, tentukan lembar kerja yang akan digunakan. Nama lembar kerja kita adalah "UDF", Anda harus memberikan nama sesuai dengan spreadsheet Anda. Kemudian mulai mencari dalam rentang C:D dari baris pertama yang kita definisikan ke baris terakhir.
For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y Then MatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With
Mulai iterasi dari baris pertama hingga baris terakhir. Jika nilai pertama yang akan kita masukkan ke dalam fungsi tersebut jatuh di dalam C dan jika nilai kedua yang akan kita masukkan ke dalam fungsi jatuh di dalam kolom D kolom, maka akan mengembalikan kecocokan dari kolom B Jika tidak, keluar dari fungsi, akhiri semua pernyataan, dan lanjutkan ke baris berikutnya.
MatchByIndex = "Data Tidak ditemukan" End Function
Jika kondisi sebelumnya tidak terpenuhi saat mengeksekusi, maka pesan "Data Tidak Ditemukan" akan dikembalikan dan kode akan meninggalkan fungsi.
Baca selengkapnya: INDEX-MATCH dengan Beberapa Kriteria untuk Teks Parsial di Excel (2 Cara)
Kriteria - 3: Menerapkan VBA untuk Mengembalikan Nilai MATCH dari Tabel dengan Banyak Data di Excel
Dalam bagian ini, kita akan belajar cara mengembalikan nilai yang cocok dengan indeks dari tabel di MsgBox di VBA Excel.
Mari kita lihat bagaimana mengekstrak Tanda dari tabel yang ditunjukkan dalam dataset kami ( T Nama mampu: TableMatch ) dari seorang siswa tertentu dengan menyediakan Nama dan ID di dalam kode. Untuk kasus kita, kode Nama dan ID akan Finn dan 105 masing-masing.
Langkah-langkah:
- Pertama, buka Editor Visual Basic dari Pengembang tab dan Sisipkan a Modul di jendela kode.
- Kemudian, salinan kode berikut dan tempelkan itu ke dalam jendela kode.
Sub ReturnMatchedResultByIndex() Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable =iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("ID Mahasiswa").Index NameColumn = iTable.ListColumns("Nama Mahasiswa").Index MarksColumn = iTable.ListColumns("Nilai Ujian").Index iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) =TargetName Then iResult = True End If End If Jika iResult Then Exit For Next iCount If iResult Then MsgBox "ID: " & TargetID & vbLf & "Nama: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Nama: " & TargetName & vbLf & "Marks Tidak ditemukan" End If End Sub
Kode Anda sekarang siap untuk dijalankan.
- Kemudian, Lari kode ini dan lihat gambar berikut untuk melihat apa yang terjadi sebagai hasilnya.
Seperti yang bisa Anda lihat dari gambar di atas, ada Microsoft Excel kotak pesan pop-up yang menunjukkan kepada Anda Nilai: 84 dari ID: 105 dan Nama: Finn yang kami sediakan di dalam kode.
Penjelasan Kode VBA
Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean
Mendefinisikan variabel.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Hasil Pengembalian") Set iTable = iSheet.ListObjects("TableMatch")
Mengatur nama sheet dan nama tabel di dalam variabel.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
Menyimpan nilai pencarian dan kolom pencarian untuk dicari.
iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = TargetName Then iResult = True End If End If If iResult Then Exit For Next iCount
Bagian kode ini memindai dari awal hingga akhir subskrip dan jika menemukan kecocokan ID yang ditentukan dan Nama di kolom pencarian kemudian menyimpan hasilnya dan menutup semua pernyataan. Juga, keluar dari iterasi dan pergi ke bagian kode berikutnya.
If iHasil Then MsgBox "ID: " & TargetID & vbLf & "Nama: " & NamaTarget & vbLf & "Tanda: " & iValue(iHitung, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Nama: " & NamaTarget & vbLf & "Tanda Tidak ditemukan" End If
Melempar hasil di MsgBox.
Baca selengkapnya: Cari dan Kembalikan Beberapa Nilai Digabungkan menjadi Satu Sel di Excel
Kesimpulan
Sebagai kesimpulan, artikel ini menunjukkan kepada Anda 3 metode berbeda tentang cara melakukan INDEX MATCH berdasarkan beberapa kriteria di Excel dengan Makro VBA Saya harap artikel ini sangat bermanfaat bagi Anda. Jangan ragu untuk mengajukan pertanyaan apa pun mengenai topik ini.