Selain dengan sql, dengan sedikit makro sederhana juga bisa dihasilkan tabel
"Hasil"
yg kayaknya sesuai contoh yg diinginkan.
Makronya berasumsi bahwa: di kedua tabel "Nomor Barang" adalah uniq.
Jika disederhanakan "mikirnya"; pekerjaan yg ingin diotomatiskan :hanya-lah
Tabel Hasil dibuat SAMA DENGAN Tabel Perubahan Harga, tetapi
(*) Kolom ke 4 diberi "Harga Lama" yg disalin dari Tabel Daftar Harga Kolom
3
(*) Kolom ke 5 diberi "keterangan" hasil dari 2 evaluasi
- perbandingan harga lama vs baru menghasilkan salah satu dari 3 kemungkinan
string "tetap", "naik" atau "turun"
- deteksi apakah suatu Barang (item) terdapat pada Daftar Harga (lama)
Jika TIDAK ADA, keterangan = "Item Baru"
(jika ada ... ? ... ya di di-*diem*in ajah...)
Semua itu dilakukan di dalam loop dua tingkat: loop luar "memègang"
TabelPerubahanHarga
dan menyusuri semua records; sementara sebuah records di TabelPerubahan
Harga di"pègang"
loop dalam bekerja mengunjungi semua records di tabel DaftarHarga (lama)
Sub UpdateHarga()
' sitiVi membuat makro-makroan (bukan makro beneran)
Dim dOld As Range ' =tabel daftar harga
Dim dNew As Range ' =tabel perubahan harga
Dim NewTbl As Range ' =tabel baru / hasil
Dim oRow As Long ' =jumRecord pada Daftar Harga
Dim nRow As Long ' =jumRecord pada Perubahan Harga
Dim staHarga As String ' =status naik/turun harga
Dim OldItemFound As Boolean '=flag penanda item LAMA
Dim r As Long, n As Long '=counter /pencacah looping
'---Setting "Calculation di manualkan,
' (biar ndak ngganggu kerjaan...)
Application.Calculation = xlCalculationManual
'---"Mbikin" sheet barooo, bwat nampung hasil olahan
Worksheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "Daftar Harga Baru_" & CStr(Worksheets.Count)
'---Menentukan Letak Awal Tabel Hasil
Set NewTbl = ActiveSheet.Range("A2")
'---Menentukan Letak Tabel Harga (lama)
Set dOld = Sheets("Daftar_Harga").Range("A1").CurrentRegion.Offset(1, 0)
oRow = dOld.Rows.Count - 1
Set dOld = dOld.Resize(oRow, dOld.Columns.Count)
dOld(0, 1).Resize(1, dOld.Columns.Count).Copy NewTbl(0, 1)
'---Menentukan Letak Tabel PerubahanHarga (baru)
Set dNew = Workbooks("perubahan Harga.xls").Sheets("Perubahan_Harga") _
.Range("A1").CurrentRegion.Offset(1, 0)
nRow = dNew.Rows.Count - 1
Set dNew = dNew.Resize(nRow, dNew.Columns.Count)
'--loop mengunjungi baris-data (records) pada tbl harga baru
For n = 1 To nRow
'--setiYap records yg ada di salin ke Tabel hasil
dNew(n, 1).Resize(1, dOld.Columns.Count).Copy NewTbl(n, 1)
'--kolom ke 6 diisi data Date tgl hari ini
NewTbl(n, 6) = Format(Date, "dd-mmm-yy")
'--Re-Init : flag OldItemFound
OldItemFound = False
' loop: kunjungan ke tiap baris-data pada TabelHargaLama
For r = 1 To oRow
'--Kalau field 1 di TblHargaLama = TblHargaBaru
If dOld(r, 1) = dNew(n, 1) Then
'--status *OldItem* = Found
OldItemFound = True
'--status Harga dituliskan (di field 5)
NewTbl(n, 4) = dOld(r, 3)
If dOld(r, 3) < dNew(n, 3) Then staHarga = "Naik"
If dOld(r, 3) = dNew(n, 3) Then staHarga = "Tetap"
If dOld(r, 3) > dNew(n, 3) Then staHarga = "Turun"
NewTbl(n, 5) = "Harga " & staHarga
Exit For
End If
'--Jika Status OldItemFound* tidak *terdeteksi
If r <= oRow And *Not OldItemFound *Then
'*-- maka pada field 5 dituliskan begini...*
NewTbl(n, 5) = "Item Baru" *' he he he, lucu ndak?*
End If
Next r
Next n
' merapihkan kolom
NewTbl.CurrentRegion.Columns.AutoFit
Application.Calculation = xlCalculationManual
End Sub
karena "tombol" belum sempat digambar, maka menjalankan makronya
dari worksheet dengan Alt + F8
pilih nama makro (yaitu nama sub prosedur tsb diatas)
lalu cari gambar-gambar yg *seperti tombol*,
kalau ada yg bertulisan RUN, di pencet saja..
oiya...sebelum makro dijalankan, kedua wokbuk harus sudah dibuka
(maaf Om, belum di otomatiskan didalam makronya)
~ctv~
2009/4/12 nm kid <[email protected]>
>
> Dear Herry Sutjipto,
>
> Daftar harga bisa disebut data tetap (sebuah tabel dari sebuah database).
> Perubahan harga adalah dataset update ke daftar harga bila kondisi boleh
> update terpenuhi.
> Maka pada daftar harga jika dibuat link referensi dalam formula ke
> perubahan harga, maka perubahan harga sebgai form isi daftar harga dan file
> daftar harga juga harus dibuka (sebagai workspace misalnya).
>
> Jika daftar harga dan perubahan harga dilakukan secara terpisah, bisa
> menggunakan data connection dan sql untuk melakukan merge.
>
> Kid.
>
> 2009/4/8 Herry Sutjipto <[email protected]>
>
>> Dear pakar XL-mania
>> Saya punya dua file “Dartar Harga” dan “Perubahan Harga” (seperti contoh
>> terlampir).
>> Dua file tersebut akan saya merger. Apabila dalam File Daftar Harga sudah
>> ada, harganya di isi dengan data baru.
>> Sedangkan apabila belum ada, datanya ditambah dari File Perubahan Harga.
>> Masing-masing diberi penjelasan dan tanggal pelaksanaan merger nya.
>> Mohon pencerahan dari para pakar XL-mania.
>>
>> Terima kasih,
>>
>> Best regards
>> Herry Sutjipto.
>>
>>
>> .
>>
>