Laman

BelajarVBA 011 - Range 05 (Properti End)

Coretan Mr. Kid

Merasa diri kita memiliki kemampuan yang lebih tinggi dari orang lain adalah awal kerusakan karakter budi pekerti yang baik.

Pembahasan kali ini adalah tentang mendapatkan sebuah range dibatas terluar tertentu dengan memanfatkan properti End milik object Range. Pembahasan kali ini akan menggunakan data di sheet bernama 'Data16' dan 'Data15' pada file BelajarVBA011_05.xlsm, yang juga dapat dijadikan sebagai media untuk mempraktekkan langsung script yang ada.

Kebutuhan untuk segera menuju ke kolom terakhir di baris terakhir suatu dataset dari suatu range tertentu dapat dilakukan dengan memanfaatkan properti End milik object Range. Properti End akan mendapatkan 1 (satu) buah range yang terakhir pada batas area arah pergerakannya. Penggunaan properti END sama halnya dengan penekanan tombol CTRL yang diikuti penekanan arah panah pada keyboard saat berada di Workbook window (berada di worksheet).


Syntax :
object_range.END(arah_pergerakan)

Properti End memiliki 4 (empat) arah pergerakan, yaitu :
(Lihat gambar berikut. Range merah adalah range pojok kiri atas dari area range yang menjadi range asal)
  • xlDown
    bergerak kearah bawah (baris selanjutnya) dari range pojok kiri suatu area range dengan area pergerakan sebagai sebuah range N baris x 1 kolom.
  • xlUp
    bergerak kearah atas (baris sebelumnya) dari range pojok kiri suatu area range dengan area pergerakan sebagai sebuah range N baris x 1 kolom.
  • xlToRight
    bergerak kearah kanan (kolom selanjutnya) dari range pojok kiri suatu area range dengan area pergerakan sebagai sebuah range 1 baris x N kolom.
  • xlToLeft
    bergerak kearah kiri (kolom sebelumnya) dari range pojok kiri suatu area range dengan area pergerakan sebagai sebuah range 1 baris x N kolom.
Properti End akan bergerak dalam arah range sebaris atau range sekolom pada worksheet tersebut. Batas maksimum pergerakan End adalah sampai batas worksheet, yaitu :
  • baris terakhir Excel sebagai batas terbawah
  • baris 1 Excel sebagai batas teratas
  • kolom terakhir Excel sebagai batas terkanan
  • kolom 1 Excel sebagai batas terkiri

Karakteristik pergerakan properti End adalah sebagai berikut :
(berlaku untuk seluruh arah pergerakan, contoh pada gambar adalah arah dengan xlToLeft)
  1. Melintasi blank cells sampai batas worksheet (tanpa ada satupun cell berisi data setelah range asal)
    • Terjadi ketika digunakan mulai dari sebuah range asal, baik berisi data (Case 1.1) maupun blank (Case 1.2), kemudian range selanjutnya adalah blank cells dan tidak pernah bertemu satupun range berisi data sampai batas worksheet.
    • Range asal bisa berisi data seperti Case 1.1 ataupun berupa blank cell seperti Case 1.2
    • Hasil pergerakan End adalah pada range yang berada dibatas worksheet. Seperti pada gambar yang menggunakan xlToLeft, maka hasil pergerakan End adalah pada range yang berada dikolom pertama Excel (kolom A) dibaris range asalnya.
    • Jika area lintasan yang berupa blank cells tersebut dirapatkan hingga tidak ada lintasannya lagi alias range asal berada di kolom A, maka pergerakan End tidak mengalami pergeseran karena lokasi range hasil adalah pada range batas worksheet yang dalam hal ini juga di kolom A.

  2. Melintasi blank cells sampai suatu range yang ada isinya
    • Terjadi ketika digunakan mulai dari sebuah range asal, baik berisi data (Case 1.1) maupun blank (Case 1.2), kemudian range selanjutnya adalah blank cells sampai bertemu 1 (satu) range yang berisi data
    • Range asal bisa berisi data seperti Case 2.1 ataupun berupa blank cell seperti Case 2.2
    • Hasil pergerakan End adalah pada range yang berisi data setelah range asal. Seperti pada gambar yang menggunakan xlToLeft, maka hasil pergerakan End adalah pada 1 (satu) range yang berisi data berupa teks 'Kid' sesuai baris range asal masing-masing Case
    • Jika area lintasan yang berupa blank cells tersebut dirapatkan hingga tidak ada lintasannya lagi alias range asal berdampingan dengan range berisi data setelah range asal diarah pergerakannya, maka pergerakan End pada :
      1. range asal yang berupa blank cell (Case 2.2) akan menghasilkan range hasil di range berisi data diarah pergerakan setelah range asal alias sesuai kaidah Case 2.2 tersebut
      2. range asal yang berisi data (Case 2.1) akan mengikuti kaidah Case 3 yang dijelaskan berikutnya

  3. Bergerak disuatu range yang padat berisi data
    • Terjadi ketika digunakan mulai dari sebuah range asal yang berisi data dengan range selanjutnya juga berisi data
    • Seluruh range berisi data, yaitu mulai dari range asal sampai range tertentu yang bersinggungan (berdampingan) searah pergerakan
    • Hasil pergerakan adalah pada range terakhir diarah pergerakan yang berisi data. Seperti pada gambar yang menggunakan xlToLeft, maka hasil pergerakan End adalah pada range terakhir dari area range berisi data yang ada, yaitu pada cell yang berisi data teks berbunyi 'Kid'

Karakteristik yang dijabarkan diatas adalah hal-hal yang perlu diwaspadai dalam penggunaan properti End. Dengan demikian resiko dari pergerakan End berdasar struktur data atau pola data yang akan diolah sudah dapat diketahui.

Contoh-contoh berikut ini akan menggunakan data di sheet bernama 'Data16'. Pada sheet tersebut ada sebuah tabel berkaidah database pada area range A1:H12. Header tabel berada di baris 1 Excel dan hanya 1 (satu) baris saja. Record data dimulai dari baris 2 Excel. Kolom-kolom kunci milik tabel adalah pada kolom A sampai kolom E, yang seluruhnya harus berisi data. Jadi, sheet 'Data16' berisi tabel yang padat berisi. Sheet 'Data16' tersebut adalah seperti gambar berikut ini :

Contoh 1 : Bergerak dalam area data

Penggunaan properti End pada sheet 'Data16' dengan range asal adalah range E1 akan diletakkan pada prosedur berikut ini :
Public Sub TentangEnd_Contoh1()
    Dim sht As Worksheet
    Dim rngAsal As Range, rngHasil As Range
   
    'pendefinisian sheet kerja,
    'disimpan dalam variabel sht
    'dan sheet diaktifkan (activate)
    Set sht = Sheets("Data16")
    sht.Activate
   
    'baris-baris kode akan diletakkan setelah baris ini

End Sub

Variabel object Worksheet bernama sht telah didefinisikan berisi sheets 'Data16' pada baris berbunyi :
Set sht = Sheets("Data16")

  • Penggunaan xlDown (ke BAWAH)
       Set rngAsal = sht.Range("E1")
       Set rngHasil = rngAsal.End(xlDown)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
          "Arah : xlDown" & vbCrLf & _
          "Hasil : " & rngHasil.Address

    Proses pada potongan script diatas adalah :
    • Mendefinisikan variabel rngAsal agar berisi range E1 yang ada di sheet yang tersimpan dalam variabel object worksheet bernama sht.
    • Mendefinisikan variabel rngHasil yang berupa hasil suatu proses penggunaan properti End dengan arah xlDown yang dimulai dari rngAsal. Variabel rngAsal berisi range E1. Jadi properti End digunakan dari range E1 [rngAsal] ke BAWAH [.End(xlDown)]. Range hasil penggunaan properti End akan berisi 1 (satu) cell beralamat di range E12 dan disimpan ke dalam variabel bernama rngHasil. Proses ini adalah pada baris kode :
      Set rngHasil = rngAsal.End(xlDown)
    • Contoh pemanfaatan hasil penggunaan properti End, yang dalam hal ini berupa proses meng-Copy ke Clipboard.
    • Menampilkan pesan kepada user menggunakan kotak pesan (MsgBox) yang berisi informasi alamat range asal, arah pergerakan End, dan alamat range hasil.

  • Penggunaan xlToLeft (ke KIRI)
    Setelah proses menggunakan xlDown diatas, proses dilanjutkan dengan menggunakan xlToLeft. Jadi, range asal adalah range hasil proses sebelumnya yang bernama rngHasil yang berisi range E12.
       Set rngAsal = rngHasil
       Set rngHasil = rngAsal.End(xlToLeft)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
          "Arah : xlToLeft" & vbCrLf & _
          "Hasil : " & rngHasil.Address

    Proses pada potongan script diatas adalah :
    • Mendefinisikan variabel rngAsal agar berisi range yang disimpan oleh variabel rngHasil. Pada contoh ini, rngHasil berisi range hasil proses pada penggunaan xlDown yang berupa range E12. Jadi, rngAsal akan berisi range E12.
    • Mendefinisikan variabel rngHasil yang berupa hasil suatu proses penggunaan properti End dengan arah xlToLeft yang dimulai dari rngAsal. Variabel rngAsal berisi range E12. Jadi properti End digunakan dari range E12 [rngAsal] ke KIRI [.End(xlToLeft)]. Range hasil penggunaan properti End akan berisi 1 (satu) cell beralamat di range A12 dan disimpan ke dalam variabel bernama rngHasil. Proses ini adalah pada baris kode :
      Set rngHasil = rngAsal.End(xlToLeft)
    • Contoh pemanfaatan hasil penggunaan properti End, yang dalam hal ini berupa proses meng-Copy ke Clipboard.
    • Menampilkan pesan kepada user menggunakan kotak pesan (MsgBox) yang berisi informasi alamat range asal, arah pergerakan End, dan alamat range hasil.

  • Penggunaan xlUp (ke ATAS)
    Setelah proses menggunakan xlToLeft diatas, proses dilanjutkan dengan menggunakan xlUp. Jadi, range asal adalah range hasil proses sebelumnya yang bernama rngHasil yang berisi range A12.
       Set rngAsal = rngHasil
       Set rngHasil = rngAsal.End(xlUp)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
          "Arah : xlUp" & vbCrLf & _
          "Hasil : " & rngHasil.Address

    Proses pada potongan script diatas adalah :
    • Mendefinisikan variabel rngAsal agar berisi range yang disimpan oleh variabel rngHasil. Pada contoh ini, rngHasil berisi range hasil proses pada penggunaan xlToLeft yang berupa range A12. Jadi, rngAsal akan berisi range A12.
    • Mendefinisikan variabel rngHasil yang berupa hasil suatu proses penggunaan properti End dengan arah xlUp yang dimulai dari rngAsal. Variabel rngAsal berisi range A12. Jadi properti End digunakan dari range A12 [rngAsal] ke ATAS [.End(xlUp)]. Range hasil penggunaan properti End akan berisi 1 (satu) cell beralamat di range A1 dan disimpan ke dalam variabel bernama rngHasil. Proses ini adalah pada baris kode :
      Set rngHasil = rngAsal.End(xlUp)
    • Contoh pemanfaatan hasil penggunaan properti End, yang dalam hal ini berupa proses meng-Copy ke Clipboard.
    • Menampilkan pesan kepada user menggunakan kotak pesan (MsgBox) yang berisi informasi alamat range asal, arah pergerakan End, dan alamat range hasil.

  • Penggunaan xlToRight (ke KANAN)
    Setelah proses menggunakan xlUp diatas, proses dilanjutkan dengan menggunakan xlToRight. Jadi, range asal adalah range hasil proses sebelumnya yang bernama rngHasil yang berisi range A1.
       Set rngAsal = rngHasil
       Set rngHasil = rngAsal.End(xlToRight)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
           "Arah : xlToRight" & vbCrLf & _
           "Hasil : " & rngHasil.Address

    Proses pada potongan script diatas adalah :
    • Mendefinisikan variabel rngAsal agar berisi range yang disimpan oleh variabel rngHasil. Pada contoh ini, rngHasil berisi range hasil proses pada penggunaan xlUp yang berupa range A1. Jadi, rngAsal akan berisi range A1.
    • Mendefinisikan variabel rngHasil yang berupa hasil suatu proses penggunaan properti End dengan arah xlToRight yang dimulai dari rngAsal. Variabel rngAsal berisi range A1. Jadi properti End digunakan dari range A1 [rngAsal] ke KANAN [.End(xlToRight)]. Range hasil penggunaan properti End akan berisi 1 (satu) cell beralamat di range H1 dan disimpan ke dalam variabel bernama rngHasil. Proses ini adalah pada baris kode :
      Set rngHasil = rngAsal.End(xlToRight)
    • Contoh pemanfaatan hasil penggunaan properti End, yang dalam hal ini berupa proses meng-Copy ke Clipboard.
    • Menampilkan pesan kepada user menggunakan kotak pesan (MsgBox) yang berisi informasi alamat range asal, arah pergerakan End, dan alamat range hasil.

Pengaruh susunan data
Selain sheet 'Data16', pada workbook tersebut juga ada sheet 'Data15' yang digunakan pada pembahasan lalu tentang UsedRange, Intersection, dan Union seperti gambar berikut ini :
Proses dalam prosedur bernama TentangEnd_Contoh1 diatas diterapkan pada dataset 'cabang2'. Range asal saat penggunaan properti xlDown adalah pada range J5. Proses dalam prosedur akan berjalan sebagai berikut :
  • dari range J5
  • ke range J10 (hasil xlDown)
  • ke range I10 (hasil xlToLeft)
  • ke range I5 (hasil xlUp)
  • ke range J5 (hasil xlToRight)
Pada proses yang terjadi, area range I12:J15 tidak pernah terlintasi atau menjadi hasil dari proses penggunaan properti End diatas. Artinya, tidak semua record pada dataset 'cabang2' terlingkupi oleh proses jika setiap proses dibuat garis maya pembentuk batas. Hal ini disebabkan karena kehadiran blank cells di range I11:J11. Karakteristik pergerakan properti END yang telah dijelaskan diatas, terutama Case 3, tampak jelas pada contoh proses ini.

Contoh 2 : Mendapatkan batas terluar area data

Properti End sering digunakan untuk mendapatkan batas terluar area data. Batas terluar area data bisa berarti :
  • Baris terakhir area data
  • Kolom terkanan area data
  • Baris pertama area data ketika data diletakkan bukan pada baris pertama Excel atau ada baris kosong antara header data dengan record pertama data
  • Kolom pertama area data ketika data diletakkan bukan pada kolom pertama Excel
Penggunaan properti End pada sheet 'Data16' untuk mendapatkan batas-batas terluar area data akan diletakkan pada prosedur berikut ini :
Public Sub TentangEnd_Contoh2()
    Dim sht As Worksheet
    Dim rngAsal As Range, rngHasil As Range
   
    'pendefinisian sheet kerja,
    'disimpan dalam variabel sht
    'dan sheet diaktifkan (activate)
    Set sht = Sheets("Data16")
    sht.Activate
   
    'baris-baris kode akan diletakkan setelah baris ini

End Sub

Variabel object Worksheet bernama sht telah didefinisikan berisi sheets 'Data16' pada baris berbunyi :
Set sht = Sheets("Data16")

  • Baris terakhir data dengan xlDown
       '>> Menggunakan xlDown
       '- Khusus untuk tabel yang pasti memiliki record data
       '  dan rapat berisi data
       '  (tidak ada blank cell diantara record)
       '- Range asal pada baris header di kolom yang penuh datanya
       '- Header di baris 1 Excel
       '- Kolom yang penuh datanya adalah kolom A
       '- Range asal adalah A1
       Set rngAsal = sht.Range("A1")
       Set rngHasil = rngAsal.End(xlDown)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
          "Arah : xlDown" & vbCrLf & _
          "Hasil : " & rngHasil.Address & vbCrLf & _
          "Baris terakhir data (baris Excel) : " & rngHasil.Row

    Pada penggunaan xlDown, range asal harus berada disalah satu record data yang bukan record terakhir pada kolom yang pasti penuh isinya, seperti pada kolom-kolom kunci yang harus ada isinya. Proses pada potongan script yang menggunakan xlDown diatas adalah :
    • Mendefinisikan range asal di range A1
    • Menyimpan range hasil ke rngHasil yang merupakan hasil proses penggunaan xlDown terhadap rngAsal
    • Meng-Copy rngHasil ke Clipboard sebagai salah satu contoh proses yang bisa dilakukan terhadap range hasil
    • Menampilkan pesan kepada user dengan kotak pesan (MsgBox) yang berisi informasi tentang alamat range asal, arah pergerakan End, alamat range hasil dan indeks baris Excel dari range hasil yang merupakan baris terakhir data

    Bahan latihan dan uji coba
    Apa yang terjadi jika syarat :
    • 'pasti memiliki record data' tidak terpenuhi alias script diatas dijalankan pada data yang tidak memiliki record ?
    • 'rapat berisi data' tidak terpenuhi alias script diatas dijalankan pada data yang ada blank cell-nya ?

  • Baris terakhir data dengan xlUp
       '>> Menggunakan xlUp
       '- Khusus untuk tabel yang tidak mungkin
       '  berisi record diseluruh baris Excelnya
       '- Range asal dari baris terakhir Excel
       '- Jumlah baris Excel didapat dengan Rows.Count
       '- Kolom yang penuh datanya adalah kolom A (kolom ke-1 Excel)
       '- Range asal adalah Cells(Rows.Count, 1)
       '  yang berarti cell pada
       '  baris Excel terakhir (hasil Rows.Count)
       '  dikolom ke-1 Excel
       Set rngAsal = sht.Cells(Rows.Count, 1)
       Set rngHasil = rngAsal.End(xlUp)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
           "Arah : xlUp" & vbCrLf & _
           "Hasil : " & rngHasil.Address & vbCrLf & _
           "Baris terakhir data (baris Excel) : " & rngHasil.Row

    Pada penggunaan xlUp, range asal harus berada dibaris diluar area data. Umumnya range asal adalah baris terakhir Excel pada kolom data yang baris terakhirnya pasti berisi data, seperti pada kolom-kolom kunci yang harus ada isinya. Proses pada potongan script yang menggunakan xlUp diatas adalah :
    • Mendefinisikan range asal di baris terakhir Excel pada kolom A. Kolom A adalah kolom ke-1 Excel. Baris terakhir Excel bisa didapat dengan Rows.Count dan range di baris terakhir Excel pada kolom A bisa didapat dengan menggunakan properti Cells yang membutuhkan informasi nomor indeks baris Excel dan nomor indeks kolom Excel. Proses ini adalah pada baris kode :
      Set rngAsal = sht.Cells(Rows.Count, 1)
    • Menyimpan range hasil ke rngHasil yang merupakan hasil proses penggunaan xlUp terhadap rngAsal
    • Meng-Copy rngHasil ke Clipboard sebagai salah satu contoh proses yang bisa dilakukan terhadap range hasil
    • Menampilkan pesan kepada user dengan kotak pesan (MsgBox) yang berisi informasi tentang alamat range asal, arah pergerakan End, alamat range hasil dan indeks baris Excel dari range hasil yang merupakan baris terakhir data

    Bahan latihan dan uji coba
    • Apa yang terjadi ketika potongan script diatas dijalankan pada seluruh baris Excel yang terisi data ?
    Tidak ada hal yang mustahil meskipun menggunakan Excel 2007 ke atas yang berisi sampai satu juta lebih baris Excel. Dulu pada saat Excel 2003 kebawah adalah versi terakhir Excel, dianggap bahwa baris sebanyak 65,535 yang dimiliki worksheet Excel 2003 tidak mungkin penuh terisi. Nyatanya, saat ini jumlah baris sebanyak 65,535 menjadi terlalu sedikit karena data yang diolah selalu melebihi nilai tersebut. Bahkan jumlah baris sebanyak satu juta lebih yang disediakan worksheet Excel 2007 ke atas sebenarnya masih relatif sedikit.

  • Kolom terakhir data dengan xlToRight
       '>> Menggunakan xlToRight
       '- Khusus tabel yang pasti memiliki lebih dari 1 kolom
       '  dan rapat berisi data
       '  (tidak ada blank cell diantara nama kolom)
       '- Range asal pada baris header di kolom pertama data
       '- Header di baris 1 Excel
       '- Kolom pertama data adalah kolom A
       '- Range asal adalah A1
       Set rngAsal = sht.Range("A1")
       Set rngHasil = rngAsal.End(xlToRight)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
          "Arah : xlToRight" & vbCrLf & _
          "Hasil : " & rngHasil.Address & vbCrLf & _
          "Kolom terakhir data (kolom Excel ke-) : " & _
          rngHasil.Column _
          & vbCrLf & "yaitu pada kolom : " & _
          Replace(rngHasil.Address(False, False), _
          rngHasil.Row, vbNullString)

    Pada penggunaan xlToRight, range asal harus berada disalah satu header yang bukan header terakhir, seperti pada kolom pertama data. Proses pada potongan script yang menggunakan xlToRight diatas adalah :
    • Mendefinisikan range asal di range A1
    • Menyimpan range hasil ke rngHasil yang merupakan hasil proses penggunaan xlToRight terhadap rngAsal
    • Meng-Copy rngHasil ke Clipboard sebagai salah satu contoh proses yang bisa dilakukan terhadap range hasil
    • Menampilkan pesan kepada user dengan kotak pesan (MsgBox) yang berisi informasi tentang alamat range asal, arah pergerakan End, alamat range hasil dan indeks kolom Excel dari range hasil yang merupakan kolom terakhir data beserta nama kolom Excel-nya

    Bahan latihan dan uji coba
    Apa yang terjadi jika syarat :
    • 'pasti memiliki lebih dari 1 kolom' tidak terpenuhi alias script diatas dijalankan pada data yang berisi 1 (satu) kolom saja ?
    • 'rapat berisi data' tidak terpenuhi alias script diatas dijalankan pada data yang kolomnya tidak ada namanya (blank) ?

  • Kolom terakhir data dengan xlToLeft
       '>> Menggunakan xlToLeft
       '- Khusus untuk tabel yang tidak mungkin
       '  menggunakan seluruh kolom Excel
       '- Range asal dari kolom terakhir Excel dibaris header
       '- Baris header di baris 1 Excel
       '- Jumlah kolom Excel didapat dengan Columns.Count
       '- Range asal adalah Cells(1, Columns.Count)
       '  yang berarti cell pada baris 1 Excel
       '  dikolom terakhir Excel (hasil Columns.Count)
       Set rngAsal = sht.Cells(1, Columns.Count)
       Set rngHasil = rngAsal.End(xlToLeft)
       rngHasil.Copy
       MsgBox "Asal : " & rngAsal.Address & vbCrLf & _
          "Arah : xlToLeft" & vbCrLf & _
          "Hasil : " & rngHasil.Address & vbCrLf & _
          "Kolom terakhir data (kolom Excel ke-) : " & _
          rngHasil.Column _
          & vbCrLf & "yaitu pada kolom : " & _
          Replace(rngHasil.Address(False, False), _
          rngHasil.Row, vbNullString)

    Pada penggunaan xlToLeft, range asal harus berada dibaris diluar area data. Umumnya range asal adalah kolom terakhir Excel pada baris data yang kolom terakhirnya pasti berisi data, seperti pada baris header data yang seluruh kolomnya pasti diberi nama. Proses pada potongan script yang menggunakan xlToLeft diatas adalah :
    • Mendefinisikan range asal di kolom terakhir Excel pada baris 1 Excel karena header di baris 1 Excel. Kolom terakhir Excel bisa didapat dengan Columns.Count dan range di kolom terakhir Excel pada baris 1 Excel bisa didapat dengan menggunakan properti Cells yang membutuhkan informasi nomor indeks baris Excel dan nomor indeks kolom Excel. Proses ini adalah pada baris kode :
      Set rngAsal = sht.Cells(1, Columns.Count)
    • Menyimpan range hasil ke rngHasil yang merupakan hasil proses penggunaan xlToLeft terhadap rngAsal
    • Meng-Copy rngHasil ke Clipboard sebagai salah satu contoh proses yang bisa dilakukan terhadap range hasil
    • Menampilkan pesan kepada user dengan kotak pesan (MsgBox) yang berisi informasi tentang alamat range asal, arah pergerakan End, alamat range hasil dan indeks kolom Excel dari range hasil yang merupakan kolom terakhir data beserta nama kolom Excel-nya

    Bahan latihan dan uji coba
    • Apa yang terjadi ketika potongan script diatas dijalankan pada seluruh kolom Excel yang digunakan sebagai kolom data ?
    Hal ini sangat kecil kemungkinannya, dan andaikan terjadi pun, maka biasanya harus segera ditata ulang penyusunan dataset-nya. Meski demikian, tidak ada salahnya untuk menganggap hal tersebut terjadi.

Pengaruh susunan data
Bagaimana jika prosedur bernama TentangEnd_Contoh2 yang berisi potongan-potongan proses untuk mendapatkan batas terkanan dan terbawah data bisa diterapkan pada worksheet bernama 'Data15' ? Berikut ini adalah salah satu dari sekian banyak langkah yang bisa digunakan :
  • Kolom pertama data pada dataset 'cabang1' didapat dengan range asal di range A5 kemudian xlToRight
  • Kolom terakhir data pada dataset 'cabang1' didapat dengan range asal berupa hasil proses untuk mendapatkan kolom pertama data pada dataset 'cabang1' yang kemudian memanfaatkan xlToRight
  • Kolom terakhir data pada dataset 'cabang2' didapat dengan range asal adalah kolom terakhir Excel dibaris 5 Excel kemudian xlToLeft
  • Kolom pertama data pada dataset 'cabang2' didapat dengan range asal berupa hasil proses untuk mendapatkan kolom terakhir data pada dataset 'cabang2' yang kemudian memanfaatkan xlToLeft

Permasalahan utama dalam penggunaan properti End pada contoh data seperti di sheet 'Data15' ini adalah dalam penentuan baris terakhir data setiap dataset. Dengan pola susunan data yang setiap kolomnya disetiap baris terakhir data tidak ada yang pasti terisi data, maka akan relatif rumit karena harus menghitung jumlah baris terbanyak dari setiap kolom disetiap dataset. Sebaiknya proses untuk mendapatkan baris terakhir data pada dataset yang polanya demikian tidak menggunakan properti End. Pembahasan berikutnya tentang properti CurrentRegion akan lebih mudah digunakan daripada penggunaan properti End.

Simpulan

Pola susunan data sangat mempengaruhi proses pendinamisan rujukan dalam Excel VBA. Semakin berkaidah database suatu dataset, setidaknya dengan tidak adanya baris kosong seluruhnya maupun kolom kosong seluruhnya, maka akan semakin mudah proses perujukan secara dinamis dalam Excel VBA.

:)

Insya Allah pembahasan berikutnya adalah tentang CurrentRegion. Properti CurrentRegion milik range termasuk salah satu tulang punggung pendinamisan rujukan range dalam Excel VBA.



9 komentar:

  1. HI Mr Kid,

    Saya cuma baru baca sekilas..tapi ini pembahasan yang sangat lengkap untuk pengunaan Range dengan properti End.

    Dijamin saya lebih ngerti.

    Thanks.Stella

    BalasHapus
  2. sepertinya memang lengkap,,dan saya pusing karena ga punya dasar ilmunya :D

    BalasHapus
    Balasan
    1. Memang kalau cuma baca ga langsung dicoba pasti pusing. Jadi harus kuatkan niat kalahkan rasa bosan dan kantuk, cetak bahannya, coba didepan komputer.

      Hapus
    2. itu sebab e ada judul :
      BelajarVBA 000 - Kenalan

      ya gak dab...

      Hapus
  3. maaf melenceng dari pembahasan, bagaimana code input yang tepat untuk memilih salah satu cell dalam satu kolom yang sama.
    misalakan E22, E40, E41. saya ingin memasukan data satu persatu

    saya menuliskan ;
    lembar.Range("E22, E40, E41").Value = Me.atk
    hasilnya malah terisi semua.

    semoga pertanyaan saya dapat dimengerti dan berkenan dijawab. terima kasih

    BalasHapus
    Balasan
    1. Misal memilih cells ke-2, yaitu cells E40 :
      lembar.range("e22,e40,e41").areas(2).cells(1).value=atk.value

      Hapus
  4. izin tanya bang...!!

    ada 2 sheet
    INPUT(sheet1), SIMPAN (sheet2)

    agar data yang diinput berikutnya tersimpan di bagian kolom berikutnya gmana caranya bang!


    saya menuliskan :
    sub SIMPAN()

    sheets("INPUT").Select
    Range("d4:am100").Copy
    sheets("SIMPAN").Select

    If Range("b5") = "" Then
    Range("b5").PasteSpecial xlPasteValues
    Else
    Dim kolomkosong
    kolomkosong = Range("c7").End(xlToRight).Offset(0, 1).Column
    Range("c7" & kolomkosong).PasteSpecial xlPasteValues

    End If
    End Sub


    mohon petunjuknya bang....TRIMAKASIH!!
    izin balas ke email :
    quantumcreative2357eng@gmail.com

    THANKS BANG....!!

    BalasHapus