[belajar-excel] ambil range acuan

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[belajar-excel] ambil range acuan

Milis Belajar Excel mailing list
 assalamu'alaikum Wr.Wb
BeExeller yang baik hati, mau tanya
saya membuat suatu coding VBA seperti ini
Dim range1 As Range
Dim range2 As Integer    Range("A1", Range("A1").End(xlDown)).Select
    Set range1 = Selection.Offset(1, 0).Select    range2 = ....
  
jadi ingin saya itu adalah mengambil baris sih A yang sudah di End dan yang sudah di Offsetcontoh karna sudah di Offset menjadi cell A88 nah saya ingin mengambil angka 88 itu kemudian di tambah dengan 20 dan supaya nanti rangeA88:A108 saya proses hidden (angka 20 itu selalu menetap karna admin lain selalu menampilkan header tambahan dengan mengcocy tabel diatasnya jadi selalu sama tabel atas dengan tabel bawah) dalam satu worksheet bisa ada 30 tabel maklum deh adminnya belum tau kaedah database yang benar.

mohon bantuannya BeExceller sekalian.
Terima Kasih,wassalamu'alaikum Wr.WbFahmi
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [belajar-excel] ambil range acuan

Milis Belajar Excel mailing list
Wa'alaikumussalam wr wb

Hai Fami,

Trit ini sudah lama sekali belum ada yang merespon ya...
Ternyata memang makna kalimatnya bisa berarti banyak.

1. Bagian ini :
Dim range1 As Range
Dim range2 As Integer
    Range("A1", Range("A1").End(xlDown)).Select
    Set range1 = Selection.Offset(1, 0).Select

Misal data ada di baris 1 (header) sampai baris 87 (record data di baris 2
sampai 87).
Range("A1", Range("A1").End(xlDown)).Select
menghasilkan blok range A1:A87

Kemudian, range A1:A87 tersebut di offset 1 baris oleh baris berikut :
Set range1 = Selection.Offset(1, 0)         '*tanpa .Select*
menghasilkan blok range A2:A88

*** Lalu blok range dari A2 sampai dengan A88 ini mau diapakan ? Karena
bunyi script ini tidak mencerminkan relasi yang erat dengan bagian lain
dari kalimat pertanyaan dalam kasus ini.
*** Penggunaan End(xlDown) beresiko pada data yang kosong, misal pada saat
tidak ada record data alias hanya ada header, maka proses ini menghasilkan
sesuatu yang benar-benar tidak diinginkan karena bisa sampai baris yang ada
data berikutnya atau malah sampai baris terakhir Excel (1jt brp gitu).
*** Jadi, gunakan End(xlDown) khusus pada tabel yang tidak boleh kosong
(selalu pasti minimal ada 1 record data).

Jika data di baris 1 sampai 87 itu tidak ada baris kosongnya, maka untuk
mendapatkan area range A1:A87 bisa dengan :
dim range1 as range
set range1=range("a1").currentregion.resize(,1)     'di A1, tekan ctrl A,
lalu perkecil areanya menjadi 1 kolom saja -> hasilnya range A1:A87

Jika data di baris 1 sampai 87 itu tidak ada baris kosongnya, maka untuk
mendapatkan area range A2:A88 (offset 1 baris) bisa dengan :
dim range1 as range
set range1=range("a1").currentregion.resize(,1).offset(1)     'di A1, tekan
ctrl A, lalu perkecil areanya menjadi 1 kolom saja, offset 1 baris -> range
A2:A88

**** Hindari penggunaan Select dan Selection*


2. Bagian ini :
jadi ingin saya itu adalah mengambil baris sih A yang sudah di End dan yang
sudah di Offset
contoh karna sudah di Offset menjadi cell A88 nah saya ingin mengambil
angka 88 itu
Berarti mau mengambil nomor baris suatu cells.
Biasanya nomor baris didapat dengan menggunakan properti Row milik si
object range.
Pakai contoh saja.
dim rng as range, lxlRowNumber as long
set rng=range("g17")
lxlrownumber=rng.row       'atau kalau mau langsung,
lxlrownumber=range("g17").row

Jadi, pada kasus ini,
1. kalimat ini :
jadi ingin saya itu adalah mengambil baris sih A yang sudah di End
TIDAK bisa menggunakan baris kode yang Anda buat tersebut. Alias baris kode
ANda tidak mendapatkan cells terakhir (End) seperti yang Anda maksudkan.

Untuk mendapatkan nomor baris cells terakhir (asumsi, minimal selalu ada 1
record)
dim range2 as long    'jangan pakai integer, karena integer hanya cukup
sampai baris Excel puluhan ribu doang
range2=range("a1").end(xldown).row       'hasilnya nomor baris terakhir
yang ada datanya

Jika tabel data selalu dijaga TIDAK ada baris kosong tapi bisa jadi masih
kosong alias belum diisi record apapun (header only)
dim range2 as long
range2=range("a1").currentregion.specialcells(xlcelltypelastcell).row
'ini seperti pakai goto special pilih last cells dari area yang di blok
*** Hayo... belum paham pakai goto dan goto special ya... mbok yao fitur
Excel dipelajari dulu, baru rajin belajar VBA


2. Kalimat ini :
jadi ingin saya itu adalah mengambil baris sih A yang sudah di End dan yang
sudah di Offset
TIDAK bisa menggunakan baris kode yang Anda buat tersebut. Alias baris kode
ANda tidak mendapatkan cells terakhir (End) seperti yang Anda maksudkan.

Untuk mendapatkan nomor baris cells hasil offset 1 baris dari cells
terakhir (asumsi, minimal selalu ada 1 record)
dim range2 as long    'jangan pakai integer, karena integer hanya cukup
sampai baris Excel puluhan ribu doang
range2=range("a1").end(xldown).offset(1).row       'hasilnya nomor baris
cells hasil offset 1 baris dari cells terakhir yang ada datanya

Jika tabel data selalu dijaga TIDAK ada baris kosong tapi bisa jadi masih
kosong alias belum diisi record apapun (header only)
dim range2 as long
range2=range("a1").currentregion.specialcells(xlcelltypelastcell).offset(1).row
'ini seperti pakai goto special pilih last cells dari area yang di blok
lalu offset 1
bisa juga begini :
dim range2 as long
range2=range("a1").offset(range("a1").currentregion.rows.count).row

3. Kalimat ini :
contoh karna sudah di Offset menjadi cell A88 nah saya ingin mengambil
angka 88 itu kemudian di tambah dengan 20 dan supaya nanti range
A88:A108 saya proses hidden (angka 20 itu selalu menetap karna admin lain
selalu menampilkan header tambahan dengan mengcocy tabel diatasnya jadi
selalu sama tabel atas dengan tabel bawah)
>> Pertanyaannya, apa isi 20 baris itu ? Kenapa di-hide ? Apakah tabel yang
di-copy admin itu akan disambungkan dengan tabel yang di A1 ? Kalau memang
maksudnya disambungkan, kenapa 20 baris itu hanya di-hide ?
Jawaban setiap pertanyaan di atas bisa membuat proses yang dilakukan
menjadi berbeda. Artinya baris kodenya juga akan berbeda. Bahkan mungkin
ada yang lebih efisien.

btw, fokus pada :
contoh karna sudah di Offset menjadi cell A88 nah saya ingin mengambil
angka 88 itu kemudian di tambah dengan 20 dan supaya nanti range
A88:A108
Artinya ingin ada range A88:A108 yang siap diproses. Misal range ini
disimpan dalam variabel object range bernama range1. Kondisi data seperti
nomor-nomor awal di atas sana ya... (minimal selalu pasti ada record data
di baris 2 Excel)
dim range1 as range
set range1=range("a1").end(xldown).offset(1).resize(20)      'dari A1, ke
cells terakhir kolom A yang ada datanya, offset 1 baris, perluas jadi 20
baris

Prosesnya bisa bermacam-macam, seperti :
> Hide
range1.entirerow.hidden=true
> Buang (delete BUKAN CLEAR CONTENTS atau BUKAN tekan tombol DELETE di
keyboard)
range1.entirerow.delete

4. Kalimat ini :
dalam satu worksheet bisa ada 30 tabel maklum deh adminnya belum tau kaedah
database yang benar.
>> Maksudnya tabel hasil copy-an si admin yang butuh belajar itu, yang ada
30 itu akan diapakan ? Mau dibuang ? Mau di hide data hasil copy-an nya ?
>> Lalu kalau dah bisa pakai baris kode di atas terus mau belajar Loop
untuk bisa dapatkan cells kosong yang 20 baris antar tabel hasil copy-an
admin itu kemudian di-hide gitu ? ciyuz? gitu ?

hmmm....
sepertinya beneran perlu belajar tentang fitur Goto dan Goto Special deh...
(daripada meluangkan waktu belajar loop sekedar untuk menyelsaikan kasus
ini)


Wassalamu'alaikum wr wb
Kid




2017-04-25 9:46 GMT+07:00 Fahmi Syaifullah [hidden email]
[belajar-excel] <[hidden email]>:

>
>
> assalamu'alaikum Wr.Wb
>
> BeExeller yang baik hati, mau tanya
>
> saya membuat suatu coding VBA seperti ini
>
> Dim range1 As Range
> Dim range2 As Integer
>     Range("A1", Range("A1").End(xlDown)).Select
>     Set range1 = Selection.Offset(1, 0).Select
>     range2 = ....
>
>
> jadi ingin saya itu adalah mengambil baris sih A yang sudah di End dan
> yang sudah di Offset
> contoh karna sudah di Offset menjadi cell A88 nah saya ingin mengambil
> angka 88 itu kemudian di tambah dengan 20 dan supaya nanti range
> A88:A108 saya proses hidden (angka 20 itu selalu menetap karna admin lain
> selalu menampilkan header tambahan dengan mengcocy tabel diatasnya jadi
> selalu sama tabel atas dengan tabel bawah) dalam satu worksheet bisa ada 30
> tabel maklum deh adminnya belum tau kaedah database yang benar.
>
>
> mohon bantuannya BeExceller sekalian.
>
> Terima Kasih,
> wassalamu'alaikum Wr.Wb
> Fahmi
>
>
>
Loading...