Rekap data berdasar periode

  1. 3 minggu lalu

    Selamat sore kak,

    saya mempunyai case terlampir , dimana ada banyak rekapan transaksi

    apakah bisa vba mengkondisikan
    semisal ditarik periode 3 bulan,, maka akan keluar data yg transaksi di 3 bulan tersebut
    besarta rekapan transaksi nya

    Mbak @anggun123 ...

    Pada script di atas, objek xRecapData.Items pada dasarnya hanya berisi 1 nilai saja, yakni berupa jumlah transaksi:

    If xRecapData.Exists(sKey) Then
        lCount = xRecapData(sKey) + 1
        xRecapData(sKey) = lCount
    Else
        xRecapData.Add sKey, 1
    End If

    Kalau ingin menyimpan beberapa data, dapat dilakukan dengan menggunakan Array, misalkan seperti berikut:

    If xRecapData.Exists(sKey) Then
        vDump = xRecapData(sKey)
        vDump(1) = vDump(1) + 1
        xRecapData(sKey) = vDump
    Else
        xRecapData.Add sKey, Array(vData(lR, 2), 1)
    End If

    Terlampir contohnya, semoga sesuai.

    Demikian.

  2. Caton

    Jan 6 Terverifikasi Indonesia + 17.922 Poin

    Mbak @anggun123 ...

    Silahkan dipelajari dari file terlampir, semoga sesuai.

    Demikian.

  3. 2 minggu lalu

    terima kasih om @Caton

    saya coba edit sedikit om,,
    Jadi saya asumsikan ada 3 kolom,,,, kalau sebelumnya hanya 2 kolom

    seperti ini om

    Screenshot_4.png

    dan yang diharapkan seperti ini,,
    Untuk transaksi yg paling banyak,, ada di urutan atas

    Screenshot_5.png

    Untuk skripnya saya edit menjadi seperti ini
    tapi sepertinya saya masih ada yg keliru,,, karena tdk berhasil :)

    Sub coba()
            Dim dDateA As Double, dDateB As Double, dValue As Double
            Dim vData As Variant, vPeriod As Variant
            Dim lR As Long, lCount As Long
            Dim xRecapData As Object
            Dim sKey, sUrl As String
            Dim periode As Integer
            Dim waktumundur As Date
            Dim sht As Worksheet: Set sht = Sheets("Rekap")
            
            periode = InputBox("" & vbLf & "Masukkan Periode bulan sebelumnya", "Periode", -1)
            waktumundur = DateAdd("m", periode, Date)
            
            lR = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
            If lR > 2 Then
                Set xRecapData = CreateObject("Scripting.Dictionary")
                vData = Sheet1.Range("A2:C" & lR).Value
                vPeriod = Application.Index(vData, 0, 3)
                
                For lR = 1 To UBound(vPeriod, 1)
                    dValue = CDate(vPeriod(lR, 1))
                    If (dValue >= waktumundur) And (dValue <= Date) Then
                        sKey = vData(lR, 1)
                        sUrl = vData(lR, 2)
                        If xRecapData.Exists(sKey) Then
                            lCount = xRecapData(sKey) + 1
                            xRecapData(sKey) = lCount
                        Else
                            xRecapData.Add sKey, 1
                        End If
                    End If
                Next
                
                lCount = xRecapData.Count
                If lCount > 0 Then
                    sht.Range("B8:C1000").ClearContents
                    
                    sht.Range("B8:B" & lCount + 7).Value = Application.Transpose(xRecapData.Keys)
                    sht.Range("C8:C" & lCount + 7).Value = Application.Transpose(xRecapData.Items)
                    sht.Range("D8:D" & lCount + 7).Value = Application.Transpose(xRecapData.Items)
                End If
            End If
    End Sub

  4. Caton

    Jan 8 Terverifikasi Jawaban Terpilih Indonesia + 17.922 Poin

    Mbak @anggun123 ...

    Pada script di atas, objek xRecapData.Items pada dasarnya hanya berisi 1 nilai saja, yakni berupa jumlah transaksi:

    If xRecapData.Exists(sKey) Then
        lCount = xRecapData(sKey) + 1
        xRecapData(sKey) = lCount
    Else
        xRecapData.Add sKey, 1
    End If

    Kalau ingin menyimpan beberapa data, dapat dilakukan dengan menggunakan Array, misalkan seperti berikut:

    If xRecapData.Exists(sKey) Then
        vDump = xRecapData(sKey)
        vDump(1) = vDump(1) + 1
        xRecapData(sKey) = vDump
    Else
        xRecapData.Add sKey, Array(vData(lR, 2), 1)
    End If

    Terlampir contohnya, semoga sesuai.

    Demikian.

  5. Terima kasih banyak om @Caton atas bantuannya
    Sudah sesuai harapan,,,

    Semoga om caton dilancarkan rezekinya, dan sehat selalu
    amin

 

atau Mendaftar untuk ikut berdiskusi!