Makasih banyak mr kid... Cuman sayangnya saya kurang paham maksudnya.. Hihihi.. 
Kalo boleh minta rumus yg jadiannya mr kid..


Sent from my iPad mini


> On 30 Agt 2015, at 14.29, 'Mr. Kid' [email protected] [belajar-excel] 
> <[email protected]> wrote:
>
> Hai Ivan,
>
> Sesuaikan dengan keadaan workbook setempat, karena bahasan berikut hanya 
> berasal dari script yang ada...
> Idenya adalah menyusun urutan kolom di sumber menjadi sama dengan yang 
> dibutuhkan oleh target
> A. Dari bagian :
>   For i = 1 To rng.Rows.Count
>       Set cell = rng.Cells(i, 1)
>       If cell.Value <> "" Then
>          targetCell.Value = CODE
>          targetCell.Offset(0, 1).Value = cell.Value
>          targetCell.Offset(0, 2).Value = NAMA
>          targetCell.Offset(0, 3).Value = cell.Offset(0, 1).Valu
>          targetCell.Offset(0, 4).Value = cell.Offset(0, 4).Value
>          targetCell.Offset(0, 5).Value = cell.Offset(0, 5).Value
>          targetCell.Offset(0, 7).Value = TANGGAL
>          Set targetCell = targetCell.Offset(1, 0)
>       End If
>   Next i
>
> > sisi Target
> target memiliki urutan kolom (dari kolom A di sheet target) :
> 1. code,
> 2. kode (dari kolom A sumber),
> 3. nama,
> 4. teks (dari kolom B sumber),
> 5. nilai (dari E sumber),
> 6. nilai (dari F sumber),
> 7. sesuatu (dikosongkan)

> 8. tanggal
>
> Andaikan kolom ke-3 (nama) diletakkan tepat setelah kolom ke-1 (code), 
> sepertinya akan lebih pas, sehingga kode (kolom ke-2) tidak terpisah dari 
> teks tentang si kode (kolom ke-4).
> btw, tetap seperti aslinya saja.
>
> > sisi Sumber
> sumber memiliki kolom berikut (dari kolom A sheet sumber) :
> 1. kode (untuk kolom ke-2 target)
> 2. teks (untuk kolom ke-4 target)
> 3. tidak tahu 1 [kolom C sumber] (tidak diambil, alias bisa di-hide saat akan 
> copy)
> 4. tidak tahu 2 [kolom D sumber] (tidak diambil, alias bisa di-hide saat akan 
> copy)
> 5. nilai (untuk kolom ke-5 target)
> 6. nilai (untuk kolom ke-6 target
>
>
> B. dari bagian :
>     A = Range("I1").Value
>     B = Range("I2").Value
> berarti ada nilai awal di A dan nilai akhir di B dengan asumsi, selalu 
> berlaku A<=B
>
> C. dari bagian :
>   If lembar_ke = 1 Then
>        Set rng = .Range("A6:A21")
>        CODE = .Range("E1").Value
>        TANGGAL = .Range("G1").Value
>        NAMA = .Range("B1").Value
> maka disimpulkan bahwa setiap baris di .Range("A6:A21") adalah milik kelompok 
> 1.
> nilai Code (kolom ke-1 hasil) diambil dari Range("E1") untuk kelompok 1
> begitu pula untuk tanggal dan nama.
>
>
> Jadi, kira-kira mengubahnya begini : (urut dari kolom terkiri)
> 1. dibutuhkan 1 kolom untuk nomor kelompok (misal diletakkan di sebelum 
> tabel), diisi formula
> 2. dibutuhkan 1 kolom untuk Code diisi formula merujuk ke range di E sesuai 
> kelompoknya
> 3. kolom ke-1 sumber (berarti dari asalnya di kolom A, sudah pindah ke C 
> karena 2 kolom tambahan di atas)
> 4. dibutuhkan 1 kolom untuk Nama diisi formula merujuk ke range B sesuai 
> kelompoknya
> 5,6,7 kolom ke-2,3,4 sumber yang sudah bergeser menjadi di kolom E,F,G dengan 
> kolom F dan G tidak diambil
> 8,9 adalah 2 kolom nilai dari sumber (untuk kolom ke-5 dan 6 target) di kolom 
> H dan i
> >> misalkan sheet sumber awalnya memiliki 10 kolom, dan baru digunakan 6 
> >> kolom, maka kolom berikutnya adalah
> 10,11,12,13 adalah 4 kolom sisa (J,K,L,M) milik sumber yang tidak diambil (10 
> kolom sumber - baru dipakai 6 kolom = 4 kolom asli sisanya)
> 14. dibutuhkan 1 kolom untuk sesuatu yang kosong di target kolom ke-7

> 15. dibutuhkan 1 kolom untuk Tanggal berisi formula yang merujuk ke range G 
> sesuai kelompoknya.
>
> Misalkan sudah ada header tabel asli di sheet sumber pada baris ke-5,
> maka dilakukan hal berikut :
> 1. insert 2 kolom pada kolom A sheet sumber untuk wadah kolom nomor 1 dan 2, 
> dan beri header Kelompok dan Code. Kolom asli yang tadinya di A sudah 
> bergeser ke C.
> 2. klik kolom D dan insert 1 kolom untuk wadah kolom nomor 4 (Nama) dan 
> header diberi teks berbunyi Nama. Kolom yang tadinya di D akibat proses 1 
> akan bergeser ke E
> 3. kolom sumber yang sudah ada di J,K,L,M (bagian dari asumsi 10 kolom asli  
> milik sumber) dibiarkan apa adanya. Jika tidak ada headernya, maka beri 
> header berupa beberapa spasi disetiap kolom yang tak ber header
> 4. kolom N diberi header bernama Kosong
> 5. kolom O diberi header Tanggal dan diisi formula merujuk ke cell tertentu 
> berisi tanggal di kelompok itu.
> 6. Pastikan kolom P kosong
>
> Penyusunan formula di kolom-kolom tambahan : (header di baris ke-5, berari 
> baris data mulai baris 6
> > kolom ke-1 bernama Kelompok (cell A6), berdasar isi C (yang tadinya di A)
> =if( c6<>"" , 1 , 0 )     --> 1 adalah nomor kelompok untuk area data 
> .Range("A6:A21")
> copy ke baris data selanjutnya di kelompok 1
>
> > kolom ke-2 bernama Code (cell B6), berdasar isi C (yang tadinya di A)
> =if( c6<>"" , $h$1 , "" )   --> $h$1 dari CODE = .Range("E1").Value dengan E 
> bergeser ke kanan 3 kolom menjadi H
> copy ke baris data selanjutnya di kelompok 1, kalau formula di-copy ke 
> kelompok lain (misal kelompok 2), sesuaikan rujukan $h$?
>
> > kolom ke-4 bernama Nama (cell D6) [cell C6 asli dari sumber dan tidak perlu 
> > diubah]
> =if( c6<>"", $e$1 , "" )   --> $e$1 dari NAMA = .Range("B1").Value dengan B 
> bergeser ke kanan 3 kolom menjadi E
> copy ke baris data selanjutnya di kelompok 1, kalau formula di-copy ke 
> kelompok lain (misal kelompok 2), sesuaikan rujukan $e$?
>
> > kolom O untuk tanggal :

> =if( c6<>"",$J$1 , 0 )   --> $J$1 dari TANGGAL = .Range("G1").Value dengan G 
> bergeser ke kanan 3 kolom menjadi J
> copy ke baris data selanjutnya di kelompok 1, kalau formula di-copy ke 
> kelompok lain (misal kelompok 2), sesuaikan rujukan $J$?
>
> Misalkan ada banyak kelompok yang akhirnya membentuk area data dari baris 5 
> sampai baris 123456, berarti data di A5:O123456
> Area yang di-copy ke target adalah B5:O123456 yang tampak saja.
>
> >> Kelompok yang akan di salin berdasar
>     A = Range("I1").Value
>     B = Range("I2").Value
> dan telah bergeser 3 kolom menjadi kolom L, yaitu nilai awal di L1 dan nilai 
> akhir di L2
> ***** asumsi selalu A<=B *****
>
> Kode VBA : (dalam 1 buah prosedur sub ber-scope public)
> dim lAwal as long, lAkhir as long
> dim rngData as range, rngCopy as range,rngTarget as range
> dim wbkApp as workbook, wbkTarget as workbook
>
> application.screenupdating=false
> application.calculation=xlCalculationAutomatic
> set wbkapp=thisworkbook
>
> 'cek workbook target
> on error resume next
> set wbktarget=workbooks.open("E:\HARGA.xlsm")
> if wbktarget is nothing then
>       msgbox "Tidak ada workbooknya.",vbexclamation,"simpan"
>       application.screenupdating=true
>       exit sub
> elseif wbktarget.readonly then
>       msgbox "Maaf, file STOCK.xlsm sedang dibuka, silahkan tutup file 
> terlebih dahulu..",vbexclamation,"simpan"
>       application.screenupdating=true
>       exit sub
> endif
> 'simpan range target
> with wbktarget.sheets("DATA PENJUALAN")
>     set rngTarget= .cells(.rows.count,1).end(xlup).offset(1)
> end with
>
> 'mulai proses
> wbkapp.activate
> with wbkapp.sheets("CETAK NOTA")
>     .autofiltermode=false
>     set rngData=.range("a5:o123456")
>     set rngCopy=.range("b5:o123456")
>     lAwal=.range("L1").value
>     lAkhir=.range("L2").value
>
>     'tampilkan semua kolom
>     rngdata.entirecolumn.hidden=false
>
>     'hide kolom yang tidak akan diambil yaitu F,G,J,K,L,M
>     .range("F:G,J:M").hidden=true
>
>     'filter kolom A (Kelompok) dari lAwal sampai lAkhir
>     rngdata.autofilter 1,">=" & lawal , xlAnd , "<=" & lAkhir
>
>     'copy yang tampak
>     rngcopy.offset(1).specialcells(xlCellTypeVisible).copy
>
>     'paste values dan format tanpa yang blank ke rngtarget
>     rngtarget.pastespecial xlPasteValuesAndNumberFormats ,skipblanks:=true
>
>     'lepas auto filter
>     .autofiltermode=false
>
>     'unhide semua kolom
>     rngdata.entirecolumn.hidden=false
>
>     'hide kolom-kolom tambahan, yaitu A,B,D,N,O,P
>     .range("A:B,D:D,N:P").hidden=true
> end with
>
> 'tutup workbook target dengan save
> application.displayalerts=false
> wbktarget.close true
> application.displayalerts=true
> application.screenupdating=true
>
> msgbox "Saved.",vbinformation,"simpan"
>
>
>
> --------
> Wassalam,
> Kid
>
>
>> On Sat, Aug 22, 2015 at 12:31 AM, Ivan Sebastian [email protected] 
>> [belajar-excel] <[email protected]> wrote:
>>
>> BeExceller,
>> ada satu lg rumus makro yg memakan waktu untuk pemindahan data ke database 
>> harga..saya lampirkan contoh file notanya, bila nota penjualan mencapai 
>> maksimal dalam hal ini saya batasi 25 nota.. untuk kedepannya akan  saya 
>> buat 70 nota atau lebih.. untuk pemindahan datanya berasa lama banget.. 
>> kurang lebih 3-5 menit..
>> makronya seperti ini...kira2 apa masih bisa diperingkas lagi rumusnya untuk 
>> mempercepat pemindahan datanya ke database harga..(database harganya sama 
>> seperti file yg saya lampirkan sebelumnya (ukuran file harga kebesaran jadi 
>> sama mimin didelete molo)
>>
>> Sub HARGA()
>>     A = Range("I1").Value
>>     B = Range("I2").Value
>>   Application.ScreenUpdating = False
>>   For x = A To B
>>   SaveTo_DataPenjualan (x)
>>   Next x
>>   Application.ScreenUpdating = True
>>   End Sub
>> Private Sub SaveTo_DataPenjualan(lembar_ke As Long)
>>   Dim rng As Range, cell As Range, targetCell As Range, CODE As String, i As 
>> Long
>>
>>   With Sheets("CETAK NOTA")
>>   If lembar_ke = 1 Then
>>        Set rng = .Range("A6:A21")
>>        CODE = .Range("E1").Value
>>        TANGGAL = .Range("G1").Value
>>        NAMA = .Range("B1").Value
>>     ElseIf lembar_ke = 2 Then
>>        Set rng = .Range("A31:A46")
>>        CODE = .Range("E26").Value
>>        TANGGAL = .Range("G26").Value
>>        NAMA = .Range("B26").Value
>>     ElseIf lembar_ke = 3 Then
>>        Set rng = .Range("A56:A71")
>>        CODE = .Range("E51").Value
>>        TANGGAL = .Range("G51").Value
>>        NAMA = .Range("B51").Value
>>     ElseIf lembar_ke = 4 Then
>>        Set rng = .Range("A81:A96")
>>        CODE = .Range("E76").Value
>>        TANGGAL = .Range("G76").Value
>>        NAMA = .Range("B76").Value
>>     ElseIf lembar_ke = 5 Then
>>        Set rng = .Range("A106:A121")
>>        CODE = .Range("E101").Value
>>        TANGGAL = .Range("G101").Value
>>        NAMA = .Range("B101").Value
>>     ElseIf lembar_ke = 6 Then
>>        Set rng = .Range("A131:A146")
>>        CODE = .Range("E126").Value
>>        TANGGAL = .Range("G126").Value
>>        NAMA = .Range("B126").Value
>>     ElseIf lembar_ke = 7 Then
>>        Set rng = .Range("A156:A171")
>>        CODE = .Range("E151").Value
>>        TANGGAL = .Range("G151").Value
>>        NAMA = .Range("B151").Value
>>     ElseIf lembar_ke = 8 Then
>>        Set rng = .Range("A181:A196")
>>        CODE = .Range("E176").Value
>>        TANGGAL = .Range("G176").Value
>>        NAMA = .Range("B176").Value
>>     ElseIf lembar_ke = 9 Then
>>        Set rng = .Range("A206:A221")
>>        CODE = .Range("E201").Value
>>        TANGGAL = .Range("G201").Value
>>        NAMA = .Range("B201").Value
>>     ElseIf lembar_ke = 10 Then
>>        Set rng = .Range("A231:A246")
>>        CODE = .Range("E226").Value
>>        TANGGAL = .Range("G226").Value
>>        NAMA = .Range("B226").Value
>>     ElseIf lembar_ke = 11 Then
>>        Set rng = .Range("A256:A271")
>>        CODE = .Range("E251").Value
>>        TANGGAL = .Range("G251").Value
>>        NAMA = .Range("B251").Value
>>     ElseIf lembar_ke = 12 Then
>>        Set rng = .Range("A281:A296")
>>        CODE = .Range("E276").Value
>>        TANGGAL = .Range("G276").Value
>>        NAMA = .Range("B276").Value
>>     ElseIf lembar_ke = 13 Then
>>        Set rng = .Range("A306:A321")
>>        CODE = .Range("E301").Value

>>        TANGGAL = .Range("G301").Value
>>        NAMA = .Range("B301").Value
>>     ElseIf lembar_ke = 14 Then
>>        Set rng = .Range("A331:A346")
>>        CODE = .Range("E326").Value
>>        TANGGAL = .Range("G326").Value
>>        NAMA = .Range("B326").Value
>>     ElseIf lembar_ke = 15 Then
>>        Set rng = .Range("A356:A371")
>>        CODE = .Range("E351").Value
>>        TANGGAL = .Range("G351").Value
>>        NAMA = .Range("B351").Value
>>     ElseIf lembar_ke = 16 Then
>>        Set rng = .Range("A381:A396")
>>        CODE = .Range("E376").Value
>>        TANGGAL = .Range("G376").Value
>>        NAMA = .Range("B376").Value
>>     ElseIf lembar_ke = 17 Then
>>        Set rng = .Range("A406:A421")
>>        CODE = .Range("E401").Value
>>        TANGGAL = .Range("G401").Value
>>        NAMA = .Range("B401").Value
>>     ElseIf lembar_ke = 18 Then
>>        Set rng = .Range("A431:A446")
>>        CODE = .Range("E426").Value
>>        TANGGAL = .Range("G426").Value

>>        NAMA = .Range("B426").Value
>>     ElseIf lembar_ke = 19 Then
>>        Set rng = .Range("A456:A471")
>>        CODE = .Range("E451").Value
>>        TANGGAL = .Range("G451").Value
>>        NAMA = .Range("B451").Value
>>     ElseIf lembar_ke = 20 Then
>>        Set rng = .Range("A481:A496")
>>        CODE = .Range("E476").Value
>>        TANGGAL = .Range("G476").Value
>>        NAMA = .Range("B476").Value
>>     ElseIf lembar_ke = 21 Then
>>        Set rng = .Range("A506:A521")
>>        CODE = .Range("E501").Value
>>        TANGGAL = .Range("G501").Value
>>        NAMA = .Range("B501").Value
>>     ElseIf lembar_ke = 22 Then
>>        Set rng = .Range("A531:A546")
>>        CODE = .Range("E526").Value
>>        TANGGAL = .Range("G526").Value
>>        NAMA = .Range("B526").Value
>>     ElseIf lembar_ke = 23 Then
>>        Set rng = .Range("A556:A571")
>>        CODE = .Range("E551").Value
>>        TANGGAL = .Range("G551").Value
>>        NAMA = .Range("B551").Value
>>     ElseIf lembar_ke = 24 Then
>>        Set rng = .Range("A581:A596")
>>        CODE = .Range("E576").Value
>>        TANGGAL = .Range("G576").Value
>>        NAMA = .Range("B576").Value
>>     Else
>>        Set rng = .Range("A606:A621")
>>        CODE = .Range("E601").Value
>>        TANGGAL = .Range("G601").Value
>>        NAMA = .Range("B601").Value
>>     End If
>>   End With
>>
>> Application.ScreenUpdating = False
>>
>> If IsFileOpen("E:\HARGA.xlsm") Then
>>
>> MsgBox "Maaf, file STOCK.xlsm sedang dibuka, silahkan tutup file terlebih 
>> dahulu.."
>> Exit Sub
>> End If
>>
>> Workbooks.Open FileName:="E:\HARGA.xlsm"
>>
>> With Sheets("DATA PENJUALAN")
>>     Set targetCell = .Cells(.Rows.Count, "A").End(xlUp).Offset(1)
>>
>>   End With
>>   For i = 1 To rng.Rows.Count
>>       Set cell = rng.Cells(i, 1)
>>       If cell.Value <> "" Then
>>          targetCell.Value = CODE
>>          targetCell.Offset(0, 1).Value = cell.Value
>>          targetCell.Offset(0, 2).Value = NAMA
>>          targetCell.Offset(0, 3).Value = cell.Offset(0, 1).Value
>>          targetCell.Offset(0, 4).Value = cell.Offset(0, 4).Value
>>          targetCell.Offset(0, 5).Value = cell.Offset(0, 5).Value
>>          targetCell.Offset(0, 7).Value = TANGGAL
>>          Set targetCell = targetCell.Offset(1, 0)
>>       End If
>>   Next i
>>
>>     Workbooks("HARGA.xlsm").SAVE
>>     Workbooks("HARGA.xlsm").Close
>>   Application.ScreenUpdating = True
>> End Sub
>> Function IsFileOpen(FileName As String)
>> Dim iFilenum As Long
>> Dim iErr As Long
>>
>> On Error Resume Next
>> iFilenum = FreeFile()
>> Open FileName For Input Lock Read As #iFilenum
>> Close iFilenum

>> iErr = Err
>> On Error GoTo 0
>>
>> Select Case iErr
>> Case 0: IsFileOpen = False
>> Case 70: IsFileOpen = True
>> Case Else: Error iErr
>> End Select
>>
>> End Function
>>
>>
>>
>>
>>
>>
>>
>
>

Kirim email ke