Rumus Left in Range beda sheet dalam satu workbook

  1. 10 bulan yang lalu
    Function angkut(seet As String, kotak As String)
    Dim rangesum As Variant
    Dim sum_range As Variant
    Dim cr_range1 As Range
    Dim cr_range2 As Range
    Dim cr_range3 As Range
    Dim cr_range4 As Range
    Dim kode_awal As Variant
    Dim kriteria1 As Variant
    Dim kriteria2 As Variant
    Dim kriteria3 As Variant
    Dim kriteria4 As Variant
    Dim kriteria5 As Variant
    Dim result As Variant
    Dim result2 As Variant
    Dim R As String
    
    'menetukan nilai masing - masing variable
    Set rangesum = ThisWorkbook.Sheets(seet).Range("N:N")
    Set cr_range1 = ThisWorkbook.Sheets(seet).Range("M:M")
    Set cr_range2 = ThisWorkbook.Sheets(seet).Range("U:U")
    Set cr_range3 = ThisWorkbook.Sheets(seet).Range("R:R")
    Set cr_range4 = ThisWorkbook.Sheets(seet).Range("L:L")
    
    kode_awal = Left(cr_range3, 1)
    
    kriteria1 = ThisWorkbook.Sheets("REKAP").Range(kotak)
    kriteria2 = "1"
    kriteria3 = "T"
    kriteria4 = "PNI"
    kriteria5 = "PNM"
    'angkut = rangesum
    'Selection.Name = "" & rangesum
    
    result = Application.WorksheetFunction.SumIfs(rangesum, cr_range1, kriteria1, cr_range2, _
    kriteria2, cr_range3, kriteria3, cr_range4, kriteria4)
    
    result2 = Application.WorksheetFunction.SumIfs(rangesum, cr_range1, kriteria1, cr_range2, _
    kriteria2, cr_range3, kriteria3, cr_range4, kriteria5)
    
    
    
    angkut = result + result2
    
    End Function
    
    

    saya mencoba mengambil huruf pertama dari sheet 21 pada kolom R kode_awal = Left(cr_range3, 1) akan tetapi setelah function angkut dijalankan hasil yang diapat adalah #VALUE. ada yang bisa membantu untuk memperbaikinya? kalau kurang jelas dengan pertanyaan nya boleh ditanyakan kembali terimakasih

    Ada beberapa poin yang akan saya jelaskan dari script VBA di atas. Sumber data yang saya gunakan untuk pengujian adalah data pada sheet 16.

    [1]. Pada script di atas, baris kode:

    kode_awal = Left(cr_range3, 1)

    pada dasarnya tidak berguna oleh karena tidak digunakan pada baris manapun dalam fungsi Angkut() tersebut, sehingga baris tersebut dapat dihapus. Lalu bagaimana cara membandingkan nilai pada sheet sumber data dengan karakter yang diinginkan (dalam hal ini huruf "T")? Solusinya sesuai dengan deskripsi fungsi SUMIFS, yakni bisa menggunakan Wildcard. Jadi untuk mencari data yang berawalan huruf "T", maka variabel kriteria3 dapat dideklarasikan menjadi:

    kriteria3 = "T*"

    [2]. Jika nilai pada kolom L pada sheet 16 hanya berisi nilai PNI, KBTO, PNM, KBTP atau WIN saja, maka untuk mendapatkan hasil dengan kriteria PNI atau PNM, variabel kriteria4 dan kriteria5 dapat disatukan ke dalam satu variabel saja menjadi:

    kriteria4 = "PN?"

    Dengan demikian, baris script:

    result2 = Application.WorksheetFunction.SumIfs(rangesum, cr_range1, kriteria1, cr_range2, _
    kriteria2, cr_range3, kriteria3, cr_range4, kriteria5)

    dapat ditiadakan (dihapus). Dari kedua poin ini, script VBA di atas dapat disederhanakan menjadi:

    Function angkut(seet As String, kotak As String)
    Dim rangesum As Variant
    Dim cr_range1 As Range
    Dim cr_range2 As Range
    Dim cr_range3 As Range
    Dim cr_range4 As Range
    Dim kriteria1 As Variant
    Dim kriteria2 As Variant
    Dim kriteria3 As Variant
    Dim kriteria4 As Variant
    
    'menetukan nilai masing - masing variable
    Set rangesum = ThisWorkbook.Sheets(seet).Range("N:N")
    Set cr_range1 = ThisWorkbook.Sheets(seet).Range("M:M")
    Set cr_range2 = ThisWorkbook.Sheets(seet).Range("U:U")
    Set cr_range3 = ThisWorkbook.Sheets(seet).Range("R:R")
    Set cr_range4 = ThisWorkbook.Sheets(seet).Range("L:L")
    
    kriteria1 = ThisWorkbook.Sheets("REKAP").Range(kotak)
    kriteria2 = "1"
    kriteria3 = "T*"
    kriteria4 = "PN?"
    
    angkut = Application.WorksheetFunction.SumIfs(rangesum, cr_range1, kriteria1, cr_range2, _
    kriteria2, cr_range3, kriteria3, cr_range4, kriteria4)
    End Function

    Catatan: Jika script di atas digunakan pada sheet 21, dimana tidak ada kolom bantu R (seperti pada sheet 16), maka deklarasi variabel cr_range2 harus disesuaikan ke kolom data yang sesuai, yakni menjadi:

    Set cr_range2 = ThisWorkbook.Sheets(seet).Range("T:T")

    Demikian beberapa hal yang mungkin dapat dikoreksi dari script VBA yang mas @Robyrnl gunakan... ;)

  2. Caton

    25 Jan 2018 Terverifikasi Jawaban Terpilih Indonesia + 12.602 Poin

    Ada beberapa poin yang akan saya jelaskan dari script VBA di atas. Sumber data yang saya gunakan untuk pengujian adalah data pada sheet 16.

    [1]. Pada script di atas, baris kode:

    kode_awal = Left(cr_range3, 1)

    pada dasarnya tidak berguna oleh karena tidak digunakan pada baris manapun dalam fungsi Angkut() tersebut, sehingga baris tersebut dapat dihapus. Lalu bagaimana cara membandingkan nilai pada sheet sumber data dengan karakter yang diinginkan (dalam hal ini huruf "T")? Solusinya sesuai dengan deskripsi fungsi SUMIFS, yakni bisa menggunakan Wildcard. Jadi untuk mencari data yang berawalan huruf "T", maka variabel kriteria3 dapat dideklarasikan menjadi:

    kriteria3 = "T*"

    [2]. Jika nilai pada kolom L pada sheet 16 hanya berisi nilai PNI, KBTO, PNM, KBTP atau WIN saja, maka untuk mendapatkan hasil dengan kriteria PNI atau PNM, variabel kriteria4 dan kriteria5 dapat disatukan ke dalam satu variabel saja menjadi:

    kriteria4 = "PN?"

    Dengan demikian, baris script:

    result2 = Application.WorksheetFunction.SumIfs(rangesum, cr_range1, kriteria1, cr_range2, _
    kriteria2, cr_range3, kriteria3, cr_range4, kriteria5)

    dapat ditiadakan (dihapus). Dari kedua poin ini, script VBA di atas dapat disederhanakan menjadi:

    Function angkut(seet As String, kotak As String)
    Dim rangesum As Variant
    Dim cr_range1 As Range
    Dim cr_range2 As Range
    Dim cr_range3 As Range
    Dim cr_range4 As Range
    Dim kriteria1 As Variant
    Dim kriteria2 As Variant
    Dim kriteria3 As Variant
    Dim kriteria4 As Variant
    
    'menetukan nilai masing - masing variable
    Set rangesum = ThisWorkbook.Sheets(seet).Range("N:N")
    Set cr_range1 = ThisWorkbook.Sheets(seet).Range("M:M")
    Set cr_range2 = ThisWorkbook.Sheets(seet).Range("U:U")
    Set cr_range3 = ThisWorkbook.Sheets(seet).Range("R:R")
    Set cr_range4 = ThisWorkbook.Sheets(seet).Range("L:L")
    
    kriteria1 = ThisWorkbook.Sheets("REKAP").Range(kotak)
    kriteria2 = "1"
    kriteria3 = "T*"
    kriteria4 = "PN?"
    
    angkut = Application.WorksheetFunction.SumIfs(rangesum, cr_range1, kriteria1, cr_range2, _
    kriteria2, cr_range3, kriteria3, cr_range4, kriteria4)
    End Function

    Catatan: Jika script di atas digunakan pada sheet 21, dimana tidak ada kolom bantu R (seperti pada sheet 16), maka deklarasi variabel cr_range2 harus disesuaikan ke kolom data yang sesuai, yakni menjadi:

    Set cr_range2 = ThisWorkbook.Sheets(seet).Range("T:T")

    Demikian beberapa hal yang mungkin dapat dikoreksi dari script VBA yang mas @Robyrnl gunakan... ;)

  3. terimakasih mas @Caton atas masukkan dan koreksinya, akan saya coba dulu mas

 

atau Mendaftar untuk ikut berdiskusi!