VBA - Periksa apakah ada nilai dalam array

VBA - Periksa apakah ada nilai dalam array

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 Boolean

Dim 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
Artikel Sebelumnya Artikel Berikutnya

Tips