mbak Jan, izin untuk sedikit mengutak-atik script dari mbak Jan ya, agar script tersebut dapat berjalan dengan baik di dua buah file dari mr Kid
Option Explicit ' --------------------------- ' ' Code by: Miss Jan Raisin ' ' untuk millis Belajar Excel ' ' 21 November 2012 ' ' Re-coded by: Aji Mumpung ' ' 21 November 2012 ' ' --------------------------- ' ' ini adalah nama prosedurnya Sub RekapData() ' deklarasikan variabel bertipe Range untuk menyimpan objek berupa range ' rgData = range_Data, letaknya di sheet Nota mulai cell H13 samapai cell H17 ' cData = cell_Data, adalah setiap 1 cell di dalam rgData Dim rgData, cData As Range ' deklarasikan variabel untuk menyimpan nomer baris dengan tipe Long ' r = nomor baris data pertama di sheet Rekap yaitu baris 7 sampai dengan nomer baris terakhir yang ada datanya ' data tersebut bisa berupa Null String, atau sebut saja yang nanya bikin semacam acara Jebakan Betmen ' Brs = nomor baris terakhir yang digunakan, letaknya antah berantah ' idxBrs = nomor baris di bawah data yang masih kosong atau Null String Dim r, Brs, idxBrs As Long ' non-aktifkan aplikasi screen update untuk mempercepat kerja macro Application.ScreenUpdating = False ' aktifkan sheet Nota, hal ini untuk berjaga-jaga jika sheet aktif bukanlah sheet Nota Sheets("Nota").Select ' tetapkan lokasi rgData, yaitu di sheet Nota >> sudah dipanggil sebelumnya ' letaknya di cell H13 sampai dengan cell H17 Set rgData = Range("h13:h17") ' untuk setiap 1 cell (cData) di dalam rgData For Each cData In rgData ' jika nilai cData <> "" maka If cData.Value <> "" Then ' range cData sampai 8 kolom di sebelah kanan cData dicopy ' untuk menunjuk 8 kolom disebelah kanan cData digunakan perintah cData.Offset(0, 8) ' untuk melakukan copy digunakan perintah .Copy Range(cData, cData.Offset(0, 8)).Copy ' panggil / aktifkan sheet Rekap Sheets("Rekap").Select ' panggil / pergi ke cell A7 Range("a7").Select ' saat ini cell aktif berada di cell A7 ' pada cell aktif cek apakah ada datanya atau tidak ' jika pada aktif cell ada datanya, maka If ActiveCell.Value <> "" Then ' hitung nilai baris paling akhir yang berisi data ' bisa saja berupa Null String yang letaknya di antah berantah ' untuk mengetahui letak cell digunakan perintah .SpecialCells(xlCellTypeLastCell) ' untuk mengetahui nomer barisnya digunakan perintah .Row ' lalu nomer baris tersebut disimpan dalam sebuah variabel bernama Brs Brs = ActiveCell.SpecialCells(xlCellTypeLastCell).Row ' jika nilai Brs lebih besar dari 7 ' kenapa harus 7? karena TS meminta data pertama berada di cell A7 (kolom A, baris 7) ' jika Brs lebih besar dari 7, maka ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' ' penambahan logika untuk seleksi dari : ' ' If Brs > 7 Then ' ' menjadi : ' If Brs > 7 And Cells(Brs, 1).Value = "" Then ' ' tujuannya adalah untuk mengecek apakah pada kolom A baris tersebut ' ' ada datanya atau tidak ' ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' ' lakukan loop mulai dari baris 7 sampai dengan nomer baris yang disimpan dalam variabel Brs For r = 7 To Brs ' lalukan pengecekan kondisi, apakah di baris tersebut pada kolom 1 ada datanya atau tidak ' untuk menunjukknya menggunakan perintah Cells(r, 1) ' syntaxnya adalah Cells(nomer_baris , nomer_kolom) ' jika pada baris tersebut pada kolom 1 tidak ada datanya atau Null Sring, maka If Cells(r, 1).Value = "" Then ' ambil nilai berisnya menggunakan perintah .Row ' lalu disimpan dalam variabel bernama idxBrs idxBrs = Cells(r, 1).Row ' jika sudah ketemu, lalu keluar dari loop Exit For ' ini adalah akhir dari pengecekan data pada sheet Rekap End If ' jika belum ketemu cell dengan data yang kosong, maka lanjutkan dengan baris berikutnya Next r ' ini adalah akhir pengecekan jika nilai Brs lebih besar dari 7 End If ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' ' penambahan script untuk pengujian kondisi nilai baris ' ' jika nilai idxBrs = 0, karena tidak memenuhi kriteria pengujian di atas ' ' maka nilai idxBrs yang merupakan baris penulisan data berikutnya adalah ' ' nilai Brs ditambah 1 ' ' nilai Brs adalah nilai baris dari data yang terakhir ' If idxBrs = 0 Then ' idxBrs = Brs + 1 ' End If ' ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' ' panggil cell yang terpilih ' yaitu nomer baris sesuai nilai yang didapat dalam idxBrs dan kolom 1 Cells(idxBrs, 1).Select ' ini adalah akhir pengecekan apakah cell A7 di sheet Rekap ada datanya atau tidak End If ' pada aktif cell sesuai dengan pengecekan beberapa kondisi di atas ' dilakukan paste special sesuai dengan nilai dan format data asal ActiveCell.PasteSpecial (xlPasteValuesAndNumberFormats) ' setelah itu matikan aplikasi copy paste Application.CutCopyMode = False ' yang ini adalah akhir dari pemeriksaan apakah cData ada datanya atau tidak End If ' panggil kembali sheet Nota, karena saat ini yang aktif adalah sheet Rekap Sheets("Nota").Select ' lanjutkan untuk setiap cData berikutnya Next cData ' aktifkan aplikasi screen update Application.ScreenUpdating = True ' yang ini adalah akhir dari prosedur End Sub Yang diberi warna merah adalah penambahan dan peng-edit-an yang saya lakukan. Insya Allah sekarang script tersebut dapat berjalan dengan baik di kedua file, sebelumnya sudah dilakukan uji coba terhadap kedua file tersebut. Wassalam, -Aji Mumpung- Pada 21 November 2012 16:14, Jan Raisin <miss.jan.rai...@gmail.com> menulis: > ** > > > Dear Be Exceler, > > maaf, ternyata script dari Jan yang tadi hanya berjalan dengan baik di > file Sample.xls, jika ada waktu senggang nanti akan coba Jan perbaiki agar > dapat berjalan di kedua file, jika ada Be-Exceler yang ingin memperbaiki > script dari Jan, Jan mempersilakan dengan senang hati :) > > Best Regard, > > Jan Raisin > > Pada 21 November 2012 15:34, Jan Raisin <miss.jan.rai...@gmail.com>menulis: > > >>