Menggunakan SQL dalam Macro untuk memfilter data

24 views
Skip to first unread message

hendrik karnadi

unread,
Feb 14, 2023, 12:15:55 AM2/14/23
to Milis Belajar-Excel
Selamat siang teman2 Be_Excel,

Sekedar mengisi waktu luang saya mencoba menggunakan SQL dalam Macro untuk memfilter data.

Datanya adalah seperti ini:
Inline image

Macronya adalah sepert ini :
Inline image

Hasilnya seperi ini (tanpa Judul):
Inline image

Pertanyaan saya:
1. Bagaimana penulisan CoyFromRecordset nya agar judul ikut tercopy (Sheets("HASIL").Range("A2").CopyFromRecordset mrs)

2. Bagaimana penulisan SQL ini SELECT * From [DATA$] WHERE Nama_barang LIKE '%HVS%' (Di Sheet SQL Range("A1") agar HVS bisa ditulis dengan huruf kecil ?

NB : warna merah adalah SQL yang tertulis dalam Macro ini (yang masih perlu perbaikan).

Terima kasih.


Salam,
HK

 


Database Penjualan_Macro SQL - R.xlsm

Mr. Kid

unread,
Feb 14, 2023, 4:58:02 AM2/14/23
to Milis Belajar-Excel
Untuk yang nomor 1 :
CopyFromRecordset tidak memiliki fitur atau properties untuk mempaste headers. Jadi proses penulisan headers di tabel hasil harus dilakukan sendiri.
Jika query-nya selalu Select * from satuTabelSaja  dan selalu berurutan header-nya seperti tabel sumber data, maka copy saja header dari tabel sumber data ke tabel hasil.
Jika kolom-kolom ditentukan urutannya atau tidak semua kolom atau ada yang diubah menjadi nama yang berbeda dibanding tabel sumber data, maka perlu loop daftar fields di dalam recordset, dan tulis ke lokasi header di tabel hasil.
dim iField as long
for iField=0 to mrs.Fields.Count-1      'misal nama variabel recordset-nya adalah mrs
      lokasiPenulisanCellsKe-iField = mrs.fields(iField).name
next iField
'bisa diletakkan tepat sebelum atau tepat sesudah baris CopyFromRecordset

Untuk yang nomor 2 :
Jika maksudnya adalah like '%HVS%' menghasilkan jumlah baris yang berbeda dengan like '%hvs%' artinya driver (yaitu ODBC) memprosesnya dengan case sensitive.
Hal ini bisa disesuaikan dibagian Where dengan mengubah jadi huruf kecil semua datanya dan kriterianya
Where LCase(nama_barang) like '%hvs%'

atau dengan meng-capital-kan semuanya :
Where UCase(nama_barang) like '%HVS%'


















--
You received this message because you are subscribed to the Google Groups "milis Belajar-Excel" group.
To unsubscribe from this group and stop receiving emails from it, send an email to milis-belajar-e...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/milis-belajar-excel/2139909759.1354792.1676351742035%40mail.yahoo.com.

hendrik karnadi

unread,
Feb 14, 2023, 11:03:14 AM2/14/23
to Milis Belajar-Excel
Terima kasih Mr. Kid atas jawabannya.
Bsk akan saya coba dan laporkan hasilnya.

Salam,
HK



hendrik karnadi

unread,
Feb 14, 2023, 11:51:36 PM2/14/23
to Milis Belajar-Excel
Terima kasih Mr. Kid.

Sudah berhasil, hanya looping judul kolomnya saya tulis satu persatu, sepeti ini :
'For iField = 0 To mrs.Fields.Count - 1  'misal nama variabel recordset-nya adalah mrs
      'lokasiPenulisanCellsKe -iField = mrs.Fields(iField).Name
      Range("A1") = mrs.Fields(iField).Name      'untuk Detail
      Range("B1") = mrs.Fields(iField + 1).Name
      Range("C1") = mrs.Fields(iField + 2).Name
      Range("D1") = mrs.Fields(iField + 3).Name
      Range("E1") = mrs.Fields(iField + 4).Name
      Range("F1") = mrs.Fields(iField + 5).Name
'Next iField

Judulnya sdh keluar dan hasilnya sepeti ini,
Inline image

Sekali lagi terima kasih Mr. Kid.

Salam,
HK


Mr. Kid

unread,
Feb 15, 2023, 12:13:54 AM2/15/23
to Milis Belajar-Excel
Kalau ditulis satu persatu seperti itu, jadi beresiko ketika query di A1 sheet SQL adalah untuk mengambil 2 kolom saja, misalnya Salesman dan Total saja.


hendrik karnadi

unread,
Feb 15, 2023, 2:04:25 AM2/15/23
to Milis Belajar-Excel
Betul Mr. Kid.

Sudah saya ganti dengan looping Column,
For iField = 0 To mrs.Fields.Count - 1  'misal nama variabel recordset-nya adalah mrs
      'lokasiPenulisanCellsKe -iField = mrs.Fields(iField).Name
      'Range("A1") = mrs.Fields(iField).Name      'untuk Detail
      'Range("B1") = mrs.Fields(iField + 1).Name
      'Range("C1") = mrs.Fields(iField + 2).Name
      'Range("D1") = mrs.Fields(iField + 3).Name
      'Range("E1") = mrs.Fields(iField + 4).Name
      'Range("F1") = mrs.Fields(iField + 5).Name
      Cells(1, 1 + iField).Value = mrs.Fields(iField).Name
Next iField

Kalau Query di A1 ada 3 kolom (Salesman, Nama Barang dan Total),
Code Loopingnya jadi seperti ini
For iField = 1 To 3
      'Range("A1") = mrs.Fields(iField).Name     'untuk GROUP (kolom tertentu)
      'Range("B1") = mrs.Fields(iField + 1).Name
      'Range("C1") = mrs.Fields(iField + 2).Name
      Cells(1, iField).Value = mrs.Fields(iField - 1).Name
Next iField

Terima kasih.

Salam,
HK


Reply all
Reply to author
Forward
0 new messages