VBA - Periksa apakah ada nilai dalam array
VBA - Periksa apakah ada nilai dalam array
![](http://img.brin-designs.com/img/games/919/vba-check-if-value-exists-an-array.png)
pengantar
Untuk memeriksa apakah ada nilai dalam array, kita bisa mengulang elemen-elemennya. Namun ada solusi lain! Anda dapat menggunakan fungsi INDEX (), yang asli dari Excel dan dalam kasus array dua dimensi gunakan kombinasi dari fungsi INDEX / MATCH . Namun, jika nilainya tidak ditemukan, Application.Match mengembalikan kesalahan. Anda perlu memperhitungkan kesalahan yang mungkin terjadi, serta jumlah dimensi dari variabel array.Fungsi kecil ini akan membantu Anda!
Menggunakan fungsi Match
Fungsi EstDans (mot As String, Tabl) Sebagai BooleanDim Dimension As Byte, j As Integer
On Error Resume Selanjutnya
If IsError (UBound (Tabl, 2)) Maka Dimensi = 1 Lain Dimensi = 2
On Error GoTo 0
Pilih Dimensi Huruf
Kasus 1
On Error Resume Selanjutnya
EstDans = Application.Match (mot, Tabl, 0)
On Error GoTo 0
Kasus 2
Untuk j = 1 Ke UBound (Tabl, 2)
On Error Resume Selanjutnya
EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)
On Error GoTo 0
Jika EstDans = Benar Lalu Keluar Untuk
Berikutnya
End Select
Fungsi Akhir
Meminta fungsi
Sub tes ()Dim Tb (), i As Integer
'tb 2 dimensi:
Tb = Rentang ("A2: C16"). Nilai
Debug.Print EstDans (MaValeur, Tb)
Hapus Tb
'tb 1 dimensi:
ReDim Preserve Tb (15)
Untuk i = 0 Sampai 14
Tb (i) = Sel (i + 2, 1)
Berikutnya
Debug.Print EstDans (MaValeur, Tb)
End Sub
Menggunakan loop
Struktur fungsi ini mirip dengan yang menggunakan Match .Fungsi BoucleSurTabl (mot As String, Tb)Dim Dimension As Byte, i As Long, j As Long
On Error Resume Selanjutnya
Jika IsError (UBound (Tb, 2)) Maka Dimensi = 1 Lain Dimensi = 2
On Error GoTo 0
Pilih Dimensi Huruf
Kasus 1
Untuk j = LBound (Tb) Ke UBound (Tb)
If Tb (j) = mot Kemudian BoucleSurTabl = True: Exit Function
Berikutnya
Kasus 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 dari Fungsi
Selanjutnya j
Selanjutnya saya
End Select
Fungsi Akhir
Pengamatan
Melawan semua peluang, Anda akan mendapatkan hasil yang lebih baik dengan fungsi loop pada array besar daripada menggunakan Application.Match.Menguji array 2 dimensi dengan Range berikut ("A1: Y20002").
- Menggunakan fungsi Match: 8.300781 detik.
- Menggunakan loop: 0, 4375 detik.
Menguji array satu dimensi:
- Menggunakan fungsi Match: instan
- Menggunakan loop: 0, 015625 detik
Tautan unduhan
- Anda dapat mengunduh buku kerja sampel: //cjoint.com/?DHfpeqMBvRK