Program
Jika Anda pernah menulis lebih dari beberapa makro VBA, kemungkinan besar Anda pernah berada di situasi harus memeriksa apakah suatu teks ada di dalam sel. Di VBA, InStr adalah salah satu fungsi yang akhirnya Anda gunakan di mana-mana. Fungsi ini memberi tahu posisi kemunculan suatu potongan teks di dalam teks lain. Anda bisa menggunakannya untuk mengecek apakah teks ada di sel, mengurai nilai dalam teks, atau mengendalikan logika kondisional dalam makro yang bergantung pada pola teks.
Dalam panduan ini, saya akan mengulas sintaks InStr, beberapa contoh, cara kerja mode perbandingan (bagian ini lebih sering menjebak orang daripada yang seharusnya), serta beberapa pola yang benar-benar akan Anda gunakan berulang.
Saya menyarankan Anda memulai dengan Excel Fundamentals skill track kami untuk membangun fondasi yang kuat sebelum lanjut ke VBA, atau ikuti Advanced Excel Functions jika Anda sudah punya pengalaman, untuk mempelajari lebih jauh bagaimana fungsi meningkatkan efisiensi analisis data.
Apa Itu Fungsi VBA InStr?
InStr adalah fungsi VBA yang mengembalikan posisi kemunculan pertama suatu string di dalam string lain.
Hasilnya berperilaku sebagai berikut:
- Jika ditemukan, mengembalikan angka (posisi tempat kecocokan dimulai)
- Jika tidak menemukan apa pun, mengembalikan 0
Misalnya, jika "cat" muncul pada posisi 5 dalam string, Anda akan mendapatkan 5. Jika tidak ada, Anda mendapatkan 0.
Sintaks VBA InStr
Berikut sintaks lengkap InStr:
InStr([start], string1, string2, [compare])
Di mana:
-
start(opsional): Menentukan dari posisi mana VBA memulai pencarian. Jika diabaikan, VBA mulai dari posisi 1. -
string1(wajib): Teks lengkap tempat Anda melakukan pencarian. -
string2(wajib): Teks yang ingin Anda temukan. -
compare(opsional): Menentukan bagaimana perbandingan dilakukan (peka huruf besar/kecil atau tidak). Jika diabaikan, VBA menggunakan mode perbandingan bawaan, biasanya peka huruf besar/kecil.
Perhatikan bahwa Anda bisa mengabaikan argumen start dan compare (InStr(string1, string2)) untuk versi yang lebih sederhana. Namun jika Anda memutuskan menggunakan argumen compare, Anda juga harus menyertakan argumen start.
Cara Kerja VBA InStr
Bayangkan InStr seperti membaca kalimat dari kiri ke kanan, satu karakter demi satu.
Fungsi ini mulai dengan string1, memindainya, dan mencari tempat pertama di mana string2 cocok. Begitu menemukan kecocokan, fungsi berhenti dan mengembalikan posisi tempat kecocokan dimulai.
Posisi “kecocokan” penting karena VBA menghitung dari 1, bukan 0. Jadi karakter pertama dalam string berada di posisi 1, yang kedua di 2, dan seterusnya.
Penjelasan Nilai Kembalian VBA InStr
Menafsirkan hasil fungsi InStr cukup mudah. Anda bisa mendapatkan salah satu dari berikut ini:
-
Angka positif: Jika menemukan kecocokan, angkanya menunjukkan posisi awalnya.
-
0: Jika tidak ada kecocokan di mana pun dalam string
Namun, jika string masukan Anda Null, fungsi akan mengembalikan Null. Walau bisa diabaikan untuk makro dasar, patut dicatat bahwa perbedaan ini bisa diam-diam merusak suatu kondisi.
Contoh Dasar VBA InStr
Sekarang saya tunjukkan beberapa contoh cara menggunakan fungsi VBA InStr.
Menemukan kata dalam kalimat
Untuk memeriksa apakah kata “before” ada di dalam catatan “Deliver before noon”.
Sub Before()
Dim result As Integer
result = InStr("Deliver before noon", "before")
MsgBox result
End Sub
Hasil untuk VBA di atas adalah 9 karena “before” dimulai pada karakter ke-9.
Memeriksa apakah sebuah karakter ada
Untuk memeriksa apakah karakter “0” ada di string tertentu, gunakan VBA berikut:
Sub ChExist()
Dim result As Integer
result = InStr(“A1023”, “0”)
MsgBox result
End Sub
Dalam kasus ini, hasil yang lebih besar dari 0 berarti karakter ditemukan.
Mencari dari awal string
Untuk mencari dari awal string, Anda tidak perlu menentukan posisi awal, sehingga dimulai dari 1. Itulah nilai bawaan setiap kali kecuali Anda menyatakan sebaliknya.
Sub ChExist()
Dim result As Integer
result = InStr("Report_2026_Final", "2026")
MsgBox result
End Sub
Cara Menggunakan VBA InStr dalam Pernyataan If
Saat bekerja dengan spreadsheet nyata, Anda tidak hanya mencari sebuah angka; Anda mencoba mengambil keputusan. Cara paling umum menggunakan InStr adalah di dalam pernyataan If untuk memfilter data.
Sepanjang tutorial ini, kita akan menggunakan dataset contoh, Orders, dengan kolom: ID, CustomerName, Email, City, dan OrderNotes.
If InStr(...) > 0 Then
Karena InStr mengembalikan 0 saat gagal menemukan apa pun, kita memeriksa apakah hasilnya ada ketika mengembalikan angka lebih besar dari 0.
Pada contoh di bawah, kode melihat kolom OrderNotes (kolom 5). Jika menemukan kata “Fragile”, kode menuliskan “Handle Carefully” di kolom 6.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
' Check if the order notes mention "Fragile"
If InStr(Cells(i, 5).Value, "Fragile") > 0 Then
Cells(i, 6).Value = "Handle Carefully"
End If
Next i
End Sub
Pemeriksaan kondisional untuk kata kunci dan pemfilteran teks
Anda juga dapat menggunakan fungsi InStr untuk memeriksa kata kunci dalam string, terutama jika frasa sedikit berubah. Misalnya, kode di bawah memeriksa apakah catatan memuat “Call” (seperti “Call on arrival” atau “Call before delivery”). Kemudian menandai dan menambahkan tag “Cal Customer” di kolom 6.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
' Check if the order notes mention “Call”
If InStr(Cells(i, 5).Value, “Call”) > 0 Then
Cells(i, 6).Value = “Call Customer”
End If
Next i
End Sub
Sensitivitas Huruf Besar/Kecil dan Mode Compare pada VBA InStr
Secara bawaan, InStr peka huruf besar/kecil (disebut vbBinaryCompare). Misalnya Anda mencari “chicago” tetapi datanya “Chicago”, InStr akan mengembalikan 0.
Untuk mengatasi hal ini, gunakan argumen compare di mana:
-
vbBinaryCompare(Bawaan): peka huruf besar/kecil (“A” tidak sama dengan “a”.) -
vbTextCompare: tidak peka huruf besar/kecil “A” sama dengan “a”.
Pada contoh di bawah, InStr mengembalikan 0 karena mencari “fragile” (huruf kecil) di dalam “Fragile items”.
Sub CheckFragile()
Dim result As Integer
result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
MsgBox result
End Sub
Namun, menggunakan vbTextCompare mengembalikan 1 melalui pencarian yang sama tetapi mengabaikan huruf besar/kecil.
Sub CheckFragile()
Dim result As Integer
result = InStr(1, "Fragile items", "fragile", vbTextCompare)
MsgBox result
End Sub
VBA InStr dengan Posisi Awal
Terkadang Anda tidak ingin memulai pencarian dari awal string. Argumen start memberi tahu VBA dari posisi mana pencarian dimulai.
Pada contoh di bawah, argumen start ditetapkan ke 10, sehingga VBA mulai mencari dari karakter ke-10, bukan yang pertama. Lalu menemukan "delivery" lebih jauh di dalam string.
Sub CheckUrgent()
Dim result As Integer
result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
MsgBox result
End Sub
Hasil contoh di atas adalah 31, yaitu posisi tempat "delivery" dimulai.
Metode ini berguna saat Anda menginginkan kemunculan kedua dari sesuatu atau ingin mengabaikan prefiks yang sudah diketahui saat bekerja dengan pola berulang.
VBA InStr vs. InStrRev
Seperti yang sudah Anda pelajari, InStr mencari dari kiri ke kanan. Namun, InStrRev mencari dari kanan ke kiri.
Sebagai contoh, kita menggunakan InStrRev untuk menemukan titik terakhir pada email. Hasilnya adalah 18, yaitu posisi titik sebelum “com”.
Sub CheckChr()
Dim result As Integer
result = InStrRev("john.jacobs@email.com", ".")
MsgBox result
End Sub
Anda akan mendapati InStrRev lebih berguna saat Anda membutuhkan kemunculan terakhir dari sesuatu atau saat bekerja dengan nama file, email, atau path.
Kasus Penggunaan Umum VBA InStr
Setelah melihat contoh cara kerja fungsi VBA InStr, mari lihat kasus penggunaan yang umum.
Memeriksa apakah sel berisi kata kunci
Misalkan Anda memiliki dataset pesanan pelanggan, dan perlu menandai pesanan untuk penanganan tertentu. Kode melihat kolom OrderNotes dan menandai apa pun yang memuat “noon”.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
' Logic to mark as "Morning Delivery"
End If
Next i
End Sub
Memvalidasi teks bergaya email
Anda juga dapat menggunakan fungsi InStr untuk cepat memeriksa format email yang valid. Misalnya, kode di bawah memeriksa apakah email memuat @ dan menuliskan “Valid Email Format” di kolom 6.
Sub ValidateEmail()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
If InStr(Cells(i, 3).Value, "@") > 0 Then
Cells(i, 6).Value = "Valid Email Format"
End If
Next i
End Sub
Mendeteksi pemisah seperti koma atau tanda hubung
Anda dapat menggunakan fungsi InStr untuk memeriksa apakah ada tanda hubung, koma, atau garis miring dalam teks. Pada contoh di bawah, kode melakukan loop pada OrderNotes (kolom E), memeriksa apakah ada koma dalam teks, lalu menulis hasil di kolom F.
Sub ValidateEmail()
Dim i As Integer
Dim commaPos As Integer
Dim OrderNotes As String
For i = 2 To 51
OrderNotes = Cells(i, 5).Value
commaPos = InStr(1, OrderNotes, ",")
' If a comma exists, mark it
If commaPos > 0 Then
Cells(i, 6).Value = "Has comma"
Else
Cells(i, 6).Value = "No comma"
End If
Next i
End Sub
Kesalahan Umum dengan VBA InStr
Bahkan sebagai pengembang berpengalaman, Anda mungkin menemui beberapa masalah dengan fungsi InStr yang membuat kode berperilaku tak terduga. Berikut masalah umum yang saya temui dan cara mengatasinya:
-
Lupa bahwa InStr berbasis 1: Selalu ingat posisi dimulai dari 1, bukan 0. Jika Anda berasal dari Python atau JavaScript, ini terasa janggal pada awalnya.
-
Menganggap InStr seperti True/False: Ingat bahwa
InStrtidak mengembalikanTrueatauFalse. Jika Anda ingin menemukan sesuatu, Anda harus memeriksa apakah hasilnya> 0. -
Mengabaikan sensitivitas huruf besar/kecil: Seperti yang kini Anda tahu,
InStrsecara bawaan peka huruf besar/kecil. Jika huruf besar/kecil tidak penting, nyatakan denganvbTextComparepada argumencompare. -
Tertukar antara string1 dan string2: Selalu ingat argumen pertama adalah tempat Anda mencari. Argumen kedua adalah apa yang Anda cari. Jika Anda mencari seperti ini
InStr(SearchTerm, FullText), Anda akan selalu mendapatkan0.
VBA InStr vs. Fungsi String VBA Lainnya
Karena InStr biasanya menunjukkan di mana string berada dalam teks, mari bandingkan dengan fungsi string lainnya.
InStr vs. Like
Operator Like digunakan untuk pencocokan pola. Misalnya, kode di bawah memeriksa “Fragile”, tetapi menggunakan pola *, yang berarti “apa pun sebelum atau sesudah”.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
If Cells(i, 5).Value Like "*Fragile*" Then
Cells(i, 6).Value = "Handle Carefully"
End If
Next i
End Sub
Gunakan InStr jika Anda hanya perlu tahu apakah suatu teks ada, dan Like ketika Anda perlu memeriksa teks dalam pola yang kompleks.
InStr vs. Replace
Walaupun Anda bisa menggunakan InStr untuk mengubah keseluruhan nilai dalam sel, fungsi Replace mengubah teks tertentu di dalam sel.
Pada contoh di bawah, fungsi Replace langsung menukar “Fragile” dengan “Handle Carefully” di dalam teks.
Sub ReplaceOrder()
Dim i As Integer
For i = 2 To 51
Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
Next i
End Sub
InStr vs. Mid
Fungsi Mid digunakan untuk mengekstrak teks dari string. Karena itu, Anda sering menggunakan Mid bersama InStr untuk mengekstrak teks setelah mendapatkan posisinya.
Kode di bawah mengekstrak domain dari email pada dataset. Fungsi InStr menemukan posisi kemunculan "@" pada email, kemudian Mid mulai mengekstrak setelahnya. Kode diakhiri dengan menuliskan domain ke kolom H.
Sub ExtractDomain()
Dim i As Integer
Dim pos As Integer
Dim domain As String
For i = 2 To 51
pos = InStr(1, Cells(i, 3).Value, "@")
If pos > 0 Then
domain = Mid(Cells(i, 3).Value, pos + 1)
Cells(i, 8).Value = domain
End If
Next i
End Sub
InStr vs.Split
Fungsi Split digunakan untuk memecah teks menjadi bagian-bagian dengan menentukan pemisah.
Pada contoh di bawah, kode membaca setiap baris dari kolom A, memeriksa apakah ada koma, lalu membagi teks menjadi dua bagian. Kode menuliskan Name → kolom B dan City → kolom C.
Sub SplitTextColumn()
Dim i As Integer
Dim lastRow As Integer
Dim parts As Variant
Dim text As String
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
text = Cells(i, 1).Value
' Only split if a comma exists
If InStr(1, text, ",") > 0 Then
parts = Split(text, ",")
Cells(i, 2).Value = parts(0) ' Name
Cells(i, 3).Value = parts(1) ' City
End If
Next i
End Sub
Praktik Terbaik untuk Menggunakan VBA InStr
Untuk menghindari kesalahan pada VBA Anda, saya merekomendasikan praktik terbaik berikut, yang membantu saya menghemat waktu:
-
Gunakan vbTextCompare saat huruf besar/kecil tidak penting: Karena sebagian besar data nyata tidak konsisten dalam penulisan huruf, Anda bisa melewatkan kecocokan jika mengandalkan argumen
comparebawaan. -
Gabungkan dengan “If” untuk logika yang jelas: Selalu usahakan menyertakan logika untuk mengembalikan nilai, karena
InStrsendiri hanya memberikan angka. -
Periksa > 0, bukan posisi persisnya, kecuali Anda memang membutuhkan posisinya.
-
Jaga agar parsing tetap mudah dibaca. Jangan menumpuk terlalu banyak fungsi dalam satu baris.
Kesimpulan
InStr itu sederhana, tetapi Anda akan menggunakannya di mana-mana. Fungsi ini memberi Anda posisi suatu string di dalam string lain, dan satu angka itu menggerakkan banyak keputusan di VBA—apakah sesuatu ada, dari mana harus mengekstrak, dan apa yang harus dilakukan makro berikutnya. Sendirian, ini hanya pencarian. Digabungkan dengan fungsi seperti Mid, Replace, atau bahkan Split, ini menjadi bagian dari alur kerja yang benar-benar menyelesaikan pekerjaan.
Ikuti Data Analysis in Excel course kami untuk menguasai analitik lanjutan. Selain itu, ikuti Intermediate Power Query in Excel untuk mempelajari transformasi data dan penggunaan bahasa M.
FAQ
Apa yang sebenarnya dikembalikan oleh InStr?
Fungsi ini mengembalikan posisi tempat kecocokan dimulai. Jika tidak ditemukan apa pun, fungsi mengembalikan 0.
Apakah InStr peka huruf besar/kecil?
Ya, InStr secara bawaan peka huruf besar/kecil. ”Fragile” dan ”fragile” dianggap berbeda. Gunakan vbTextCompare jika Anda tidak menginginkan perbandingan peka huruf besar/kecil.
Apa arti bahwa InStr berbasis 1?
Karakter pertama dalam string berada di posisi 1, bukan 0. Ini penting saat Anda menggunakan hasilnya dalam fungsi lain.
Apa yang terjadi jika salah satu nilainya Null?
Hasilnya juga akan Null, bukan 0.
Apa perbedaan antara InStr dan InStrRev?
InStr mencari dari kiri ke kanan, sedangkan InStrRev mulai dari kanan ke kiri. Gunakan yang terakhir ketika kemunculan terakhir yang penting.
