Option Base 1
Dim kdAccLedger  As Long
Dim kdAccCustomer  As Long
Dim urutTrans  As Long
Sub testing()
'tambahkan no urut transaksi
    urutTrans = 0
    kdAccLedger = 871814
    kdAccCustomer = 6932942
'====
    Call telusuriData(Worksheets("Sheet1").Range("A32:J42"), 
Worksheets("Sheet2").Range("a13"))
End Sub
Function telusuriData(daerahku As Range, tujuannya As Range)
    m_NoReferensi = ""
    Dim kolstr_Tanggal, kolnum_Debet, kolNum_kredit, kolstr_NoReference As 
Integer
    kolstr_Tanggal = 1
    kolstr_Deskripsi = 2
    kolnum_Debet = 3
    kolNum_kredit = 4
    kolstr_NoReference = 7
    kolStr_Remark = 10
    Dim sel As Range

    Dim Arr_Simpan() As Variant
    Dim jumItem As Integer
    jumItem = 0
    For Each sel In daerahku.Rows
        isiNoReferensi = sel.Resize(1, 1).Offset(0, kolstr_NoReference - 
1).Value
' jika ada perubahan no reference
        If m_NoReferensi <> isiNoReferensi Then
            If m_NoReferensi <> "" Then
' jika no referensi sbelumnya tak kosong
                Call sortArray_2D(Arr_Simpan, 1)
                Call hilangkantambahan(Arr_Simpan, 1)
                Call TambahanZZ(Arr_Simpan, 1)
                Call SimpanKetujuan(Arr_Simpan, tujuannya)
            End If
            m_NoReferensi = sel.Resize(1, 1).Offset(0, kolstr_NoReference - 
1).Value
            jumItem = 0
            ReDim Arr_simpam(1, 1)
        End If
        If isiNoReferensi <> "" Then
            jumItem = jumItem + 1
            ReDim Preserve Arr_Simpan(7, jumItem)
            '1--> posting key
            '2--> Amount
            '3--> MM atau ZZ
            '4--> Transaction Date
            '5--> No Reference
            '6--> Remark
            '7--> Acc No , dari mana
            If sel.Resize(1, 1).Offset(0, kolnum_Debet - 1).Value > 0 Then
                Arr_Simpan(2, jumItem) = sel.Resize(1, 1).Offset(0, 
kolnum_Debet - 1).Value
            Else
                Arr_Simpan(2, jumItem) = sel.Resize(1, 1).Offset(0, 
kolNum_kredit - 1).Value
            End If
            If UCase(Trim(sel.Resize(1, 1).Offset(0, kolstr_Deskripsi - 
1).Value)) = "TOTAL" Then
                Arr_Simpan(3, jumItem) = "MM"
' untuk total sisi Bank debet ( 31 ) perusahaan Kredit ( 25 )
                If sel.Resize(1, 1).Offset(0, kolnum_Debet - 1).Value > 0 Then
                    Arr_Simpan(1, jumItem) = 25 & "_" & "0"
                Else
                    Arr_Simpan(1, jumItem) = 31 & "_" & "0"
                End If
                isiTanggal = sel.Resize(1, 1).Offset(0, kolstr_Tanggal - 
1).Value
                isiNoReference = sel.Resize(1, 1).Offset(0, kolstr_NoReference 
- 1).Value
            Else
' sisi Bank debet ( 25 ) perusahaan Kredit ( 31 )
                Arr_Simpan(3, jumItem) = ""
                If sel.Resize(1, 1).Offset(0, kolnum_Debet - 1).Value > 0 Then
                    Arr_Simpan(1, jumItem) = 31 & "_" & jumItem
                Else
                    Arr_Simpan(1, jumItem) = 25 & "_" & jumItem
                End If
                isiTanggal = ""
                isiNoReference = ""
            End If
' tak perlukan lagi
            Arr_Simpan(4, jumItem) = isiTanggal
            Arr_Simpan(5, jumItem) = isiNoReference
            Arr_Simpan(6, jumItem) = sel.Resize(1, 1).Offset(0, kolStr_Remark - 
1).Value
'            Arr_Simpan(7, jumItem) = "" ' diisi dari mana ?
            Arr_Simpan(7, jumItem) = kdAccCustomer
        End If
labloop:
    Next
    Call sortArray_2D(Arr_Simpan, 1)
    Call hilangkantambahan(Arr_Simpan, 1)
    Call TambahanZZ(Arr_Simpan, 1)
    Call SimpanKetujuan(Arr_Simpan, tujuannya)
End Function
Sub sortArray_2D(MyArray, posisikey)
    jumkol = UBound(MyArray, 1)
    Dim kel1 As Variant
    Dim kel2 As Variant
    ReDim kel1((jumkol))
    ReDim kel2((jumkol))
    For lLoop = 1 To UBound(MyArray, 2)
       For lLoop2 = lLoop To UBound(MyArray, 2)
            If UCase(MyArray(posisikey, lLoop2)) < UCase(MyArray(posisikey, 
lLoop)) Then
                For i = 1 To UBound(MyArray, 1)
                    kel1(i) = MyArray(i, lLoop)
                    kel2(i) = MyArray(i, lLoop2)
                    MyArray(i, lLoop) = kel2(i)
                    MyArray(i, lLoop2) = kel1(i)
                Next            End If        Next lLoop2
    Next lLoop
End Sub
Sub hilangkantambahan(MyArray, posisikey)
    For j = 1 To UBound(MyArray, 2)
        strnya = MyArray(posisikey, j)
        strnya = StrReverse(strnya)
        posisi = InStr(1, strnya, "_")
        If posisi > 0 Then
            strnya = Mid(strnya, posisi + 1)
        End If
        strnya = StrReverse(strnya)
        MyArray(posisikey, j) = strnya
    Next j
End SubSub TambahanZZ(MyArray, posisikey)
            '1--> posting key
            '2--> Amount
            '3--> MM atau ZZ
            '4--> Transaction Date
            '5--> No Reference
            '6--> Remark
            '7--> Acc No , dari mana
'  MM      ZZ
'  25      25
'          50
'  31      31
'          40
    jumItem = UBound(MyArray, 2)
    For j = 1 To jumItem
        If j = 1 And MyArray(3, j) = "MM" Then
            mPostingKey = MyArray(posisikey, j)
            mAmount = MyArray(2, j)
            mdoc = "ZZ"
            mTanggal = MyArray(4, j)
            mReferenceNo = MyArray(5, j)
            mRemark = MyArray(6, j)
            mAccNo = MyArray(7, j)
        End If
    Next j
    ReDim Preserve MyArray(7, jumItem + 1)
    MyArray(posisikey, jumItem + 1) = mPostingKey
    MyArray(2, jumItem + 1) = mAmount
    MyArray(3, jumItem + 1) = mdoc
    MyArray(4, jumItem + 1) = mTanggal
    MyArray(5, jumItem + 1) = mReferenceNo
    MyArray(6, jumItem + 1) = mRemark
    MyArray(7, jumItem + 1) = kdAccCustomer
    If mPostingKey = 25 Then
        mPostingKey = 50
    ElseIf mPostingKey = 31 Then
        mPostingKey = 40
    Else
        mPostingKey = ""
    End If
    jumItem = jumItem + 1
    ReDim Preserve MyArray(7, jumItem + 1)
    MyArray(posisikey, jumItem + 1) = mPostingKey
    MyArray(2, jumItem + 1) = mAmount
    MyArray(3, jumItem + 1) = "" ' mdoc
'    MyArray(4, jumItem + 1) = mTanggal
    MyArray(4, jumItem + 1) = ""
'    MyArray(5, jumItem + 1) = mReferenceNo
    MyArray(5, jumItem + 1) = ""
    MyArray(6, jumItem + 1) = mRemark
'    MyArray(7, jumItem + 1) = mAccNo
    MyArray(7, jumItem + 1) = kdAccLedger
End Sub
Sub SimpanKetujuan(MyArray, Tujuan As Range)
    Dim pjumItem As Integer
            '1--> posting key
            '2--> Amount
            '3--> Doc Type : MM atau ZZ
            '4--> Transaction Date
            '5--> No Reference
            '6--> Remark
            '7--> Acc No , dari mana
'====
' Tanggal    Doc-Type    ReferenceNo   PostingKey   AccNo    Amount   Remark
    pjumItem = UBound(MyArray, 2)
    For j = 1 To pjumItem
'tambahkan no urut transaksi
        If MyArray(3, j) <> "" Then
            urutTrans = urutTrans + 1
            Tujuan.Offset(j - 1, 0).Value = urutTrans
        End If
        Tujuan.Offset(j - 1, 1).Value = MyArray(4, j)
        Tujuan.Offset(j - 1, 2).Value = MyArray(3, j)
        Tujuan.Offset(j - 1, 3).Value = MyArray(5, j)
        Tujuan.Offset(j - 1, 4).Value = MyArray(1, j)
        Tujuan.Offset(j - 1, 5).Value = MyArray(7, j)
        Tujuan.Offset(j - 1, 6).Value = MyArray(2, j)
        Tujuan.Offset(j - 1, 7).Value = MyArray(6, j)
    Next j
    Set Tujuan = Tujuan.Offset(pjumItem, 0)
End Sub

 > To: [email protected]
> From: [email protected]
> Date: Fri, 2 Dec 2011 16:32:07 +0800
> Subject: Re: [belajar-excel] Masalah Lookup yang rumit
>
> Pak Sudarsono,
>
> Menurut saya hasilnya udah 95% memenuhi kebutuhan saya.
> (1) Yang kurang hanya sedikit, di kolom yang kosong maunya diisi no account
> yang tetap yaitu 6932942.mungkin boleh disebut di makro Acc No = 6932942.
> Bagitu juga  GL 871814 adalah tetap dan tidak berubah, dan polanya tetap
> sama seperti posisi di table asli di bawah.
>
> (2) Di kolom pertama sebelum tanggal ada nomor urut. Polanya no 1 berada di
> baris yang sama dgn MM, no 2 di baris ZZ, no 3 MM semula, bagitulah
> seterusnya no 4 ZZ.
>
> (3) Tanggal hanya ditulis dua kali  sahaja yaitu sebaris dgn MM dan sebaris
> dgn ZZ, yang lain dikosongkan sama seperti MM dan ZZ.
>
> 4) Selain untuk tujuan upload data ke sistem SAP, Table ini juga
> berfungsi sebagai filter kepada Table statement dari bank, sebab data dari
> bank bertambah setiap hari, tapi yang mau di lihat hanya data dari tanggal
> tertentu sahaja.. Mungkin supaya lebih user friendly, tanggalnya bisa
> diselect contohnya
>
> Tanggal dari 18 Nov 2011 hingga 23 Nov 2011 atau hanya satu tanggal sahaja
> e.g 24 Nov 2011, maka yang muncul hanyalah tanggal yang diperlukan sahaja.
>
> Terima kasih sekali lagi atas bantuan bapak.
>
> -Mansor.

Kirim email ke