Coba juga menggunakan object collection untuk join table

Public Function JoinPakeKoleksi(rngUpdateKolomPertama As Range,
rngDataLamaKolomPertama As Range) As Variant
    Dim col As Collection       'selalu base 1
    Dim rng As Range
    Dim lRecs As Long
    Dim sItem() As String       'vb6 menggunakan default base 0
    Dim vRes As Variant

    On Error Resume Next
    Set col = New Collection
    'mulai dari updater
    For Each rng In rngUpdateKolomPertama
        If LenB(rng.Value) <> 0 Then
            col.Add rng.Value & "|" & rng.Offset(, 1).Value & "|" &
rng.Offset(, 2).Value, _
                    rng.Value & "|" & rng.Offset(, 1).Value
        End If
    Next rng

    'ikuti dengan data lama
    For Each rng In rngDataLamaKolomPertama
        If LenB(rng.Value) <> 0 Then
            col.Add rng.Value & "|" & rng.Offset(, 1).Value & "|" &
rng.Offset(, 2).Value, _
                    rng.Value & "|" & rng.Offset(, 1).Value
        End If
    Next rng
    lRecs = col.Count
    ReDim vRes(1 To lRecs, 1 To 3) As Variant
    For lRecs = 1 To col.Count
        sItem = Split(col(lRecs), "|")
        vRes(lRecs, 1) = sItem(0)
        vRes(lRecs, 2) = sItem(1)
        vRes(lRecs, 3) = sItem(2)
    Next lRecs

    JoinPakeKoleksi = vRes
End Function
'Mungkin perlu dicoba untuk record update yang banyak *dan* record data yang
juga banyak.

Ingin di-sort ?
buat fungsi sorting yang inputnya berupa array, agar hasil fungsi di atas
bisa menjadi input parameter untuk fungsi sorting tersebut.

Regards.
Kid.

2011/9/29 jkssxls Sudarsono <jkss...@hotmail.com>

> **
>
>
>  saya modif fungsi join menjadi join_m
> Private Function JOIN_m(L01 As Range, L02 As Range)
>
>    '=== siti Vi : Fungsi JOIN : menggabung dua List
>    ' modified by Haps: 29 sep 2011
>    ' tiap list berisi 3 kolom, Uniq pada Kolom 1 (ID)
>    '=================================================
>    Dim ArS As String, ArUp(), Tmp
>    Dim i As Long, j As Long, p As Long, u As Long
>    Dim kolomkey As Integer
>    kolomkey = 2
>    ' menyusun 3 array ex tabel data
>    ArS = "|"
>    ReDim Preserve ArUp(1 To 3, 1 To L01.Rows.Count)
>    For i = 1 To L01.Rows.Count
> 'isi string dari kolom H1 ( berisi A,B,C,D )
>       ArS = ArS & L01(i, kolomkey) & "|"
>       ArUp(1, i) = L01(i, 1)
>       ArUp(2, i) = L01(i, 2)
>       ArUp(3, i) = L01(i, 3)
>    Next i
>    ' array tabel diperbesar dengan data di L02 (update)
> '   j = UBound(ArUp)
> ' ambil banyaknya data di dimensi ke-2 : A B C D
>    j = UBound(ArUp, 2)
>    For i = 1 To L02.Rows.Count
>       ' jika ID di L02 belum ada di L01.. maka..
>       If InStr(1, ArS, "|" & L02(i, kolomkey) & "|") = 0 Then
> ' jika data di L02 tak ada di ArS
>          ArS = ArS & L02(i, kolomkey) & "|"
>          j = j + 1: ReDim Preserve ArUp(1 To 3, 1 To j)
>          ArUp(1, j) = L02(i, 1)
>          ArUp(2, j) = L02(i, 2)
>          ArUp(3, j) = L02(i, 3)
>       Else   ' jika ID di list L02 sudah ada di L01 (kembar)
>          ' Nilainya H2-nya diambilkan dari L02 (data pengUpdate)
>          For p = 1 To j
>             If L02(i, kolomkey) = ArUp(kolomkey, p) Then
> ' ganti data pada ArUp dgn data di L02 hanya index ke-3
>                ArUp(3, p) = L02(i, 3)
>                Exit For
>             End If
>          Next p
>       End If
>    Next i
>    ' bubble sort, mengurutkan hasil Array (sort by ID)
>    For i = LBound(ArUp) To UBound(ArUp) - 1
>       For u = LBound(ArUp) To UBound(ArUp) - 1
>          If ArUp(kolomkey, u) > ArUp(kolomkey, u + 1) Then
>             Tmp = ArUp(1, u): ArUp(1, u) = ArUp(1, u + 1): ArUp(1, u + 1) =
> Tmp
>             Tmp = ArUp(2, u): ArUp(2, u) = ArUp(2, u + 1): ArUp(2, u + 1) =
> Tmp
>             Tmp = ArUp(3, u): ArUp(3, u) = ArUp(3, u + 1): ArUp(3, u + 1) =
> Tmp
>          End If
>       Next u
>    Next i
>    ' variable Join di-isi array ArUp (2 dimensi (3 kol * n row)
>    JOIN_m = ArUp
> End Function
>
>
> ------------------------------
> To: belajar-excel@yahoogroups.com
> From: jkss...@hotmail.com
> Date: Thu, 29 Sep 2011 05:13:38 +0000
>
> Subject: RE: [belajar-excel] Update Tabel dari sheet lain...
>
>
>   data utama
>  ID H1 H2  1 A 100  2 B 125  3 C 10  4 D 5 data updater
>  ID H1 H2  1 C 200  2 B 0  5 E 15 data hasil update :
>  ID H1 H2  1 A 200  2 B 0  3 C 10  4 D 5  5 E 15 seharusnya :
>  ID H1 H2  1 A 100  2 B 0  3 C 200  4 D 5  5 E 15
> hal ini karena yg menjadi pembanding adalah index ke -1  ( kolom Id  ) ,
> sebaiknya index -2 ( kolom H1 ).
> Maaf sedikit mengoreksi .. tak apa -apa , kan....
> ------------------------------
> To: belajar-excel@yahoogroups.com
> From: jkss...@hotmail.com
> Date: Thu, 29 Sep 2011 04:42:28 +0000
> Subject: RE: [belajar-excel] Update Tabel dari sheet lain...
>
>
>   Mbak Haps , saya sudah coba , ada sedikit yang saya koreksi  pada fungsi
> join :
>    j = UBound(ArUp) akan selalu menghasilkan 3
> di koreksi menjadi
>    j = UBound(ArUp, 2) akan menghasilkan banyaknya data di range "data" (
> worksheet "data" )
>
> Tetapi saya berterima kasih atas fungsi Updatable dan join hasil modif nya
>
>
> ------------------------------
> To: belajar-excel@yahoogroups.com
> From: hapsari.stlizb...@gmail.com
> Date: Thu, 29 Sep 2011 04:30:15 +0700
> Subject: Re: [belajar-excel] Update Tabel dari sheet lain...
>
>
>  Fungsi JOIN telah dimodifikasi (lihat module), agar dapat menampung tabel
> 2 dimensi) 3 kolom
> Kemudian Fungsi tsb *dimanfaatkan untuk mengUpdate tabel* data dengan
> prosedur Sub.
>
> Sudah dicoba sepertinya berhasil, hanya saja  listing vba-code nya jadi
> kepanjangan...
>
> Sub UpdateTable()
>    ' Haps // 28 sept 2011
>    '---------------------
>    Dim DatRng As Range, NewRng As Range, ArNew, r As Long
>
>    ' init: Tabel Data (tanpa headernya)
>    Set DatRng = Sheets("Data").Cells(1).CurrentRegion.Offset(1, 0)
>    Set DatRng = DatRng.Resize(DatRng.Rows.Count - 1, DatRng.Columns.Count)
>
>    ' init: Tabel pengUpdate (tanpa header)
>    Set NewRng = Sheets("Update").Cells(1).CurrentRegion.Offset(1, 0)
>    Set NewRng = NewRng.Resize(NewRng.Rows.Count - 1, NewRng.Columns.Count)
>
>    ' -- membuat Array (3 kolom * n Baris) dibantu fungsi JOIN
>    ArNew = *JOIN(DatRng, NewRng)*
>
>    ' -- hapus isi tabel data
>    DatRng.ClearContents
>
>    ' -- tabel data (yg baru dikosongkan) diupdate dgn data dari Array
>    For r = 1 To UBound(ArNew, 2)
>       DatRng(r, 1) = ArNew(1, r)
>       DatRng(r, 2) = ArNew(2, r)
>       DatRng(r, 3) = ArNew(3, r)
>    Next r
>
>    DatRng.Parent.Activate
>    MsgBox "Selesai", vbInformation, ThisWorkbook.Name
>
> End Sub
>
>
> cmiiw
> w
>
>
> 2011/9/28 Haps <hapsari.stlizb...@gmail.com>
>
> dulu, sudah lupa bulan / tahunnya, mba siti pernah membuat UDF Join
>
> dua list jika di JOIN, berarti dua lis akan digabung, tetapi data kembar
> hanya dimunculkan 1 kali
> jika perlu hasil JOIN bisa diurutkan (sorted)
>
> sementara belum sempat membuat /memodifikasi makro menjadi khusus untuk
> keperluan
> "sambil JOIN (kolom 1) juga sambil SUMIF (kolom 2)"
>
> saya yakin mas zainul ulum bisa memodifikasi makro tsb agar
> dapat mengerjakan keperluan
> yg diajukan tsb, mungkin berupa prosedur Sub bukan FUnction lebih
> cuocokk....
>
> ini sudah seijin mbak siti  contoh UDF JOINT dilampirkan di sini
>
> '---text / VBA codeing UDF Join
>
> Function JOIN(List1 As Range, List2 As Range, Optional N As Long = 0, _
>             Optional Urutkan As Boolean = False)
> '-----
> End Function
>
>
>
>
> 2011/9/28 zainul ulum <<yahoo>> <zainul_u...@yahoo.com>
>
> Be-exceler,
> Misalnya saya mempunyai table di [sheet 1] dan [Sheet 2].
> Table di [sheet 1] akan diupdate berdasarkan record dari [Sheet 2].
>
> Bagaimanakah codenya (macro) agar record di [sheet 1] bisa terupdate
> berdasarkan perubahan di [Sheet 2]?
>
> Terimakasih,
> -zainul-
>
>
>
>
>
>
>
>    
>
>

Kirim email ke