Mencari Data dengan Fungsi Find Menggunakan VBA

Fungsi Find adalah salah satu fitur yang paling banyak digunakan di VBA. Fungsi ini memungkinkan pengguna mencari lokasi infomasi yang berada di area tertentu. Anda dapat menggunakan metode ini untuk melakukan pencarian di sheet, atau bagian dari spreadsheet Microsoft Excel. Artikel ini akan menjelaskan cara mencari nilai di kolom Excel menggunakan fungsi Find di VBA.

Mencari Data Menggunakan Find

Cara kerja fungsi Find sangat mirip dengan fungsi pencarian dasar. Jika Anda sedang melakukan pencarian dasar dari semua data di sebuah workbook, Anda dapat melakukannya dengan menekan tombol [CTRL] + F pada keyboard. Hal ini akan membuka kotak pencarian. Cukup ketik kata kunci atau nilai yang ingin dicari, kemudian tekan tombol Enter.

Excel akan menandai semua kolom yang sesuai dengan pencarian Anda.

Mencari Data Menggunakan Metode Find di VBA

Berikut ini adalah cara menggunakan fungsi Find di VBC. Perlu dicatat bahwa kata kunci pencarian yang digunakan dalam contoh berikut adalah Value:

Cells.Find(What:="Value", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, 
SearchFormat:=False).Activate

Memahami Metode Find

Berikut ini adalah rincian singkat dari semua parameter yang digunakan pada metode Find.

MyRange.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, SearchFormat) 

MyRange: Ekspresi ini menunjukkan area atau Range objek, yang merujuk pada kolom mana yang ingin Anda cari, serta memiliki parameter What atau nilai dan kata kunci yang ingin dicari.

Bagian ini adalah semua sheet (Sheets(1).Cells.Find(...)), untuk kolom(Sheets(1).Columns(3).Find(...)), untuk baris (Sheets(1).Rows(7).Find(....)), atau area kolom tertentu (Sheets(1).Range("D12:F56").Find(....)).

What: Parameter ini diperlukan, karena berfungsi untuk menentukan secara spesifik nilai mana yang ingin Anda cari pada sebuah area. Parameter ini dapat berisi semua jenis data yang didukung oleh Excel.

After: Parameter ini hanya sebagai tambahan, karena berguna untuk menandai kolom mana yang dijadikan sebagai area awal pencarian (perlu dicatat bahwa kolom harus bernilai unik). Jika parameter After tidak diisi, maka pencarian akan dimulai dari area sudut kiri-atas.

LookIn: Parameter ini bersifat opsional. Parameter ini berfungsi untuk menentukan lokasi dari area pencarian. Variasi lain dari parameter LookIn adalah xlValues, xlFormulas, dan xlComments.

LookAt: Parameter ini juga bersifat opsional. Parameter LookAt mengindikasikan apakah hasil pencarian harus sama persis dengan nilai yang dimasukkan, atau hasilnya boleh memiliki nilai sebagaian.

Misalnya, jika seseorang mencari nilai "10" pada sebuah matriks yang terdiri atas: 6210, 4105, 540, 163, 154, 132, 10, maka ada beragam metode yang dapat Anda gunakan. Untuk memberi tahu VBC bahwa Anda hanya ingin menemukan angka 10, Anda dapat menggunakan parameter LookAt:=XlWhole. Sebaliknya, jika Anda ingin mencari nilai yang memiliki angka 10 (pada kasus ini, 6210 atau 4105), Anda dapat menggunakan LookAt:=XlPart.

SearchOrder: Parameter ini bersifat opsional. Pencarian dapat diurutkan berdasarkan dua konstanta: xlByRows (berdasarkan baris), atau xlByColumns (berdasarkan kolom).

SearchDirection: Parameter ini bersifat opsional. Parameter ini mengindikasikan pencarian langsung dalam sebagian area tertentu. Parameter ini memiliki dua konstanta, yaitu xlNext, yang digunakan untuk mencari nilai di sebuah area secara berurutan, dan xlPrevious, yang digunakan untuk mencari nilai dari area sebelumnya.

MatchCase: Parameter ini bersifat opsional. Dua nilai yang dpat digunakan dalam parameter ini adalah True dan False. Untuk pencarian case-sensitive harus menggunakan nilai True.

SearchFormat: Parameter ini bersiftar opsional. Parameter ini dapat bernilai True atau False, tergantung apakah format nilai sudah ditentukan atau tidak (misalnya: nilai mata uang, angka, bingkai, isi, perataan, dll.).

Nilai Kembali dari Metode Find

Metode Find akan kembali pada objek dalam Range atau area, yang merepresentasikan kolom pertama tempat data ditemukan. Metode ini akan kembali pada Nothing jika tidak ada hasil yang ditemukan. Argumen parameter LookIn, LookAt, SearchOrder, dan MatchCase direkam setiap saat Anda menggunakan metode ini. Jika Anda tidak menentukan nilai untuk argumen tersebut secara spesifik saat menggunakan metode ini lagi, nilai yang sebelumnya telah direkam akan digunakan lagi.

Contoh dari Metode Pencarian di VBA

Option Explicit

Sub Cherche()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot "Trouve"
Valeur_Cherchee = "Trouve"
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(1)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = Trouve.Address
End If
MsgBox AdresseTrouvee
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End Sub

N.B. Jika kita membuat pencarian untuk 1024 angka menggunakan kata "Find", kita perlu menegaskan Valeur_Cherchee sebagai integral. Varian What memungkinkan Anda mencari berbagai jenis data.

Mencarian Ganda di VBA

Metode FindNext dan FindPrevious memungkinkan Anda untuk melakukan pencarian ganda.

Menggunakan Varian Find_Next

Pada contoh kode berikut ini akan terlihat kata "mot" di area A1:A20:

Sub Principale()
Dim Plage As Range
Dim Lignes(), i As Long
Dim Texte As String
Dim Flag As Boolean
Set Plage = Sheets("Feuil1").Range("A1:A20") 'plage de recherche
Texte = "mot" 'expression cherchée
Flag = Find_Next(Plage, Texte, Lignes()) 'appel de la fonction
If Flag Then 'si fonction retourne Vrai = expression trouvée dans la plage
For i = LBound(Lignes) To UBound(Lignes) 'restitution des lignes correspondantes
Debug.Print Lignes(i)
Next i
Else
MsgBox "L'expression : " & Texte & " n'a pas été trouvée dans la plage : " & Plage.Address
End If
End Sub
'Sources : Michel_m
'http://www.commentcamarche.net/forum/affich-31432413-importation-de-donnees-sans-doublons#9
Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
Dim Nbre As Integer, Lig As Long, Cptr As Long, Adresse As String
Nbre = Application.CountIf(Rng, Texte)
If Nbre > 0 Then
ReDim Tbl(Nbre - 1)
Lig = 1
For Cptr = 0 To Nbre - 1
Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
Tbl(Cptr) = Lig
Next
Else
GoTo Absent
End If
Find_Next = True
Exit Function
Absent:
Find_Next = False
End Function

N.B. For an entire column, simply replace:

Set Plage = Sheets("Feuil1").Range("A1:A20")

By:

Set Plage = Sheets("Feuil1").Columns(1)

N.B. To return the addresses of the cells rather than the line number in the Find_Next function, replace:

Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
Tbl(Cptr) = Lig

By:

Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
Adresse = Cells(Lig, Rng.Column).Address
Tbl(Cptr) = Adresse

FindAll

Ini adalah fungsi yang mengembalikan hasil Find dan FindNext sebagai hasil dari deretan beberapa nilai. Fungsi ini akan menemukan semua contoh string (sText As String) dan mengembalikan sebuah deretan yang berisi garis angka.

Parameter dari fungsi ini adalah sebagai berikut:

ByVal sText As String merepresentasikan nilai dari target.

ByRef oSht As Worksheet merepresentasikan sheet target.

ByRef sRange As String merepresentasikan range atau area.

ByRef arMatches() As String merepresentasikan array atau deretan yang akan menyimpan nilai-nilai yang dikembalikan.

Kodenya adalah:

Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)

If Not rFnd Is Nothing Then
rFirstAddress = rFnd.Address
Do Until rFnd Is Nothing
iArr = iArr + 1
ReDim Preserve arMatches(iArr)
arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
Set rFnd = oSht.Range(sRange).FindNext(rFnd)
If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
Loop
FindAll = True
Else
' ----------------------
' No Value is Found
' ----------------------
FindAll = False
End If
' -----------------------
' Error Handling
' -----------------------
Err_Trap:
If Err <> 0 Then
MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
Err.Clear
FindAll = False
Exit Function
End If
End Function

Image: © Microsoft.

Dokumen ini berjudul « Mencari Data dengan Fungsi Find Menggunakan VBA », dipublikasikan oleh pihak CCM di bawah lisensi Creative Commons. Anda dapat menyalin, menggunakan, dan memodifikasi konten halaman ini berdasarkan syarat dan ketentuan yang telah ditetapkan oleh lisensi ini. Mohon tetap mencantumkan nama CCM (id.ccm.net) pada publikasi Anda.