Mencari Keyword di search Engine VBA

  1. 2 minggu lalu
    Di sunting 2 minggu lalu oleh Robyrubyjane

    Selamat siang para suhu, jadi aku dapet tutorial buat search engine pakai VBA nah masalahnya misalkan kita mau nyari berdasarkan surname "Ace bisa" kek gini, dan kita ketik keyword "Ace" dia bakal ketemu
    Screenshot 2023-05-16 152505.png
    tapi kalo kita ketik "bisa", dia keluar maaf data tidak ditemukan.
    Screenshot 2023-05-16 152739.png

    Mohon bantuannya, jadi dia bisa nyari kata ga harus dari kata awal tapi bisa juga dari data ditengah nya atau akhir. terima kasih sebelumnya

    berikut file dan kodingannya, terima kasih sebelumnya
    TUTORIRAL SISTEM PENCARIAN.xlsm

    @Robyrubyjane ...

    Coba ubah script Event Procedure CARIDATA_Click() menjadi :

    Private Sub CARIDATA_Click()
        Dim sNamaTabel As String
        Dim xlSheetData As Range
        
        If KANTORCABANG.ListIndex = -1 Then
            Call MsgBox("Silahkan Pilih Kantor Cabang terlebih dahulu", vbInformation, "Cari Data")
            Exit Sub
        Else
            Set xlSheetData = Choose(KANTORCABANG.ListIndex + 1, Sheet1, Sheet2, Sheet3)
        End If
        
        Err.Clear: On Error GoTo errHandler:
        
        With xlSheetData
            .Range("I1").Value = "Surname"                      '<-- BERDASARKAN
            .Range("I2").Value = "*" & KATAKUNCI.Value & "*"    '<-- KATA KUNCI
            .Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                .Range("I1:I2"), Copytorange:=.Range("K1:Q1"), Unique:=False
            
            sNamaTabel = Choose(KANTORCABANG.ListIndex + 1, "HasilSurabaya", "HasilJakarta", "HasilSemarang")
            TABELDATA.RowSource = .Range(sNamaTabel).ADDRESS(External:=True)
            HASILCARI.Caption = TABELDATA.ListCount
        End With
        
    errHandler:
        If Err.Number <> 0 Then
            Call MsgBox("Maaf data yang dicari tidak ditemukan", vbInformation, "Cari Data")
        End If
    
        Err.Clear: On Error GoTo 0:
    End Sub

    Untuk baris :

    .Range("I1").Value = "Surname"

    ubah sesuai keinginan. Misalkan data yang dicari ada di kolom First Name, maka ubah nilai Surname di atas menjadi First Name. Ingat, perubahan ini bersifat statis. Klo mau mengubah kolom pencarian, maka nilai baris script di atas harus diubah secara manual. Klo mau mengubahnya secara dinamis, ya gunakan ComboBox saja.

    Demikian.

  2. Caton

    Mei 16 Terverifikasi Indonesia + 19.626 Poin

    @Robyrubyjane ...

    Untuk pencarian menggunakan Advanced Filter seperti contoh yang Anda berikan, bisa menggunakan Wildcard, misalkan *ace, *ace*, *bisa dan sebagainya. Untuk pencarian dengan metode lainnya, bisa menggunakan fungsi FILTER (VBA Excel 2021 ~ Excel 365), atau dengan fungsi LIKE.

    Untuk contoh, sekarang belum sempat saya buat. Mungkin nanti malam saya bikinkan...

    Demikian.

  3. Di sunting 2 minggu lalu oleh Robyrubyjane

    baik terima kasih mas

  4. Caton

    Mei 17 Terverifikasi Indonesia + 19.626 Poin
    Di sunting 2 minggu lalu oleh Caton

    @Robyrubyjane ...

    Buka modul UserForm FORMCARI. Kemudian pada Event Procedure CARIDATA_Click() temukan baris script berikut :

    CariSurabaya.Range("I2").Value = Me.KATAKUNCI.Value

    lalu ganti semua baris script yang sama pada prosedur tersebut menjadi :

    CariSurabaya.Range("I2").Value = "*" & Me.KATAKUNCI.Value & "*"

    Maaf, saya belum sempat bikin contoh lainnya.

    Demikian.

  5. @Caton @Robyrubyjane ...

    Buka modul UserForm FORMCARI. Kemudian pada Event Procedure CARIDATA_Click() temukan baris script berikut :

    CariSurabaya.Range("I2").Value = Me.KATAKUNCI.Value

    lalu ganti semua baris script yang sama pada prosedur tersebut menjadi :

    CariSurabaya.Range("I2").Value = "*" & Me.KATAKUNCI.Value & "*"

    Maaf, saya belum sempat bikin contoh lainnya.

    Demikian.

    terima kasih banyak mas, sudah berhasil

  6. Di sunting 2 minggu lalu oleh Robyrubyjane

    @Caton @Robyrubyjane ...

    Buka modul UserForm FORMCARI. Kemudian pada Event Procedure CARIDATA_Click() temukan baris script berikut :

    CariSurabaya.Range("I2").Value = Me.KATAKUNCI.Value

    lalu ganti semua baris script yang sama pada prosedur tersebut menjadi :

    CariSurabaya.Range("I2").Value = "*" & Me.KATAKUNCI.Value & "*"

    Maaf, saya belum sempat bikin contoh lainnya.

    Demikian.

    Mas izin bertanya lagi mengenai search engine yang saya buat, kalo saya ingin nyari data tapi saya milih kantor cabang tapi ga harus milih berdasarkan(kolom dari keyword yang mau dicari gitu) jadi kek dihapus aja gitu "berdasarkan" nya, jadi langsung ketik keyword gitu di kata kunci dan langsung bisa nyari data baik itu data nya ada pada kolom terms maupun deskripsi gitu? Mohon Bantuannya mas. Terima kasih sebelumnya, Mohon maaf jika nanya lagi mas

  7. Caton

    Mei 17 Terverifikasi Jawaban Terpilih Indonesia + 19.626 Poin

    @Robyrubyjane ...

    Coba ubah script Event Procedure CARIDATA_Click() menjadi :

    Private Sub CARIDATA_Click()
        Dim sNamaTabel As String
        Dim xlSheetData As Range
        
        If KANTORCABANG.ListIndex = -1 Then
            Call MsgBox("Silahkan Pilih Kantor Cabang terlebih dahulu", vbInformation, "Cari Data")
            Exit Sub
        Else
            Set xlSheetData = Choose(KANTORCABANG.ListIndex + 1, Sheet1, Sheet2, Sheet3)
        End If
        
        Err.Clear: On Error GoTo errHandler:
        
        With xlSheetData
            .Range("I1").Value = "Surname"                      '<-- BERDASARKAN
            .Range("I2").Value = "*" & KATAKUNCI.Value & "*"    '<-- KATA KUNCI
            .Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                .Range("I1:I2"), Copytorange:=.Range("K1:Q1"), Unique:=False
            
            sNamaTabel = Choose(KANTORCABANG.ListIndex + 1, "HasilSurabaya", "HasilJakarta", "HasilSemarang")
            TABELDATA.RowSource = .Range(sNamaTabel).ADDRESS(External:=True)
            HASILCARI.Caption = TABELDATA.ListCount
        End With
        
    errHandler:
        If Err.Number <> 0 Then
            Call MsgBox("Maaf data yang dicari tidak ditemukan", vbInformation, "Cari Data")
        End If
    
        Err.Clear: On Error GoTo 0:
    End Sub

    Untuk baris :

    .Range("I1").Value = "Surname"

    ubah sesuai keinginan. Misalkan data yang dicari ada di kolom First Name, maka ubah nilai Surname di atas menjadi First Name. Ingat, perubahan ini bersifat statis. Klo mau mengubah kolom pencarian, maka nilai baris script di atas harus diubah secara manual. Klo mau mengubahnya secara dinamis, ya gunakan ComboBox saja.

    Demikian.

  8. @Caton @Robyrubyjane ...

    Coba ubah script Event Procedure CARIDATA_Click() menjadi :

    Private Sub CARIDATA_Click()
        Dim sNamaTabel As String
        Dim xlSheetData As Range
        
        If KANTORCABANG.ListIndex = -1 Then
            Call MsgBox("Silahkan Pilih Kantor Cabang terlebih dahulu", vbInformation, "Cari Data")
            Exit Sub
        Else
            Set xlSheetData = Choose(KANTORCABANG.ListIndex + 1, Sheet1, Sheet2, Sheet3)
        End If
        
        Err.Clear: On Error GoTo errHandler:
        
        With xlSheetData
            .Range("I1").Value = "Surname"                      '<-- BERDASARKAN
            .Range("I2").Value = "*" & KATAKUNCI.Value & "*"    '<-- KATA KUNCI
            .Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                .Range("I1:I2"), Copytorange:=.Range("K1:Q1"), Unique:=False
            
            sNamaTabel = Choose(KANTORCABANG.ListIndex + 1, "HasilSurabaya", "HasilJakarta", "HasilSemarang")
            TABELDATA.RowSource = .Range(sNamaTabel).ADDRESS(External:=True)
            HASILCARI.Caption = TABELDATA.ListCount
        End With
        
    errHandler:
        If Err.Number <> 0 Then
            Call MsgBox("Maaf data yang dicari tidak ditemukan", vbInformation, "Cari Data")
        End If
    
        Err.Clear: On Error GoTo 0:
    End Sub

    Untuk baris :

    .Range("I1").Value = "Surname"

    ubah sesuai keinginan. Misalkan data yang dicari ada di kolom First Name, maka ubah nilai Surname di atas menjadi First Name. Ingat, perubahan ini bersifat statis. Klo mau mengubah kolom pencarian, maka nilai baris script di atas harus diubah secara manual. Klo mau mengubahnya secara dinamis, ya gunakan ComboBox saja.

    Demikian.

    Terima kasih dengan sangat banyak banyak mas

  9. minggu lalu

    @Caton
    mas mohon maaf banget nanya lagi,
    tapi kodingan nya udah aku coba dan malah error mas kek gini
    Screenshot 2023-05-19 092856.pngScreenshot 2023-05-19 092906.png
    itu kenapa yah mas, maaf sekali lagi.

  10. Caton

    Mei 19 Terverifikasi Indonesia + 19.626 Poin

    @Robyrubyjane ...

    Oia... ada yang salah. Pada awal baris pada prosedur tersebut, ada baris inisialisasi varibel :

    Dim xlSheetData As Range

    Seharusnya, baris tersebut merupakan inisialisasi variabel Worksheet. Jadi seharusnya :

    Dim xlSheetData As Worksheet

    Demikian.

  11. @Caton Bisa mas, Terima kasih dengan sangat banyak.

  12. Caton

    Mei 19 Terverifikasi Indonesia + 19.626 Poin

    @Robyrubyjane ...

    Sama-sama mas bro... :)

  13. 7 hari yang lalu
    Di sunting 7 hari yang lalu oleh Robyrubyjane

    @Caton
    mas mohon maaf izin bertanya lagi misalkan ga ngerepotin.

    jadi aku ada referensi di youtube mengenai mencari data dari berbagai kolom, tapi aku belum paham cara implementasiin koding tersebut ke kodingan aku. boleh bisa dilihat ga mas, apakah memungkinkan?
    Screenshot 2023-05-22 144200.png
    lberikut linknya mas

    ternyata project magang yang diminta oleh mentor ku, dia gamau cuma bisa satu kolom kalo bisa semua kolom. udah aku usahain tapi ga berhasil. Mohon bantuannya mas sekali lagi. Terima kasih banyak.

  14. Caton

    Mei 22 Terverifikasi Indonesia + 19.626 Poin

    @Robyrubyjane ...

    Pada script yang contohkan di atas, pada bagian :

        With xlSheetData
            .Range("I1").Value = "Surname"                      '<-- BERDASARKAN
            .Range("I2").Value = "*" & KATAKUNCI.Value & "*"    '<-- KATA KUNCI
            .Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                .Range("I1:I2"), Copytorange:=.Range("K1:Q1"), Unique:=False
            
            sNamaTabel = Choose(KANTORCABANG.ListIndex + 1, "HasilSurabaya", "HasilJakarta", "HasilSemarang")
            TABELDATA.RowSource = .Range(sNamaTabel).ADDRESS(External:=True)
            HASILCARI.Caption = TABELDATA.ListCount
        End With

    kita dapat memindahkan kolom pencarian berdasarkan sel I1, yakni pada bagian :

    .Range("I1").Value = "Surname"                      '<-- BERDASARKAN

    Jadi, dengan mengubah nilai sel tersebut dengan nama kolom tabel yang diinginkan, maka proses pencarian bisa dilakukan dari kolom yang diinginkan. Acuannya darimana? Dari nama kolomnya :

    Untitled.png

    Maka, semisalkan ingin mencari nilai dari kolom Email, maka ganti nilai I1 menjadi Email. Coba ubah script prosedur Sub UserForm_Initialize() menjadi seperti berikut :

    Private Sub UserForm_Initialize()
        With KANTORCABANG
            .AddItem "Surabaya"
            .AddItem "Jakarta"
            .AddItem "Semarang"
            
            .ListIndex = 0
        End With
        
        BERDASARKAN.List = Application.Transpose(Sheet1.Range("A1:G1").Value)
        BERDASARKAN.ListIndex = 1
    End Sub

    Sedangkan untuk script Event Procedure CARIDATA_Click() ubah menjadi (hanya di bagian berikut) :

        With xlSheetData
            .Range("I1").Value = BERDASARKAN                   '<-- BERDASARKAN
            ...
        End With

    Catatan : Untuk kolom ID, pencarian dengan Wildcard tidak akan berhasil. Karena nilai pada kolom ID bertipe numerik, sedangkan pencarian dengan Wildcard digunakan untuk nilai bertipe alphanumerik. Jadi, setidaknya ubah scriptnya menjadi :

        With xlSheetData
            .Range("I1").Value = BERDASARKAN                   '<-- BERDASARKAN
            
            If BERDASARKAN.ListIndex = 0 Then
                .Range("I2").Value = KATAKUNCI.Value
            Else
                .Range("I2").Value = "*" & KATAKUNCI.Value & "*"    '<-- KATA KUNCI
            End If
            ...
        End With

    Untuk link yang dimaksud, belum sempat saya lihat. Coba dulu implementasikan script di atas.

    Demikian.

  15. 4 hari yang lalu

    @Caton baik terima kasih mas, sebenarnya dari search engine saya masih ada permasalahan. tapi tidak apa mas terima kasih banyak atas bantuannya.

 

atau Mendaftar untuk ikut berdiskusi!