8 Messages
Digest #3667
Messages
Mon Nov 30, 2015 10:28 pm (PST) . Posted by:
"Edo Hanggoro" edo_hanggoro
Dear Mr. Kid,
Terima kasih atas pencerahannya, saya sudah coba dan hasilnya sudah seperti yang saya harapkan.
Terima kasih
Wassalammualakum Wr.Wb.
Edo
On Monday, November 30, 2015 1:19 PM, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
Hai Edo,
Pembarian tanda petik satu ( ' ) dalam penulisan suatu nilai ke sebuah cells dimaksudkan agar nilai yang ditulis ke cells tersebut akan diperlakukan cells Excel sebagai data bertipe text.
Merujuk ke sheet lain, tambahkan nama sheet dengan struktur 'nama sheetnya'! sebelum alamat range yang dirujuk.
Wassalam,
Kid
2015-11-30 12:22 GMT+07:00 Edo Hanggoro Edo_Hanggoro@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:
Dear All,
Terima kasih atas bantuannya dan saya sudah coba dan tidak ada masalah.Ada beberapa hal yang ingin saya ketahui yaitu :
- Di awal format terdapat tanda petik satu ('),apa fungsi dari tanda tersebut?
- Saya mencoba untuk menghilangkan tanda petik satu (') dengan menghapus bagian " ' " tetapi mengapa hasilnya masih tetap ada tanda (').
- .cells(2).value= "'" _
& evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:h8,2,0)" ) _
& format( sdate , "-YY" ) _
& evaluate( "=vlookup(" & sdate & ", h12:i18 , 2 , 0 )" ) _
& format( mid( scode , lchar , 9 ) , "-" & evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:i8,3,0)" ) ) end with
- Jika seandainya untuk table array dari fungsi vlookup tersebut akan diambil dari worksheet lain (misal dari Sheet 2) bagaimana penulisannya di kodenya?
Terima kasihSalam
Edo
On Sunday, November 29, 2015 8:35 PM, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
Wa'alaikumussalam wr wb
Hai Edo,
Prosedur TransformCode nya sudah dibuat ya. Sebaiknya diletakkan di general module agar bisa digunakan oleh prosedur lainnya, termasuk prosedur-prosedur events milik sheet manapun dan sebagainya.
Kemudian, cara memanggil prosedur nya diperbaiki. Kalau sempet, jalan-jalanlah ke blog milis tentang hal ini disini, yang ada bagian tentang cara memanggil prosedur lain dari sebuah prosedur.
Pada kasus Anda,
berikut ini yang Anda buat :
Cells(lRow, 3).Value = TransformCode.Cells(lRow, 3).Offset(0, -1).Resize(1, 2)
ini yang ada diimil saya tempo lalu :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
dan saya rasa jelas bahwa :
tapi, ganti bagian yang merah dengan
menunjukkan bahwa bagian yang berbunyi :
cells(lrow,4).value=cells(lrow,2).value*cells(lrow,3).value 'isi kolom D
if err.number=0 then 'kolom D terisi dengan baik ?
cells(lrow,2).value=cells(lrow,2).value-cells(lrow,4).value 'isi kolom B
endif 'selesai cek kolom D terisi dengan baik
harus diganti alias HAPUS bagian merah tersebut dan tulis baris kode berikut :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
Ada baiknya jika tidak langsung terfokus kepada baris-baris kode nya saja, tetapi runut dari awal imil sampai akhir imil disempatkan ditelaah dengan tartil.
Wassalamu'alaikum wr wb
Kid
2015-11-29 8:59 GMT+07:00 Edo Hanggoro Edo_Hanggoro@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:
Dear Mr. Kid,Assalamuallaikum Wr.Wb.
Terima kasih banyak atas bantuanya, tetapi saya masih mendapatkan kesulitan dalam melakukan proses pemanggilan transform code-nya dan selalu error.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, lRow As Long
If Not Intersect(Target, Range("C:C")) Is Nothing Then 'cek yang berubah beririsan dengan kolom C
Application.EnableEvents = False 'cegah Excel untuk responsif terhadap perilaku
On Error Resume Next 'lewati error yang terjadi
For Each rng In Intersect(Target, Range("C:C")) 'di setiap cells yang berubah di kolom C
lRow = rng.Row 'simpan baris
Cells(lRow, 3).Value = TransformCode.Cells(lRow, 3).Offset(0, -1).Resize(1, 2)
Next rng 'ke range yang berubah berikutnya
On Error GoTo 0 'kembalikan setting trap error ke default
Application.EnableEvents = True 'excel boleh responsif lagi
End If 'selesai cek
End Sub
Saya dapatkan error di bagian yang merah tersebut. Kira-kira kesalahannya ada dimana ya?
Mohon bantuannya sekali lagi.
Terima kasih
Edo
On Saturday, November 28, 2015 10:00 PM, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
Wa'alaikumussalam wr wb
Hai Edo,
*** sesuaikan dengan keadaan setempat jika berbeda dengan preview file lampiran milik Pak Edo
Pada sebuah general module, buat prosedur berikut : (misal diberi nama TransformCode)
public sub TransformCode( rngProc as range )
dim lChar as long, sDate as string, sCode as string
with rngproc 'kerja di range inputan rngProc
sdate=.cells(1).value2 'simpan nilai asli tanggal inputan ke sdate
scode=.cells(2).value2 'simpan nilai asli kode inputan ke scode
lchar=1 'karakter ke-1 -> mulainya proses loop
'dapatkan angka pertama (max di karakter ke-6 alias ada ruang max 5 karakter untuk header kode)
do until isnumeric( mid( scode , lchar , 1 ) ) or lchar>6 'cek dah nemu angka belum atau karakter diproses dah lebih dari 6
lchar=lchar+1 'pindah ke karakter berikutnya
loop 'ke proses loop dengan nilai karakter yang baru
'tulis ke cells ke-2 dari inputan (posisi cell kode)
'diawali petik satu ( ' )
'disambung hasil vlookup untuk ambil dari kolom H tabel yang atas (kode barang)
'disambung format tahun YY didahului delimiter dash ( - )
'disambung hasil vlookup untuk ambil dari kolom i tabel yang bawah (kode tanggal)
'disambung format kode digit dengan struktur format hasil vlookup untuk ambil dari kolom i tabel yang atas (kode digit)
'didahului delimiter dash ( - )
.cells(2).value= "'" _
& evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:h8,2,0)" ) _
& format( sdate , "-YY" ) _
& evaluate( "=vlookup(" & sdate & ", h12:i18 , 2 , 0 )" ) _
& format( mid( scode , lchar , 9 ) , "-" & evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:i8,3,0)" ) ) end with
end sub
Kemudian, pada event change milik worksheet terkait, diisi baris kode seperti di-imil yang lalu, yang bunyinya begini :
dim rng as range,lRow as long
if not intersect( target,range("c:c") ) is nothing then 'cek yang berubah beririsan dengan kolom C
application.enableevents=false 'cegah Excel untuk responsif terhadap perilaku
on error resume next 'lewati error yang terjadi
for each rng in intersect( target,range("c:c") ) 'di setiap cells yang berubah di kolom C
lrow=rng.row 'simpan baris
cells(lrow,4).value=cells(lrow,2).value*cells(lrow,3).value 'isi kolom D
if err.number=0 then 'kolom D terisi dengan baik ?
cells(lrow,2).value=cells(lrow,2).value-cells(lrow,4).value 'isi kolom B
endif 'selesai cek kolom D terisi dengan baik
err.clear 'hapus error yang terjadi
next rng 'ke range yang berubah berikutnya
on error goto 0 'kembalikan setting trap error ke default
application.enableevents=true 'excel boleh responsif lagi
endif 'selesai cek
tapi, ganti bagian yang merah dengan baris kode memanggil prosedur TransformCode dengan menyertakan range yang diproses, yaitu range tanggal inputan dan kode inputan (1 baris x 2 kolom) seperti bergini :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
yang bahasa manusianya :
"bi pibi, suruh anak buahmu si transformcode kerja ye. bi, kamu bawa range yang bisa kamu ambil sendiri ngikutin arahanku ini,
1. kamu ke kolom C lalu jalan sampe baris yang kuproses ini (sambil nyerahin nota ke pibi yang isinya nomer baris Excel)
[ cells(lrow,3) ] (lrow adalah lembaran nota yang diserahkan)
2. kalo dah nemu, kamu pindah ke kolom sebelumnya (berarti geser ke kiri 1 kolom) tapi tetep dibaris itu ya
[ .offset( 0 , -1 ) ] (kalau kolom, ke kanan itu ples, dan ke kiri itu min)
3. terus, karungin tuh range, mulai tempatmu itu, sampai kamu dapetin 2 kolom. Tapi cuman sebaris tempatmu doink ya
[ .resize( 1 , 2 ) ]
nah.. kalo dah penuh tuh karung, segera ke tempatnya si transformcode. Dia bakal minta syarat tuh kalo disuruh.
Kalo dia minta syarat, kasihin tuh karung. Kamu harus nungguin dia sampai selesai ya. Kalo dah selesai, lapor kesini."
Catatan :
a. kode barang baru diset untuk maksimal diawali oleh 5 karakter bukan angka. Silakan dikembangkan dan disesuaikan sendiri.
b. pencegahan kesalahan input tanggal (tidak bertipe datetime dan tidak bisa dijadikan datetime yang benar) ditambahkan sendiri.
c. inputan tanggal (bertipe datetime) atau kode yang tidak ada dalam daftar, silakan dicegah atau diberi proses sendiri.
d. pengubahan letak daftar-daftar, penambahan atau pengurangan isi dalam daftar, dan kesesuaian tipe data dalam daftar, silakan dilakukan penyesuaian di dalam baris-baris kode di atas secara mandiri.
e. proses yang dipicu bukan oleh pengubahan nilai kolom C atau beserta kolom lainnya, silakan disesuaikan sendiri baris kodenya.
f. pengembangkan dan penyesuaian dengan permasalahan yang mirip tetapi tidak sama datanya atau strukturnya, silakan dilakukan secara setahap demi setahap secara mandiri.
Moga-moga gak error ya..
Kalo error, silakan dilacak dan dicari solusinya per penyebab error.
btw,
kenapa kasusnya selalu mengganti nilai inputan user ? kok gak ditulis di kolom lain saja ? bukankah malah akan ada informasi dan bukti bahwa user pernah mengisi kurang tepat (salah ketik atau seklian struktur isiannya keliru) kalau hasil diletakkan di kolom lain.
Dan juga, bisa tanpa VBA.
Moga-moga bukan karena pengen tampak keren dengan begitu di-input langsung ganti... Soale, dikuatirkan malah nanti jadi masalah...
Kalo jadi menimbulkan masalah, jadi gak keren lagi dah...
Moga-moga...
Wa'alaikumussalam wr wb
Kid
2015-11-28 14:49 GMT+07:00 Edo_Hanggoro@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:
Assalamualaikum Wr.Wb.
Dear All,Saya sedang mencoba untuk membuat kodeVBA dan mohon bantuannya untuk dapat membuat kode VBA untuk formatcell secara otomatis dimana jika seandainya pada kolom Tanggal terdapat tanggal1 jan 2016 dan pada kolom Nomer Kode diketikan "SD1", maka akansecara otomatis menjadi "SD002-1601-0001" (SD002 = Kode Barang, 16=Kode Tahun , 02=Kode Tanggal, 0001 =Kode Digit).
Dan untuk lebih jelasnya saya lampirkan filenya.
Terima Kasih sebelumnya.
Salam
Edo
#yiv9952062870 #yiv9952062870 -- #yiv9952062870ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv9952062870 #yiv9952062870ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv9952062870 #yiv9952062870ygrp-mkp #yiv9952062870hd {color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;}#yiv9952062870 #yiv9952062870ygrp-mkp #yiv9952062870ads {margin-bottom:10px;}#yiv9952062870 #yiv9952062870ygrp-mkp .yiv9952062870ad {padding:0 0;}#yiv9952062870 #yiv9952062870ygrp-mkp .yiv9952062870ad p {margin:0;}#yiv9952062870 #yiv9952062870ygrp-mkp .yiv9952062870ad a {color:#0000ff;text-decoration:none;}#yiv9952062870 #yiv9952062870ygrp-sponsor #yiv9952062870ygrp-lc {font-family:Arial;}#yiv9952062870 #yiv9952062870ygrp-sponsor #yiv9952062870ygrp-lc #yiv9952062870hd {margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;}#yiv9952062870 #yiv9952062870ygrp-sponsor #yiv9952062870ygrp-lc .yiv9952062870ad {margin-bottom:10px;padding:0 0;}#yiv9952062870 #yiv9952062870actions {font-family:Verdana;font-size:11px;padding:10px 0;}#yiv9952062870 #yiv9952062870activity {background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv9952062870 #yiv9952062870activity span {font-weight:700;}#yiv9952062870 #yiv9952062870activity span:first-child {text-transform:uppercase;}#yiv9952062870 #yiv9952062870activity span a {color:#5085b6;text-decoration:none;}#yiv9952062870 #yiv9952062870activity span span {color:#ff7900;}#yiv9952062870 #yiv9952062870activity span .yiv9952062870underline {text-decoration:underline;}#yiv9952062870 .yiv9952062870attach {clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;}#yiv9952062870 .yiv9952062870attach div a {text-decoration:none;}#yiv9952062870 .yiv9952062870attach img {border:none;padding-right:5px;}#yiv9952062870 .yiv9952062870attach label {display:block;margin-bottom:5px;}#yiv9952062870 .yiv9952062870attach label a {text-decoration:none;}#yiv9952062870 blockquote {margin:0 0 0 4px;}#yiv9952062870 .yiv9952062870bold {font-family:Arial;font-size:13px;font-weight:700;}#yiv9952062870 .yiv9952062870bold a {text-decoration:none;}#yiv9952062870 dd.yiv9952062870last p a {font-family:Verdana;font-weight:700;}#yiv9952062870 dd.yiv9952062870last p span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv9952062870 dd.yiv9952062870last p span.yiv9952062870yshortcuts {margin-right:0;}#yiv9952062870 div.yiv9952062870attach-table div div a {text-decoration:none;}#yiv9952062870 div.yiv9952062870attach-table {width:400px;}#yiv9952062870 div.yiv9952062870file-title a, #yiv9952062870 div.yiv9952062870file-title a:active, #yiv9952062870 div.yiv9952062870file-title a:hover, #yiv9952062870 div.yiv9952062870file-title a:visited {text-decoration:none;}#yiv9952062870 div.yiv9952062870photo-title a, #yiv9952062870 div.yiv9952062870photo-title a:active, #yiv9952062870 div.yiv9952062870photo-title a:hover, #yiv9952062870 div.yiv9952062870photo-title a:visited {text-decoration:none;}#yiv9952062870 div#yiv9952062870ygrp-mlmsg #yiv9952062870ygrp-msg p a span.yiv9952062870yshortcuts {font-family:Verdana;font-size:10px;font-weight:normal;}#yiv9952062870 .yiv9952062870green {color:#628c2a;}#yiv9952062870 .yiv9952062870MsoNormal {margin:0 0 0 0;}#yiv9952062870 o {font-size:0;}#yiv9952062870 #yiv9952062870photos div {float:left;width:72px;}#yiv9952062870 #yiv9952062870photos div div {border:1px solid #666666;height:62px;overflow:hidden;width:62px;}#yiv9952062870 #yiv9952062870photos div label {color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv9952062870 #yiv9952062870reco-category {font-size:77%;}#yiv9952062870 #yiv9952062870reco-desc {font-size:77%;}#yiv9952062870 .yiv9952062870replbq {margin:4px;}#yiv9952062870 #yiv9952062870ygrp-actbar div a:first-child {margin-right:2px;padding-right:5px;}#yiv9952062870 #yiv9952062870ygrp-mlmsg {font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv9952062870 #yiv9952062870ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv9952062870 #yiv9952062870ygrp-mlmsg select, #yiv9952062870 input, #yiv9952062870 textarea {font:99% Arial, Helvetica, clean, sans-serif;}#yiv9952062870 #yiv9952062870ygrp-mlmsg pre, #yiv9952062870 code {font:115% monospace;}#yiv9952062870 #yiv9952062870ygrp-mlmsg * {line-height:1.22em;}#yiv9952062870 #yiv9952062870ygrp-mlmsg #yiv9952062870logo {padding-bottom:10px;}#yiv9952062870 #yiv9952062870ygrp-msg p a {font-family:Verdana;}#yiv9952062870 #yiv9952062870ygrp-msg p#yiv9952062870attach-count span {color:#1E66AE;font-weight:700;}#yiv9952062870 #yiv9952062870ygrp-reco #yiv9952062870reco-head {color:#ff7900;font-weight:700;}#yiv9952062870 #yiv9952062870ygrp-reco {margin-bottom:20px;padding:0px;}#yiv9952062870 #yiv9952062870ygrp-sponsor #yiv9952062870ov li a {font-size:130%;text-decoration:none;}#yiv9952062870 #yiv9952062870ygrp-sponsor #yiv9952062870ov li {font-size:77%;list-style-type:square;padding:6px 0;}#yiv9952062870 #yiv9952062870ygrp-sponsor #yiv9952062870ov ul {margin:0;padding:0 0 0 8px;}#yiv9952062870 #yiv9952062870ygrp-text {font-family:Georgia;}#yiv9952062870 #yiv9952062870ygrp-text p {margin:0 0 1em 0;}#yiv9952062870 #yiv9952062870ygrp-text tt {font-size:120%;}#yiv9952062870 #yiv9952062870ygrp-vital ul li:last-child {border-right:none !important;}#yiv9952062870
Terima kasih atas pencerahannya, saya sudah coba dan hasilnya sudah seperti yang saya harapkan.
Terima kasih
Wassalammualakum Wr.Wb.
Edo
On Monday, November 30, 2015 1:19 PM, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
Hai Edo,
Pembarian tanda petik satu ( ' ) dalam penulisan suatu nilai ke sebuah cells dimaksudkan agar nilai yang ditulis ke cells tersebut akan diperlakukan cells Excel sebagai data bertipe text.
Merujuk ke sheet lain, tambahkan nama sheet dengan struktur 'nama sheetnya'! sebelum alamat range yang dirujuk.
Wassalam,
Kid
2015-11-30 12:22 GMT+07:00 Edo Hanggoro Edo_Hanggoro@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:
Dear All,
Terima kasih atas bantuannya dan saya sudah coba dan tidak ada masalah.Ada beberapa hal yang ingin saya ketahui yaitu :
- Di awal format terdapat tanda petik satu ('),apa fungsi dari tanda tersebut?
- Saya mencoba untuk menghilangkan tanda petik satu (') dengan menghapus bagian " ' " tetapi mengapa hasilnya masih tetap ada tanda (').
- .cells(2).value= "'" _
& evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:h8,2,0)" ) _
& format( sdate , "-YY" ) _
& evaluate( "=vlookup(" & sdate & ", h12:i18 , 2 , 0 )" ) _
& format( mid( scode , lchar , 9 ) , "-" & evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:i8,3,0)" ) ) end with
- Jika seandainya untuk table array dari fungsi vlookup tersebut akan diambil dari worksheet lain (misal dari Sheet 2) bagaimana penulisannya di kodenya?
Terima kasihSalam
Edo
On Sunday, November 29, 2015 8:35 PM, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
Wa'alaikumussalam wr wb
Hai Edo,
Prosedur TransformCode nya sudah dibuat ya. Sebaiknya diletakkan di general module agar bisa digunakan oleh prosedur lainnya, termasuk prosedur-prosedur events milik sheet manapun dan sebagainya.
Kemudian, cara memanggil prosedur nya diperbaiki. Kalau sempet, jalan-jalanlah ke blog milis tentang hal ini disini, yang ada bagian tentang cara memanggil prosedur lain dari sebuah prosedur.
Pada kasus Anda,
berikut ini yang Anda buat :
Cells(lRow, 3).Value = TransformCode.Cells(lRow, 3).Offset(0, -1).Resize(1, 2)
ini yang ada diimil saya tempo lalu :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
dan saya rasa jelas bahwa :
tapi, ganti bagian yang merah dengan
menunjukkan bahwa bagian yang berbunyi :
cells(lrow,4).value=cells(lrow,2).value*cells(lrow,3).value 'isi kolom D
if err.number=0 then 'kolom D terisi dengan baik ?
cells(lrow,2).value=cells(lrow,2).value-cells(lrow,4).value 'isi kolom B
endif 'selesai cek kolom D terisi dengan baik
harus diganti alias HAPUS bagian merah tersebut dan tulis baris kode berikut :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
Ada baiknya jika tidak langsung terfokus kepada baris-baris kode nya saja, tetapi runut dari awal imil sampai akhir imil disempatkan ditelaah dengan tartil.
Wassalamu'alaikum wr wb
Kid
2015-11-29 8:59 GMT+07:00 Edo Hanggoro Edo_Hanggoro@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:
Dear Mr. Kid,Assalamuallaikum Wr.Wb.
Terima kasih banyak atas bantuanya, tetapi saya masih mendapatkan kesulitan dalam melakukan proses pemanggilan transform code-nya dan selalu error.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, lRow As Long
If Not Intersect(Target, Range("C:C")) Is Nothing Then 'cek yang berubah beririsan dengan kolom C
Application.EnableEvents = False 'cegah Excel untuk responsif terhadap perilaku
On Error Resume Next 'lewati error yang terjadi
For Each rng In Intersect(Target, Range("C:C")) 'di setiap cells yang berubah di kolom C
lRow = rng.Row 'simpan baris
Cells(lRow, 3).Value = TransformCode.Cells(lRow, 3).Offset(0, -1).Resize(1, 2)
Next rng 'ke range yang berubah berikutnya
On Error GoTo 0 'kembalikan setting trap error ke default
Application.EnableEvents = True 'excel boleh responsif lagi
End If 'selesai cek
End Sub
Saya dapatkan error di bagian yang merah tersebut. Kira-kira kesalahannya ada dimana ya?
Mohon bantuannya sekali lagi.
Terima kasih
Edo
On Saturday, November 28, 2015 10:00 PM, "'Mr. Kid' mr.nmkid@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
Wa'alaikumussalam wr wb
Hai Edo,
*** sesuaikan dengan keadaan setempat jika berbeda dengan preview file lampiran milik Pak Edo
Pada sebuah general module, buat prosedur berikut : (misal diberi nama TransformCode)
public sub TransformCode( rngProc as range )
dim lChar as long, sDate as string, sCode as string
with rngproc 'kerja di range inputan rngProc
sdate=.cells(1).value2 'simpan nilai asli tanggal inputan ke sdate
scode=.cells(2).value2 'simpan nilai asli kode inputan ke scode
lchar=1 'karakter ke-1 -> mulainya proses loop
'dapatkan angka pertama (max di karakter ke-6 alias ada ruang max 5 karakter untuk header kode)
do until isnumeric( mid( scode , lchar , 1 ) ) or lchar>6 'cek dah nemu angka belum atau karakter diproses dah lebih dari 6
lchar=lchar+1 'pindah ke karakter berikutnya
loop 'ke proses loop dengan nilai karakter yang baru
'tulis ke cells ke-2 dari inputan (posisi cell kode)
'diawali petik satu ( ' )
'disambung hasil vlookup untuk ambil dari kolom H tabel yang atas (kode barang)
'disambung format tahun YY didahului delimiter dash ( - )
'disambung hasil vlookup untuk ambil dari kolom i tabel yang bawah (kode tanggal)
'disambung format kode digit dengan struktur format hasil vlookup untuk ambil dari kolom i tabel yang atas (kode digit)
'didahului delimiter dash ( - )
.cells(2).value= "'" _
& evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:h8,2,0)" ) _
& format( sdate , "-YY" ) _
& evaluate( "=vlookup(" & sdate & ", h12:i18 , 2 , 0 )" ) _
& format( mid( scode , lchar , 9 ) , "-" & evaluate( "=vlookup(""" & left(scode,lchar-1) & """,g3:i8,3,0)" ) ) end with
end sub
Kemudian, pada event change milik worksheet terkait, diisi baris kode seperti di-imil yang lalu, yang bunyinya begini :
dim rng as range,lRow as long
if not intersect( target,range("c:c") ) is nothing then 'cek yang berubah beririsan dengan kolom C
application.enableevents=false 'cegah Excel untuk responsif terhadap perilaku
on error resume next 'lewati error yang terjadi
for each rng in intersect( target,range("c:c") ) 'di setiap cells yang berubah di kolom C
lrow=rng.row 'simpan baris
cells(lrow,4).value=cells(lrow,2).value*cells(lrow,3).value 'isi kolom D
if err.number=0 then 'kolom D terisi dengan baik ?
cells(lrow,2).value=cells(lrow,2).value-cells(lrow,4).value 'isi kolom B
endif 'selesai cek kolom D terisi dengan baik
err.clear 'hapus error yang terjadi
next rng 'ke range yang berubah berikutnya
on error goto 0 'kembalikan setting trap error ke default
application.enableevents=true 'excel boleh responsif lagi
endif 'selesai cek
tapi, ganti bagian yang merah dengan baris kode memanggil prosedur TransformCode dengan menyertakan range yang diproses, yaitu range tanggal inputan dan kode inputan (1 baris x 2 kolom) seperti bergini :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
yang bahasa manusianya :
"bi pibi, suruh anak buahmu si transformcode kerja ye. bi, kamu bawa range yang bisa kamu ambil sendiri ngikutin arahanku ini,
1. kamu ke kolom C lalu jalan sampe baris yang kuproses ini (sambil nyerahin nota ke pibi yang isinya nomer baris Excel)
[ cells(lrow,3) ] (lrow adalah lembaran nota yang diserahkan)
2. kalo dah nemu, kamu pindah ke kolom sebelumnya (berarti geser ke kiri 1 kolom) tapi tetep dibaris itu ya
[ .offset( 0 , -1 ) ] (kalau kolom, ke kanan itu ples, dan ke kiri itu min)
3. terus, karungin tuh range, mulai tempatmu itu, sampai kamu dapetin 2 kolom. Tapi cuman sebaris tempatmu doink ya
[ .resize( 1 , 2 ) ]
nah.. kalo dah penuh tuh karung, segera ke tempatnya si transformcode. Dia bakal minta syarat tuh kalo disuruh.
Kalo dia minta syarat, kasihin tuh karung. Kamu harus nungguin dia sampai selesai ya. Kalo dah selesai, lapor kesini."
Catatan :
a. kode barang baru diset untuk maksimal diawali oleh 5 karakter bukan angka. Silakan dikembangkan dan disesuaikan sendiri.
b. pencegahan kesalahan input tanggal (tidak bertipe datetime dan tidak bisa dijadikan datetime yang benar) ditambahkan sendiri.
c. inputan tanggal (bertipe datetime) atau kode yang tidak ada dalam daftar, silakan dicegah atau diberi proses sendiri.
d. pengubahan letak daftar-daftar, penambahan atau pengurangan isi dalam daftar, dan kesesuaian tipe data dalam daftar, silakan dilakukan penyesuaian di dalam baris-baris kode di atas secara mandiri.
e. proses yang dipicu bukan oleh pengubahan nilai kolom C atau beserta kolom lainnya, silakan disesuaikan sendiri baris kodenya.
f. pengembangkan dan penyesuaian dengan permasalahan yang mirip tetapi tidak sama datanya atau strukturnya, silakan dilakukan secara setahap demi setahap secara mandiri.
Moga-moga gak error ya..
Kalo error, silakan dilacak dan dicari solusinya per penyebab error.
btw,
kenapa kasusnya selalu mengganti nilai inputan user ? kok gak ditulis di kolom lain saja ? bukankah malah akan ada informasi dan bukti bahwa user pernah mengisi kurang tepat (salah ketik atau seklian struktur isiannya keliru) kalau hasil diletakkan di kolom lain.
Dan juga, bisa tanpa VBA.
Moga-moga bukan karena pengen tampak keren dengan begitu di-input langsung ganti... Soale, dikuatirkan malah nanti jadi masalah...
Kalo jadi menimbulkan masalah, jadi gak keren lagi dah...
Moga-moga...
Wa'alaikumussalam wr wb
Kid
2015-11-28 14:49 GMT+07:00 Edo_Hanggoro@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>:
Assalamualaikum Wr.Wb.
Dear All,Saya sedang mencoba untuk membuat kodeVBA dan mohon bantuannya untuk dapat membuat kode VBA untuk formatcell secara otomatis dimana jika seandainya pada kolom Tanggal terdapat tanggal1 jan 2016 dan pada kolom Nomer Kode diketikan "SD1"
Dan untuk lebih jelasnya saya lampirkan filenya.
Terima Kasih sebelumnya.
Salam
Edo
#yiv9952062870 #yiv9952062870 -- #yiv9952062870ygrp-
Mon Nov 30, 2015 10:30 pm (PST) . Posted by:
"imam cahyo yuwono"
Mr. Toby
dimengerti Mr. Toby terima kasih Masukannya
On Wednesday, November 18, 2015 11:54 PM, "Toby kenzo tobykenzo@yahoo.co.id [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
| Dear Pak Imam,Untuk menggabungkan 2buah macro/VBA, anda harus mengetahu konsep masing2 dari formula yg ada, setelah itu anda juga harus mengerti method apa yg mesti di gunakan untuk masing2 formula, jgn lupa penggunaan deklarasi yg sesuai.
contoh, untuk menyalin data bisa menggunakan method copy paste, untuk menghapus data ganda(duplicate) bisa menggunakan method cells.removeDuplicates dan jika perlu untuk meng sort (Ascending/Descending) bisa menggunakan method Range(blablabla).sort Key1 blablabla... jika masih ragu untuk menggabungkan 2 formula yg ada, anda bisa manfaatkan commondbutton untuk setiap formula,jd bisa tahu mana formula yg benar mana yg belum benar...TerimaKasih,
Sent from Yahoo Mail on Android |
From: imam cahyo yuwono chyywn@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>;
To: <belajar-excel@yahoogroups.com>;
Subject: Re: [belajar-excel] rekap data, auto copi sort
Sent: Wed, Nov 18, 2015 1:36:37 AM
| Assalammualaikum Wr. Wb.
dear BeExceller,saya sudah mencoba beberapa contoh tentang macro ahkan mencoba menggabung dua contoh tentang menyalin dan menghapus data ganda belum di sort itu juga tapi yang berfungsi hanya sastu saja gimana ya cara nya
ini contoh yang saya gabungPrivate Sub CommandButton1_Click()Dim Z As LongDim iPaKolom As LongSet ipaone = Sheets("Sheet1")Set iPaFace = Sheets("Sheet2")Set UpaOne = ipaone.Range("A1:Z1000")iPaKolom = Range("B1000").End(xlUp).RowFor Z = iPaKolom To 1 Step -1IfApplication.WorksheetFunction.CountIf(Range("B1:B" Z),Range("B" Z).Text) > 1 ThenRange("B" Z).EntireRow.DeleteActiveSheet.Unprotectipaone.Range("A1:Z1").Copy iPaFace.Range("A1").PasteSpecial Paste:=xlPasteColumnWidthsUpaOne.SpecialCells _ (xlCellTypeVisible).Copy Destination:=iPaFace.Range("A1")End IfNext ZEnd Sub
sebaiknya bagai mana menggabung perintah perintah tersebutterima kasihWassalammualaikum Wr. Wb.
|
#yiv0790838972 #yiv0790838972 -- #yiv0790838972ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv0790838972 #yiv0790838972ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv0790838972 #yiv0790838972ygrp-mkp #yiv0790838972hd {color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;}#yiv0790838972 #yiv0790838972ygrp-mkp #yiv0790838972ads {margin-bottom:10px;}#yiv0790838972 #yiv0790838972ygrp-mkp .yiv0790838972ad {padding:0 0;}#yiv0790838972 #yiv0790838972ygrp-mkp .yiv0790838972ad p {margin:0;}#yiv0790838972 #yiv0790838972ygrp-mkp .yiv0790838972ad a {color:#0000ff;text-decoration:none;}#yiv0790838972 #yiv0790838972ygrp-sponsor #yiv0790838972ygrp-lc {font-family:Arial;}#yiv0790838972 #yiv0790838972ygrp-sponsor #yiv0790838972ygrp-lc #yiv0790838972hd {margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;}#yiv0790838972 #yiv0790838972ygrp-sponsor #yiv0790838972ygrp-lc .yiv0790838972ad {margin-bottom:10px;padding:0 0;}#yiv0790838972 #yiv0790838972actions {font-family:Verdana;font-size:11px;padding:10px 0;}#yiv0790838972 #yiv0790838972activity {background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv0790838972 #yiv0790838972activity span {font-weight:700;}#yiv0790838972 #yiv0790838972activity span:first-child {text-transform:uppercase;}#yiv0790838972 #yiv0790838972activity span a {color:#5085b6;text-decoration:none;}#yiv0790838972 #yiv0790838972activity span span {color:#ff7900;}#yiv0790838972 #yiv0790838972activity span .yiv0790838972underline {text-decoration:underline;}#yiv0790838972 .yiv0790838972attach {clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;}#yiv0790838972 .yiv0790838972attach div a {text-decoration:none;}#yiv0790838972 .yiv0790838972attach img {border:none;padding-right:5px;}#yiv0790838972 .yiv0790838972attach label {display:block;margin-bottom:5px;}#yiv0790838972 .yiv0790838972attach label a {text-decoration:none;}#yiv0790838972 blockquote {margin:0 0 0 4px;}#yiv0790838972 .yiv0790838972bold {font-family:Arial;font-size:13px;font-weight:700;}#yiv0790838972 .yiv0790838972bold a {text-decoration:none;}#yiv0790838972 dd.yiv0790838972last p a {font-family:Verdana;font-weight:700;}#yiv0790838972 dd.yiv0790838972last p span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv0790838972 dd.yiv0790838972last p span.yiv0790838972yshortcuts {margin-right:0;}#yiv0790838972 div.yiv0790838972attach-table div div a {text-decoration:none;}#yiv0790838972 div.yiv0790838972attach-table {width:400px;}#yiv0790838972 div.yiv0790838972file-title a, #yiv0790838972 div.yiv0790838972file-title a:active, #yiv0790838972 div.yiv0790838972file-title a:hover, #yiv0790838972 div.yiv0790838972file-title a:visited {text-decoration:none;}#yiv0790838972 div.yiv0790838972photo-title a, #yiv0790838972 div.yiv0790838972photo-title a:active, #yiv0790838972 div.yiv0790838972photo-title a:hover, #yiv0790838972 div.yiv0790838972photo-title a:visited {text-decoration:none;}#yiv0790838972 div#yiv0790838972ygrp-mlmsg #yiv0790838972ygrp-msg p a span.yiv0790838972yshortcuts {font-family:Verdana;font-size:10px;font-weight:normal;}#yiv0790838972 .yiv0790838972green {color:#628c2a;}#yiv0790838972 .yiv0790838972MsoNormal {margin:0 0 0 0;}#yiv0790838972 o {font-size:0;}#yiv0790838972 #yiv0790838972photos div {float:left;width:72px;}#yiv0790838972 #yiv0790838972photos div div {border:1px solid #666666;height:62px;overflow:hidden;width:62px;}#yiv0790838972 #yiv0790838972photos div label {color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv0790838972 #yiv0790838972reco-category {font-size:77%;}#yiv0790838972 #yiv0790838972reco-desc {font-size:77%;}#yiv0790838972 .yiv0790838972replbq {margin:4px;}#yiv0790838972 #yiv0790838972ygrp-actbar div a:first-child {margin-right:2px;padding-right:5px;}#yiv0790838972 #yiv0790838972ygrp-mlmsg {font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv0790838972 #yiv0790838972ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv0790838972 #yiv0790838972ygrp-mlmsg select, #yiv0790838972 input, #yiv0790838972 textarea {font:99% Arial, Helvetica, clean, sans-serif;}#yiv0790838972 #yiv0790838972ygrp-mlmsg pre, #yiv0790838972 code {font:115% monospace;}#yiv0790838972 #yiv0790838972ygrp-mlmsg * {line-height:1.22em;}#yiv0790838972 #yiv0790838972ygrp-mlmsg #yiv0790838972logo {padding-bottom:10px;}#yiv0790838972 #yiv0790838972ygrp-msg p a {font-family:Verdana;}#yiv0790838972 #yiv0790838972ygrp-msg p#yiv0790838972attach-count span {color:#1E66AE;font-weight:700;}#yiv0790838972 #yiv0790838972ygrp-reco #yiv0790838972reco-head {color:#ff7900;font-weight:700;}#yiv0790838972 #yiv0790838972ygrp-reco {margin-bottom:20px;padding:0px;}#yiv0790838972 #yiv0790838972ygrp-sponsor #yiv0790838972ov li a {font-size:130%;text-decoration:none;}#yiv0790838972 #yiv0790838972ygrp-sponsor #yiv0790838972ov li {font-size:77%;list-style-type:square;padding:6px 0;}#yiv0790838972 #yiv0790838972ygrp-sponsor #yiv0790838972ov ul {margin:0;padding:0 0 0 8px;}#yiv0790838972 #yiv0790838972ygrp-
dimengerti Mr. Toby terima kasih Masukannya
On Wednesday, November 18, 2015 11:54 PM, "Toby kenzo tobykenzo@yahoo.co.id [belajar-excel]" <belajar-excel@yahoogroups.com> wrote:
| Dear Pak Imam,Untuk menggabungkan 2buah macro/VBA, anda harus mengetahu konsep masing2 dari formula yg ada, setelah itu anda juga harus mengerti method apa yg mesti di gunakan untuk masing2 formula, jgn lupa penggunaan deklarasi yg sesuai.
contoh, untuk menyalin data bisa menggunakan method copy paste, untuk menghapus data ganda(duplicate) bisa menggunakan method cells.removeDuplicates dan jika perlu untuk meng sort (Ascending/Descending) bisa menggunakan method Range(blablabla).sort Key1 blablabla... jika masih ragu untuk menggabungkan 2 formula yg ada, anda bisa manfaatkan commondbutton untuk setiap formula,jd bisa tahu mana formula yg benar mana yg belum benar...TerimaKasih,
Sent from Yahoo Mail on Android |
From: imam cahyo yuwono chyywn@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>;
To: <belajar-excel@yahoogroups.com>;
Subject: Re: [belajar-excel] rekap data, auto copi sort
Sent: Wed, Nov 18, 2015 1:36:37 AM
| Assalammualaikum Wr. Wb.
dear BeExceller,saya sudah mencoba beberapa contoh tentang macro ahkan mencoba menggabung dua contoh tentang menyalin dan menghapus data ganda belum di sort itu juga tapi yang berfungsi hanya sastu saja gimana ya cara nya
ini contoh yang saya gabungPrivate Sub CommandButton1_
sebaiknya bagai mana menggabung perintah perintah tersebutterima kasihWassalammualai
|
#yiv0790838972 #yiv0790838972 -- #yiv0790838972ygrp-