pemanggialan fungsi dinamik (drag) untuk mendapatkan value berbeda

  1. 6 tahun lalu
    Di sunting 6 tahun lalu oleh robyrnl
    Option Explicit
    
    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 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 cel 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 = "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 memanggil fungsi nya di formula bar dengan cara =angkut("16","E7")
    tapi kalau seperti itu gak bisa di drag kebawah, nanti nilai nya menjadi sama semua, mohon bantuannya bagaimana supaya saya bisa drag dan mendapatkan nilai sesuai dengan data nya

    ... saya memanggil fungsi nya di formula bar dengan cara =angkut("16","E7") ...

    Jika fungsi tersebut dipanggil dengan argumen kotak bersifat konstan (statis) seperti itu, tentunya hasilnya juga akan menjadi konstan meskipun disalin ke sel lain. Misalkan, UDF (User Defined Function) tersebut dibuat di sel A2, kemudian disalin ke range A3:A5, maka UDF (atau formula) pada range A3:A5 akan tetap bernilai sama seperti berikut:

    =angkut("16","E7")

    Solusinya bisa dengan menggunakan fungsi ROW. Misalkan, UDF tersebut dibuat pada sel A2, maka, dengan formula =ROW()+5, kita akan mendapatkan hasil 7 (2+5). Jika fungsi ROW dipanggil dengan argumen seperti =ROW(A7), maka kita akan mendapatkan hasil yang sama, yakni 7. Dengan demikian, masih dengan asumsi UDF dibuat pada sel A2, kita bisa membuat UDF tersebut dipanggil secara dinamis dengan cara:

    =angkut("16","E"&ROW()+5)

    sehingga ketika UDF tersebut dipanggil, nilai argumen kotak akan dilewatkan sebagai nilai E7. Atau, bisa juga dengan menggunakan cara:

    =angkut("16","E"&ROW(A7))

    Dengan demikian, jika kedua UDF tersebut di atas didrag ke bawah, fungsi ROW pada UDF tersebut akan disesuaikan dengan baris dimana UDF tersebut berada.

    Demikian yang mungkin bisa dicoba... ;)

  2. Caton

    24 Jan 2018 Terverifikasi Jawaban Terpilih Indonesia + 20.101 Poin

    ... saya memanggil fungsi nya di formula bar dengan cara =angkut("16","E7") ...

    Jika fungsi tersebut dipanggil dengan argumen kotak bersifat konstan (statis) seperti itu, tentunya hasilnya juga akan menjadi konstan meskipun disalin ke sel lain. Misalkan, UDF (User Defined Function) tersebut dibuat di sel A2, kemudian disalin ke range A3:A5, maka UDF (atau formula) pada range A3:A5 akan tetap bernilai sama seperti berikut:

    =angkut("16","E7")

    Solusinya bisa dengan menggunakan fungsi ROW. Misalkan, UDF tersebut dibuat pada sel A2, maka, dengan formula =ROW()+5, kita akan mendapatkan hasil 7 (2+5). Jika fungsi ROW dipanggil dengan argumen seperti =ROW(A7), maka kita akan mendapatkan hasil yang sama, yakni 7. Dengan demikian, masih dengan asumsi UDF dibuat pada sel A2, kita bisa membuat UDF tersebut dipanggil secara dinamis dengan cara:

    =angkut("16","E"&ROW()+5)

    sehingga ketika UDF tersebut dipanggil, nilai argumen kotak akan dilewatkan sebagai nilai E7. Atau, bisa juga dengan menggunakan cara:

    =angkut("16","E"&ROW(A7))

    Dengan demikian, jika kedua UDF tersebut di atas didrag ke bawah, fungsi ROW pada UDF tersebut akan disesuaikan dengan baris dimana UDF tersebut berada.

    Demikian yang mungkin bisa dicoba... ;)

  3. terimkasih atas bantuannya, masalah saya terpecahkan

 

atau Mendaftar untuk ikut berdiskusi!