Input dan Cari data dr sheet lain

  1. ‹ Older
  2. 2 tahun lalu

    nggak nemu yg sesuai om @tghfox
    sy butuh contoh penyelesaian dgn code atau logika excel utk file sy diatas... :D

  3. Caton

    4 Okt 2017 Terverifikasi Indonesia + 14.000 Poin

    Jika bingung mempelajari aplikasinya mas @Tghfox, silahkan dicoba, dipelajari dan dimodifikasi file terlampir bro @mbozonese ... :)

  4. mantaaap om @Caton...
    klop dan sesuai. mksh banget om udh membantu...

  5. Caton

    5 Okt 2017 Terverifikasi Indonesia + 14.000 Poin

    Sama-sama bro @mbozonese ... ;)

  6. 2 minggu lalu

    Mas caton maaf tanya donk
    Klo hasil pencarian hasilnya jangan menurun tapi hasiln ke kanan apa yg d rubah ya

  7. Caton

    Agu 8 Terverifikasi Indonesia + 14.000 Poin

    @Meiby ...

    Pada file yang saya lampirkan di atas, ada prosedur Sub CariData(). Pada prosedur tersebut, ada baris perintah:

    ...
    '+-- Tampilkan dengan men-transpose arah kolom.
    Sheet1.Range("B12:B15") = Application.Transpose(xlRangeDBase)
    ...

    Nah baris itu yang diedit menjadi:

    ...
    '+-- Tampilkan dengan men-transpose arah kolom.
    Sheet1.Range("B12:E12") = xlRangeDBase.Value
    ...

    Perhatikan, rangenya tidak lagi 1 kolom (B12:B15), namun sudah menjadi 1 baris (B12:E12). Sesuaikan range target dengan range target aktualnya.

    Demikian.

  8. Thanks om
    Om caton satu lagi ya kan file di atas file destinationnya sheet2
    Apabila pada Excel d atas ada beberapa sheet seperti sheet2, sheet3, sheet4, dan seterusnya
    Tetapi d tiap sheet ada beberapa file yg sama sehingga data pada sheet terakhir yg kita ambil.
    Contoh : Sheet3 ada NIP 123456 sheet6 ada jg NIP 123456 sehingga yang kita ambil pada sheet6
    Gitu om.
    Thanks sebelumnya.

  9. minggu lalu

    Caton

    Agu 9 Terverifikasi Indonesia + 14.000 Poin

    @Meiby ...

    Secara sederhana, lakukan saja proses pengulangan untuk setiap objek Worksheet pada Workbook, dan periksa range data pada setiap Worksheet apakah ada data yang dicari. Misalkan:

    Public Sub CariData()
        Dim xlWS As Worksheet
        Dim sWhat As String, sName As String
        Dim lRow As Long, lIdx As Long
        Dim xlRange As Range
        
        Set xlRange = Sheet1.Range("C3")
        If Len(xlRange.Value) Then
            With Sheet1
                .Range("H3").ClearContents
                .Range("H5:H9").ClearContents
            End With
            
            lIdx = 0
            On Error Resume Next
            For Each xlWS In ThisWorkbook.Worksheets
                sName = xlWS.Name
                If sName <> Sheet1.Name Then
                    lRow = CLng(WorksheetFunction.Match(xlRange, xlWS.Range("A2:A26"), 0))
                    If Err = 0 Then
                        lIdx = lIdx + 1
                        Sheet1.Cells(lIdx + 4, "H") = "Sheet " & sName & " — baris ke-" & lRow
                    Else
                        Err.Clear
                    End If
                End If
            Next
            Err.Clear: On Error GoTo 0
            
            If lIdx Then
                Sheet1.Cells(3, "H") = "Sheet " & sName & " — baris ke-" & lRow
            End If
        End If
    End Sub

    Pada prosedur di atas, baris perintah:

    ...
    If lIdx Then
        Sheet1.Cells(3, "H") = "Sheet " & sName & " — baris ke-" & lRow
    End If
    ...

    akan menjadi penentu apakah ada data yang ditemukan. Jika variabel lIdx > 0 maka data ditemukan. Untuk menentukan pada sheet apa, gunakan variabel sName, dan untuk menentukan baris data, gunakan variabel lRow. Misalkan:

    ...
    Set xlWS = Worksheets(sName)
    Set xlRangeDBase = xlWS.Range(xlWS.Cells(lRow, "A"), xlWS.Cells(lRow, "D"))
    Sheet1.Range("B10:E10") = xlRangeDBase.Value
    ...

    Selain dengan melakukan pengulangan terhadap setiap objek Worksheet, bisa juga dilakukan pengulangan dengan memanfaatkan Defined Range (Named Range), atau melalui Array dan sebagainya. Namun, saya rasa pengulangan terhadap setiap objek Worksheet akan lebih mudah dipahami dan ditelusuri. Contoh terlampir.

    Demikan, selamat mencoba...

  10. Ok terima kasih on caton

  11. Mas masih error' untuk menggunakan data di bawah ini

    Set xlWS = Worksheets(sName)
    Set xlRangeDBase = xlWS.Range(xlWS.Cells(lRow, "A"), xlWS.Cells(lRow, "D"))
    Sheet1.Range("B10:E10") = xlRangeDBase.Value

    Berikut terlampir errornya

  12. Caton

    Agu 9 Terverifikasi Indonesia + 14.000 Poin
    Di sunting minggu lalu oleh Caton

    @Meiby ...

    Jelas saja akan error. Pada gambar, terlihat perintah untuk mendefinisikan objek xlWS melalui nama sheet pada variabel sName sebelum variabel sName diisi dengan nilai tertentu (variabel sName masih kosong). Alhasil, objek xlWS didefinisikan ke sheet yang tidak ada! Coba periksa baris berikut:

    Public Sub CariData()
        Dim xlWS As Worksheet
        Dim sWhat As String, sName As String
        Dim lRow As Long, lIdx As Long
        Dim xlRange As Range
        
        Set xlWS = Worksheets(sName)        '+-- <= variabel sName = vbNullstring (kosong)
        'Set xlRange = Sheet1.Range("C3")
        If Len(xlRange.Value) Then
    ...

    Sebagaimana yang telah saya sampaikan di atas, pada bagian:

    ...
    If lIdx Then
        Sheet1.Cells(3, "H") = "Sheet " & sName & " — baris ke-" & lRow
    End If
    ...

    ditentukan apakah data ditemukan atau tidak. Jadi seharusnya, definisi objek xlWS harus berada di dalam blok kondisional tersebut, misalkan:

    ...
    If lIdx Then
        Set xlWS = Worksheets(sName)
        Set xlRangeDBase = xlWS.Range(xlWS.Cells(lRow, "A"), xlWS.Cells(lRow, "D"))
        Sheet1.Range("B10:E10") = xlRangeDBase.Value
    End If
    ...

    Pada blok kondisional tersebut, jika variabel lIdx bernilai > 0, maka artinya ada data yang ditemukan. Dengan demikian proses aktual untuk mengisi data dilakukan di dalam blok tersebut. Untuk baris script lainnya (dari awal sampai sebelum blok kondisional tersebut) pada dasarnya hanya untuk melakukan proses pencarian data saja. Oleh karena ada kemungkinan data ditemukan dalam beberapa sheet, maka cara termudah adalah dengan membuat sebuah variabel yang berfungsi sebagai penanda (bahwa data ditemukan). Jika data tidak ditemukan, maka variabel lIdx akan bernilai 0. Cara lain untuk membuat variabel penanda, bisa dengan menggunakan variabel bertipe Boolean. Saya menggunakan variabel lIdx hanya sebagai contoh, agar dapat saya gunakan untuk menampilkan daftar data yang ditemukan...

    Jadi, gunakan blok kondisional:

    ...
    If lIdx Then
        '+--- Susun di blok ini proses untuk menampilkan datanya.
    End If
    ...

    untuk menampilkan hasil pencarian. Klo perlu, tambahkan pesan jika data tidak ditemukan, misalkan dengan menambahkan perintah seperti berikut:

    ...
    If lIdx Then
        '+--- Susun di blok ini proses untuk menampilkan datanya.
    Else
        MsgBox "Data tidak ditemukan!"
    End If
    ...

    Demikian, selamat mencoba.

  13. 7 hari yang lalu

    ka melanjutkan diskusi ini, saya ada kesulitan mengcopy hasil dari dbase ke sheet lain namun dengan tambahan kata hasil dari vlookup gmn ya? berikut contoh terlampir.
    terimakasih atas bantuannya

  14. Ini mba Reni
    D klik gabung aja d sheet 3
    Saya ujicoba

  15. Mas caton mohon bantuannya
    Knp data ada yang d cari tidak sesuai

  16. Caton

    Agu 12 Terverifikasi Indonesia + 14.000 Poin
    Di sunting 7 hari yang lalu oleh Caton

    @Meiby ...

    Coba revisi scriptnya menjadi:

    Option Explicit
    
    Public Sub CariData()
        Dim xlWS As Worksheet, xlRangeDBase As Range
        Dim lRow As Long, lIdx As Long
        Dim xlRange As Range    
        Dim sName As String
        
        Set xlRange = Sheet1.Range("C3")
        If Len(xlRange.Value) Then
            lIdx = 0
            On Error Resume Next
            Sheet1.Range("K3:O3").ClearContents
            For Each xlWS In ThisWorkbook.Worksheets
                sName = xlWS.Name
                If sName <> Sheet1.Name Then
                    lRow = CLng(WorksheetFunction.Match(xlRange, xlWS.Range("A2:A26"), 0))
                    If Err = 0 Then
                        lIdx = xlWS.Index
                    Else
                        Err.Clear
                    End If
                End If
            Next
            Err.Clear: On Error GoTo 0
            
            If lIdx Then
                Set xlWS = Worksheets(lIdx)
                Set xlRangeDBase = xlWS.Range(xlWS.Cells(lRow + 1, "A"), xlWS.Cells(lRow + 1, "G"))
                Sheet1.Range("K3:O3") = xlRangeDBase.Value
            End If
        End If
    End Sub

    Demikian.

  17. 6 hari yang lalu

    Mas caton pada sheet1.range("k3:o3") = xlrangedbase.value

    Di bawa nya saya tambahin
    Sheet1.cells(3,"h") = "baris ke " & lrow

    Kenapa klo saya tambahin sname di tidak membaca sheet klo lrow di bs baca

  18. Mas ada batasan untuk jumlah sheet yg akan d cari

  19. Caton

    Agu 13 Terverifikasi Indonesia + 14.000 Poin

    @Meiby ...

    Variabel sName mau digunakan untuk apa? Variabel sName dan variabel lRow itu berbeda tujuannya. Awalnya, variabel sName saya maksudkan untuk menyimpan nama sheet dimana data ditemukan. Namun setelah saya tinjau kembali script pertama, ternyata variabel sName tersebut tidak berada pada tempat yang tepat, karena jika data terakhir ada pada sheet ke-4 dari total 5 sheet, variabel sName pada kenyataannya akan tetap berisi nama sheet ke-5, sesuai dengan proses pengulangan ke seluruh objek sheet yang ada. Solusinya sih bisa saja dengan menyiapkan variabel tambahan untuk menampung nama sheet terakhir, misalkan saja:

    ...
    Dim sName As String, sSheetName As String
    ...
    For Each xlWS In ThisWorkbook.Worksheets
        sName = xlWS.Name
        If sName <> Sheet1.Name Then
            lRow = CLng(WorksheetFunction.Match(xlRange, xlWS.Range("A2:A26"), 0))
            If Err = 0 Then
                lIdx = xlWS.Index
                '+-- Variabel ekstra untuk menyimpan nama sheet.
                sSheetName = sName
            Else
                Err.Clear
            End If
        End If
    Next
    ...

    Namun saya anggap penambahan variabel baru tersebut tidak ada gunanya, karena untuk mendapatkan nama sheet terakhir yang ada datanya, cukup menggunakan variabel lIdx, misalkan:

    ...
    If lIdx Then
       Set xlWS = Worksheets(lIdx)
       Set xlRangeDBase = xlWS.Range(xlWS.Cells(lRow + 1, "A"), xlWS.Cells(lRow + 1, "G"))
       Sheet1.Range("K3:O3") = xlRangeDBase.Value
    
       '+-- Untuk mendapatkan nama sheet!
       sName = xlWS.Name
    End If
    ...

    Sedangkan variabel lRow bertujuan untuk menyimpan posisi indeks data terakhir saat data ditemukan. Tanpa variabel lRow, kita tidak akan dapat mengetahui dengan tepat pada posisi indeks ke berapa data akan diambil...

    Jadi, ketahui dulu tujuan dari masing-masing variabel sebelum menentukan akan menggunakannya untuk apa masing-masing variabel.

    Apakah ada batasan jumlah sheet yang dicari. Tidak... pengulangan akan dilakukan ke setiap objek sheet pada Workbook tersebut. Saran saya, lakukan pembatasan terhadap objek sheet yang ditelusuri, sehingga tidak ada proses evaluasi ke setiap sheet lainnya yang tidak berisi data yang akan dicari. Pada script yang saya berikan, batasannya hanya pada pengecualian terhadap Sheet1 saja...

    Demikian.

  20. Ok terima kasih banyak mas caton u penjelasannya

  21. 5 hari yang lalu

    @meiby terimakasih ka bantuannya... sangat membantu sekali... namun masih ada 2 permasalahan lg saat penggabungan colom dan cel dan koding harga untuk diskon..
    excel terlampir. jika memungkinkan mohon bantuannya ya kaka-kaka :) terimakasih sebelumnya

 

atau Mendaftar untuk ikut berdiskusi!