Memecah Data dengan Kriteria (manual, Non-ADODB)

halooo..
kali ini saya akan membuat tutorial sederhana untuk memecah data  / membagi data atau apalah saya tidak bisa mendeskripsikan secara manual (Non-ADODB).. yang jelas data akan di pisah dengan kriteria tertentu dan di paste ke sheet dengan nama kriteria tersebutt.. (kok gue bingung dengan kata2 gue sendiri ya hahaaaa)

misalnya kalian punya data seperti ini :

ID NAMA KOTA
ID000 MUHAMMAD JAKARTA
ID001 AINUL JAKARTA
ID002 YAQIN PROBOLINGGO
ID003 BUDI MADIUN
ID004 SUTIKNO PROBOLINGGO

naaah.. sekarang kalian para penonton yang ada disiniiiiii.. ada yang bilang dangdut tak goyang bagai sayur tanpa garaaaaammm... malah nyanyi yak.. tapi kalo penasaran ama lagunya klik disini hahahahaa..

oke oke.. kembali ke topik.. 
seperti contoh.. kalian punya data seperti diatas dan ingin membagi data tersebut sesuai KOTA
jadi pada sheet JAKARTA kalian ingin menampilkan data :

ID NAMA KOTA
ID000 MUHAMMAD JAKARTA
ID001 AINUL JAKARTA

intinya seperti itu ya.. saya kehabisan kata2 untuk menterjemahkan..

ayo simak langkah - langkahnya
  • Buka Excel dan pastikan Excel Macro kalian aktif. jika belum aktif bisa cek postingan saya klik  disini .
  • Tuliskan  data seperti diatas(sebagai contoh diharapkan nama dan posisi header kolom tabel disamakan dulu ya.. namanya juga contoh nti mah bisa di custom sendiri..)
  • Lalu buat 2 tombol (CommandButton). jika belum tau membuat tombol(CommandButton) klik disini
seperti ini :


  • Lalu masuk ke VBA Editor. jika belum mengerti VBA Editor itu apa bisa di cek disini
  • Copy dan paste coding berikut.

       

' ============================================================ 
Option Explicit

Private Sub CommandButton2_Click()
 Dim sheet As Worksheet
 ' mematikan alert
 Application.DisplayAlerts = False
 For Each sheet In ThisWorkbook.Worksheets
  ' jika nama sheet setelah dirubah menjadi huruf kecil semua
  ' TIDAK sama dengan (<>) "data"
  ' maka sheet di hapus
  If LCase(sheet.Name) <> "data" Then sheet.Delete
 Next
 ' menghidupkan alert
 Application.DisplayAlerts = True
End Sub

Private Sub CommandButton1_Click()
 Dim sheetAwal As Worksheet
 Dim sheetTujuan As Worksheet
 Dim sheetDummy As Worksheet
 Dim rng As Range

 ' set variable sheet sebagai sheet tempat data
 Set sheetAwal = ThisWorkbook.Worksheets("Data")

 ' set variable rng sebagai range A1 (data pertama)
 Set rng = sheetAwal.Range("A2")

 Dim iRowAwal As Integer
 Dim iRowAkhir As Integer
 Dim iRowAkhirTujuan As Integer
 Dim kotaAktif As String
 Dim kotaSudahAda As Boolean

 ' - set iRowAkhir data terakhir dari column A
 ' - caranya dengan set cursor(cell aktif) pada row terbawah
 '       * "sheet.Cells(sheet.Rows.Count, 1)" ini sama dengan range A1048576
 ' - lalu cursor dipindah ke atas dengan
 '       * ".End(xlUp)" jadi cursor akan pindah ke range yang ada datanya (A6)
 ' - lalu ambil nilai row nya sebagai nilai integer (.Row) hasilnya adalah 6
 ' - langkah ini sama dengan
 '       * ketika cursor berada di A1048576 lalu anda menekan ctrl+arah_atas
 '       * maka cursor akan berhenti di rang A6

  
 iRowAkhir = sheetAwal.Cells(sheetAwal.Rows.Count, 1).End(xlUp).Row

 ' - mengurutkan angka yang dimulai dari 2 (rng.Row)
 ' - sampai 6 (iRowAkhir)
 For iRowAwal = rng.Row To iRowAkhir
  ' kita asumsikan setiap looping sheet kota belum ada
  kotaSudahAda = False
  
  ' mengambila nama kota yang aktif
  kotaAktif = sheetAwal.Cells(iRowAwal, 3).Text
  
  ' cek sheet dengan nama kotaAktif sudah ada apa belum
  For Each sheetDummy In ThisWorkbook.Worksheets
   ' jika sudah ada set ke sheetTujuan
   If kotaAktif = sheetDummy.Name Then
    Set sheetTujuan = sheetDummy
    kotaSudahAda = True
    Exit For
   End If
  Next
  
  ' jika tidak ada maka akan membuat sheet baru dengan nama kotaAktif
  If Not kotaSudahAda Then
   ' set sheetTujuan sebagai sheet baru dengan name kotaAktif
   ' dengan posisi setelah sheetAwal
   Set sheetTujuan = ThisWorkbook.Worksheets.Add(after:=sheetAwal)
   sheetTujuan.Name = kotaAktif
  End If
  
  ' baru kita mulai memindahkan data
  ' 1. kita pendahkan heeder terlebih dahulu
  '       - ini maksud nya copy row 1 pada sheetAwal (sheet "Data")
  '       - paste di row 1 pada sheetTujuan (sheet kotaAktif)
  sheetAwal.Rows(1).Copy sheetTujuan.Rows(1)
  
  ' 2. mencari row kosong pada sheetTujuan dari column A
  '       - maksud langkah ini sama dengan mengambil iRowAkhir
  iRowAkhirTujuan = sheetTujuan.Cells(sheetTujuan.Rows.Count, 1).End(xlUp).Row
  
  ' 3. copy data pada row iRowData (angka berubah - ubah) pada sheetAwal
  '       - dan paste pada sheetTujuan di row iRowAkhirTujuan (angka juga berubah)
  '       - yang di offset / dilebihkan 1 row
  '       - artinya ketika aplikasi mendapat row 1 sebagai data terakhir
  '       - maka data akan di-paste di row 2 >> 1 + 1 (yang pasti kosong)
  sheetAwal.Rows(iRowAwal).Copy sheetTujuan.Rows(iRowAkhirTujuan + 1)
 Next iRowAwal

 ' set sheetAwal sebagai sheet aktif setelah melakukan process
 sheetAwal.Select

 'set rng dan sheet menjadi nilai awal yaitu null
 Set rng = Nothing
 Set sheetAwal = Nothing
End Sub
' ============================================================ 

       
 

  • Dan RUN.
 Atau sodara - sodara bisa men-download file Excel Macro nya disini

okeee.. segitu aja dulu ya..
Semoga bermafaat #HappyCoding #ExcelSakti 

Comments