VBA - Semak sama ada nilai wujud dalam tatasusunan
VBA - Semak sama ada nilai wujud dalam tatasusunan
![](http://img.brin-designs.com/img/games/919/vba-check-if-value-exists-an-array.png)
Pengenalan
Untuk memeriksa sama ada nilai wujud dalam tatasusunan, kita boleh gelung melalui unsur-unsurnya. Bagaimanapun ada penyelesaian lain! Anda boleh menggunakan fungsi INDEX (), asli kepada Excel dan dalam kes array dua dimensi menggunakan gabungan fungsi INDEX / MATCH . Walau bagaimanapun, jika nilai tidak ditemui, Permohonan.Match mengembalikan ralat. Anda perlu mengambil kira sebarang ralat yang mungkin, serta bilangan dimensi pembolehubah tatasusunan.Fungsi kecil ini akan membantu anda!
Menggunakan fungsi Padanan
Fungsi EstDans (mot As String, Tabl) Sebagai BooleanDim Dimensi Sebagai Byte, j Sebagai Integer
Mengenai Ralat Ralat Seterusnya
Jika IsError (UBound (Tabl, 2)) Kemudian Ukuran = 1 Dimensi Dimensi = 2
Pada Kesalahan GoTo 0
Pilih Dimensi Kes
Kes 1
Mengenai Ralat Ralat Seterusnya
EstDans = Application.Match (mot, Tabl, 0)
Pada Kesalahan GoTo 0
Kes 2
Untuk j = 1 Ke UBound (Tabl, 2)
Mengenai Ralat Ralat Seterusnya
EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)
Pada Kesalahan GoTo 0
Jika EstDans = Benar Kemudian Keluar Untuk
Seterusnya
Akhir Pilih
Fungsi Akhir
Menggunakan fungsi ini
Ujian subjek ()Dim Tb (), i Sebagai Integer
'tb 2 dimensi:
Tb = Julat ("A2: C16"). Nilai
Debug.Print EstDans (MaValeur, Tb)
Hapuskan Tb
'tb 1 dimensi:
ReDim Preserve Tb (15)
Untuk i = 0 Ke 14
Tb (i) = Sel (i + 2, 1)
Seterusnya
Debug.Print EstDans (MaValeur, Tb)
Sub Akhir
Menggunakan gelung
Struktur fungsi ini sama dengan yang menggunakan Match .Fungsi BoucleSurTabl (mot As String, Tb)Dim Dimension As Byte, i As Long, j As Long
Mengenai Ralat Ralat Seterusnya
Jika IsError (UBound (Tb, 2)) Kemudian Ukuran = 1 Dimensi Dimensi = 2
Pada Kesalahan GoTo 0
Pilih Dimensi Kes
Kes 1
Untuk j = LBound (Tb) Ke UBound (Tb)
Jika Tb (j) = mot Kemudian BoucleSurTabl = Benar: Keluar Fungsi
Seterusnya
Kes 2
Untuk i = LBound (Tb, 1) Ke UBound (Tb, 1)
Untuk j = LBound (Tb, 2) Ke UBound (Tb, 2)
Jika Tb (i, j) = mot Kemudian BoucleSurTabl = Benar: Keluar Fungsi
Seterusnya j
Seterusnya saya
Akhir Pilih
Fungsi Akhir
Pemerhatian
Terhadap semua kemungkinan, anda akan mendapat hasil yang lebih baik dengan fungsi gelung pada tatasusunan besar daripada menggunakan Application.Match.Menguji pelbagai 2 dimensi dengan Julat berikut ("A1: Y20002").
- Menggunakan fungsi Padanan: 8.300781 saat.
- Menggunakan gelung: 0.4375 saat.
Menguji pelbagai dimensi satu dimensi:
- Menggunakan fungsi Padanan: segera
- Menggunakan gelung: 0.015625 saat
Pautan muat turun
- Anda boleh memuat turun buku kerja sampel: //cjoint.com/?DHfpeqMBvRK