Find The Latest Value From Ununique Key Record Using VBA



Pendahuluan. Bagi anda yang sudah terbiasa mengolah data menggunakan Microsoft Excel, tentu tidak asing lagi dengan fungsi “Lookup and reference” semisal VLOOKUP, HLOOKUP, LOOKUP, INDEX, MATCH, INDIRECT, OFFSET atau kombinasi dari fungsi-fungsi tersebut, termasuk kelemahannya. Kelemahannya? Maksudnya?, Ya, ternyata fungsi-fungsi embedded Excel tersebut masih menyisakan “kelemahan”. Diantaranya; ketika anda mencari suatu value yang melekat pada sebuah record kunci (Primary Key) yang tidak uniq misalnya (i.e karena terdapat lebih dari satu Primary Key yang similar atau sama di dalam database, red), maka hasil akhir pencarian akan kembali kepada value yang melekat pada record kunci yang pertama kali ditemukan, bukan pada record kunci yang terakhir atau yang paling up-to-date. Bagaimana jika value yang anda cari itu justru terletak pada record kunci (identik) yang paling akhir?, That’s the problem of those Function. Contoh case realnya adalah sbb;



Dari tabel diatas kita ingin mengetahui; berapa “Jumlah total Aktivasi perdana yang tercatat terakhir dalam database”. Nah untuk mencarinya, kita ambil salah satu syntax dari Lookup Function diatas, taruhlah Index dan Match. Maka formulasinya adalah sbb;

=INDEX($B$2:$B$13,MATCH(“Activation”,$A$2:$A13$,0),1)

Berapa hasilnya? 260.500. Padahal jumlah aktivasi perdana terakhir yang seharusnya terdisplay di ActiveCell adalah 161.611, bukan 260.500. Begitu pula dengan function lainnya seperti VLOOKUP(“Activation”,$A$2:$B$13,2;FALSE) atau =INDIRECT(“B”&MATCH(“Activation”;$A$3:$A$13;0)), hasilnya tetap  akan sama.

Lantas bagaimana solusinya?. (Mungkin) ada banyak cara yang bisa kita lakukan, salah satunya adalah dengan memaksimalkan fungsi Visual Basic Application (VBA) Excel atau Macros seperti yang akan saya bahas berikut ini. (Wallaahu a’lam, jika ada rekan-rekan blogger yang mau berbagi trik lain yang lebih efektif, silahkan bisa disharing di sini, red). Terlampir adalah syntaxnya;


Private Sub FindLastRecord()
With Application
    .ScreenUpdating = False
End With

Set ws = Sheets("Sheet1")
Set wa = Sheets("Sheet2")
   
    With wa
    i = .Range("B2").Value
    End With
   
    With ws
        On Error Resume Next
        Set c = .Cells.Find(What:=i, LookIn:=xlValues, lookat:=xlPart, _
        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        On Error GoTo 0
       
        If Not c Is Nothing Then
            FirstAddress = c.Address
            Do
                rg = c.Offset(0, 1).Address
                Set c = .Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)).FindNext(c)
            Loop While Not (c Is Nothing) And (c.Address <> FirstAddress)
        End If
    End With
  
   ws.Range(rg).Copy _
   Destination:=wa.Range("C2")
  
    'Useful for Releasing Memory
    Set ws = Nothing
    Set wa = Nothing
   
With Application
    .ScreenUpdating = True
End With
End Sub

Atau bisa juga dengan menggunakan syntax yang sama tapi beberapa bagian syntaxnya direplace, yakni;

Syntax sebelumnya;

Do
   rg = c.Offset(0, 1).Address
   Set c = .Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)).FindNext(c)
Loop While Not (c Is Nothing) And (c.Address <> FirstAddress)

Dimodifikasi dengan;

For n = 1 To WorksheetFunction.CountIf(.Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)), i)
    rg = c.Offset(0, 1).Address
    Set c = .Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)).FindNext(c)
Next n

Hasilnya tetap akan sama. Sebelum kita masuk pada step by step practice-nya, ijinkan saya menjelaskan terlebih dahulu makna dari syntax di atas (sebatas apa yang saya tahu, red).


Penjelasan Syntax

Pertama;

Set ws = Sheets("Sheet1")
Set wa = Sheets("Sheet2")

Untuk mempersingkat karakter syntax, maka bagian syntax yang bisa kita definisikan, kita definisikan. Contoh; ws adalah nama lain dari Sheet1 yang (di dalamnya) terdapat table Data Performansi SCN (seperti yang ditunjukkan pada gambar diatas, red), sedangkan wa adalah sheet2 yang digunakan untuk menampilkan Primary Key (i = .Range("B2").Value) sekaligus hasil pencarian (ws.Range(rg).Copy Destination:=wa.Range("C2"))

Kedua;

c = .Cells.Find(What:=i, LookIn:=xlValues, lookat:=xlPart, _
        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

Syntax diatas merupakan Find Method dalam VBA. Formulasinya sbb;

expression .Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
expression A variable that represents a Range object.

Parameter “What:=” itu wajib diisi (required). Apa yang harus diisikan?, “The data to search for. Can be a string or any Microsoft Excel data type” yakni data yang kita cari, dalam hal ini adalah Primary Key (dalam contoh di atas misalnya Activation). Parameter “LookIn:=” itu bersifat optional, boleh ada dan boleh tidak.  Kalau ada, maka bisa diisi dengan xlValues atau xlFormulas, tergantung referensinya berwujud apa, apakah value (angka, string, char dll) ataukah formulasi. Parameter “lookat:=” juga bersifat Optional, bisa diisi dengan xlPart atau xlWhole. Dari referensi yang saya baca, xlPart dan xlWhole ini sama dengan 0 dan 1 pada fungsi MATCH atau TRUE dan FALSE pada fungsi VLOOKUP. Pada fungsi MATCH misalnya, jika kita ingin mengetahui ada tidaknya data dalam Table yang valuenya sama persis (exact) dengan Primary Key-nya, maka match_type-nya harus diset 0, jika tidak (harus sama persis alias mendekati, red), maka cukup kita set 1. Begitupula untuk case lookat:= ini, jika kita ingin mengetahui ada tidaknya data dalam Table/ database yang valuenya sama persis (exact) dengan Primary Key, maka match_type-nya harus diset xlWhole, jika tidak maka cukup kita set xlPart. Sebagaimana paramater sebelumnya yang bersifat optional, “SearchOrder:=” juga bersifat demikian. Parameter ini bisa diisi dengan xlByRows atau xlByColumns, keduanya menunjukkan “whether to search by rows or search by columns. Default value is xlByRows”. Kurang lebih sama dengan fungsi VLOOKUP dan HLOOKUP, dimana VLOOKUP itu by Rows sedangkan HLOOKUP by Columns. Parameter “SearchDirection:=” menujukkan metode pencarian data apakah ke atas (xlPrevious) atau ke bawah (xlNext) dan sifatnya Optional. Adapun Parameter “MatchCase:=” dan “SearchFormat:=” itu terkait apakah value yang dicari itu Case-Sensitive dan Specified Formatting atau tidak, jika iya maka diisi True dan jika tidak maka cukup diisi False. Pertanyaannya, jika syntax tersebut dirunning, apa hasil yang akan dimunculkan oleh c?. Jika data yang dicari sesuai dengan requirement i.e sama persis dengan Primary Key (i), maka hasilnya adalah Primary Key itu sendiri (dalam contoh di atas adalah Activation, red).

Ketiga;

If Not c Is Nothing Then
    FirstAddress = c.Address
    Do
      rg = c.Offset(0, 1).Address
      Set c = .Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)).FindNext(c)
    Loop While Not (c Is Nothing) And (c.Address <> FirstAddress)
End If

Maksudnya, jika c itu available dalam database, maka alamat cell-nya (FirstAddress) adalah c.Address. Dalam contoh case ini misalnya, FirstAddress = $A$4 (Silahkan lihat kembali gambar di atas. Activation yang pertama kali terdeteksi pada database adalah cell $A$4, red). Adapun syntax berikutnya berfungsi untuk mencari value yang melekat pada record kunci (Primary Key) terakhir yang up-to-date. Ketika proses running (program) baru sampai pada syntax: FirstAddress = c.Address, maka status rg is Empty atau rg = “”, baru setelah melewati syntax rg = c.Offset(0, 1).Address, rg akan menghasilkan address $B$4 (masih berupa address, belum value, red). Selanjutnya untuk mencari tahu apakah masih ada Primary Key (Activation) pada record setelahnya, digunakan syntax expression .FindNext(After), expression diisi dengan Range i.e .Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)) dan After diisi dengan c yang merepresentasikan cell yang mengandung Primary Key “Activation” setelah FirstAddress. Selama c masih available di record-record setelahnya, maka proses looping akan terus dilakukan sebanyak WorksheetFunction.CountIf(.Range(FirstAddress, .Range("A" & Rows.Count).End(xlUp)), i) dan berhenti setelah c tidak lagi available (yakni di $A$10).

Keempat;

ws.Range(rg).Copy _
   Destination:=wa.Range("C2")

Sebagaimana yang sudah dijelaskan pada keterangan pertama sebelumnya, syntax ws.Range(rg).Copy Destination:=wa.Range("C2") berfungsi untuk mengcopy hasil pencarian value ($B$4) pada sheet ws ke cell C2 pada sheet wa.


Step by Step Implementasi Program

1). Buat table yang sama seperti yang dicontohkan gambar di atas (Pada Sheet1)

2). Copy syntax FindLastRecord secara lengkap, masuk ke Developer → Code → Visual Basic. Pada jendela Microsoft Visual Basic, klik Insert → Module dan pastekan syntax tersebut ke dalam Windows Code sehingga akan tampak seperti disamping;  

3). Masukkan record kunci (Primary Key) pada cell B2 di Sheet2 yakni “Activation” atau “Distribution”, atau whatever it is selama key tersebut tersedia di database.

4). Klik tombol Run pada jendela Microsoft Visual Basic dan lihat apa yang terjadi.


Penutup

Sesuatu yang terlihat biasa belum tentu (hakikatnya) juga biasa-biasa saja, bisa jadi ia menyimpan potensi yang luar biasa hanya saja kita tidak atau belum mengetahuinya. Demikian pula dengan Excel, menurut sebagian orang yang belum “mengetahui” dan belum sempat mengeksplor Tools ini lebih dalam, tampilan Excel sepintas terlihat biasa saja, fungsinya juga terlihat biasa-biasa saja (Kali, bagi, tambah, kurang). Namun bagi mereka yang telaten mau mengeksplorasi, try and error, mau belajar meskipun harus berproses (seperti para MVP Excel itu, red), Tools ini akan terasa sangat powerful dan membantu (dengan segala kelebihan dan kekurangannya tentunya). Let’s explore this tool optimally...
[Baca Selengkapnya...]


Create Rating Product Using Excel Formula And VBA (Vol. 2)



Let’s continue. Sekedar mereview saja; poin-poin yang sudah kita kupas pada pembahasan 1 sebelumnya adalah: (1). Memahami Database, (2). Menset-up table Item dan Rating. Dan berikut adalah poin-poin selanjutnya:


3). Mencari tahu cell mana yang diseleksi

OK (but not FOKE.. J), saatnya kita ber-VBA ria. Sebelum masuk ke pengcodingan, penulis asli artikel ini mengingatkan, “Take a sip of that coffee. It is getting cold” katanya,.. hehehe,..

Mungkin kita bingung dengan judul poin ke 3, apa sih maksudnya?.  Penulis menuturkan, “When a user selects any cell inside rngReviews, we need to find out which product it is so that we can load corresponding details.” Ya,.. ketika user menselect cell manapun dalam range “rngReviews” (i.e pada range “C5:E5”), kita perlu mengetahui product yang manakah itu sehingga kita bisa meloading data yang berkesesuaian dengan product yang dimaksud.

Berikut adalah penjelasan logic untuk syntax macro yang kita buat (gambar codingnya bisa dilihat pada link berikut)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not (Application.Intersect(ActiveCell, Range("rngReviews").Cells) _
    Is Nothing) Then _
    Call UpdateAfterAction
End Sub

Syntax ini dibuat di Sheet1 (Rating Summary) menggunakan Worksheet Event.

Adapun procedure UpdateAfterAction() dibuat pada Module1 dengan detail syntax sebagai berikut;

Sub UpdateAfterAction()
    Dim topRow As Integer
   
    topRow = Range("rngReviews").Cells(1, 1).Row
    [valSelItem] = ActiveCell.Row() - topRow + 1
End Sub

(a). On Worksheet_SelectionChange, check if the ActiveCell overlaps with rngReviews
Maksudnya; Pada Worksheet_SelectionChange, check apakah terjadi overlaps atau intersect (perpotongan) antara ActiveCell (i.e Cell yang kita pilih, red) dengan rngReviews?.

(b). Jika iya, maka system akan otomatis memanggil prosedur UpdateAfterAction (pemahaman terbaliknya adalah; jika ActiveCell berada di luar rngReviews, maka procedure UpdateAfterAction tidak akan dipanggil oleh system, red). Syntax ini berfungsi mencari relative row number pada ActiveCell (i.e posisi dari selected cell pada range “rngReviews”) subject to row teratas pada rngReviews, kemudian system akan memasukkan value tersebut ke cell E28 secara otomatis. Bingung?. Ok, akan saya jelaskan lebih detail –cmiiw-. Coba anda klik cell E28. Apakah ada formulasi disana?, dari manakah asal angka (1, 2, 3.. 9) tersebut muncul?. Semuanya terjawab oleh syntax;

topRow = Range("rngReviews").Cells(2, 1).Row
[valSelItem] = ActiveCell.Row() - topRow + 1

Atau syntax hasil modifikasi saya sbb;

Set rngReviews = Sheets("Rating Summary").Range("C5:E5")
   
        topRow = rngReviews.Cells(1, 1).Row
        [valSelItem] = ActiveCell.Row() - topRow + 1

topRow akan mendefinisikan posisi baris teratas dari Range("rngReviews"). Posisi baris yang dimaksud adalah 5. Sedangkan nilai dari [valSelItem] bersifat dependen, tergantung di Row berapa ActiveCell tersebut berada. Sebagai contoh; ActiveCell kita set di posisi D11, maka ActiveCell.Row() menunjukkan row 11. Dengan demikian [valSelItem] = ActiveCell.Row() - topRow + 1 atau [valSelItem] = 11-5+1 (i.e 7). Angka 7 inilah yang akan otomatis muncul di cell E28.


4). Menggunakan output Macro VBA untuk menjalankan program

Kita memerlukan value pada cell E28 untuk 2 hal;


(a). Menandai (highlight) row yang berkesesuaian di dalam rngReviews dengan warna menggunakan [Conditional Formatting]

(b). Mencari product yang berkesesuaian dengan menggunakan INDEX formula

Sebagaimana fungsi VLOOKUP, INDEX formula berfungsi mencari record pada suatu database. Syntaxnya adalah sbb; =INDEX(array, row_num, [column_num])
Untuk case di atas, Array diisi dengan lstItems yang sudah kita definisikan sebelumnya. Adapun row_num diisi dengan valSelItem yang juga sudah kita definisikan sebelumnya. Silahkan klik link [INDEX] untuk memahami lebih dalam mengenai INDEX formula.


5). Menghitung Rating Product

Agar info detail dari sebuah product muncul, kita harus menghitung jumlah rating dari item product yang berkesesuaian (i.e berapa banyak 1 star, 2 star… 5 star reviews yang didapat oleh product tersebut). Formula yang digunakan adalah COUNTIFS. Apa bedanya dengan COUNTIF?. COUNTIFS (dengan “S”) diset lebih powerfull oleh Excel karena mampu menseleksi range data dengan kriteria lebih banyak, tidak seperti COUNTIF yang hanya bisa menampung satu kriteria saja. Ilustrasinya sbb:

COUNTIF formula >> misalkan: Inputan range-nya adalah “6 calon pemimpin yang maju ke Pilkada tahun ini”, criteria pilihannya adalah “jujur”, dan ini akan menjadi satu-satunya kriteria yang bisa dimasukkan dalam formulasi. Jika anda ingin memilih kriteria diluar “jujur” (amanah misalnya, red), maka kriteria jujur tidak bisa dipilih (karena di ganti dengan kriteria amanah, red). Selanjutnya ketika COUNTIF ini dirunning, maka system akan menghitung pemimpin yang memenuhi satu-satunya kriteria tersebut i.e jujur. Jika ada 3 pemimpin yang ternyata berkesesuaian dengan kriteria diatas, maka ketiga-tiganya akan dihitung sebagai pemimpin (i.e hasilnya 3, red).

COUNTIFS formula >> misalkan: Inputan range-nya adalah “6 calon pemimpin yang maju ke Pilkada tahun ini”, criteria pilihannya adalah “jujur”, “shalih”, “amanah”. Ketika COUNTIFS ini dirunning, maka system akan menghitung jumlah pemimpin yang memenuhi tiga kriteria yang ditetapkan tersebut sekaligus (note: jika merujuk kepada teori dasar teknik digital atau bahasa pemrograman, logika yang digunakan adalah AND, bukan OR, red) i.e jujur, shalih dan amanah. Jika tidak ada satu pun calon pemimpin yang memenuhi seluruh kriteria, maka hasilnya akan 0.

Untuk case ini, penulis mengatakan, “I am leaving the formulas for this to your imagination.” Atau dengan kata lain, sok lah mangga diulik sendiri formulasinya [use COUNTIFS formula] sampe anda bener-bener paham.. J. Jika sudah, pastikan bahwa hasil akhirnya akan menjadi seperti ini [note: Khusus untuk angka-angka pada column Distribution; agar tampak seperti pada gambar di bawah i.e ada tanda kurungnya, red, maka silahkan blok D30:34, klik kanan Format Cells > Number > Custom > (0)]



6). Membuat Chart untuk menampilkan Rating

Ini adalah step terakhir yang harus kita lakukan sebelum kita menata seluruh tampilan tabel/ chart dengan rapi. Ikuti lima langkah berikut;

(1). Blok column Distribution of Ratings, Distribution dan Total kemudian klik Insert > Charts pilih charts dengan tipe Column > All Chart Types…> Bar > Clustered Bar. Di Workbook yang anda download, data tersebut bisa anda dapatkan pada range C29:E34 di dalam sheet “Rating Summary”
(2). Balik urutan kategorinya, yang berada di posisi atas menjadi di bawah dan yang di bawah menjadi di atas. Caranya; klik vertical axis-nya dan tekan CTRL+1 kemudian centang “Categories in reverse order”. Jangan lupa untuk mendelete Legend-nya.
(3). Kik kanan pada area chart Format Data Series…> Series Options. Pada Series Overlap, [klik image] geser kursor ke kanan hingga Overlapped 100%. Sedangkan pada Gap Width, set angka di kisaran 50%. Jangan lupa, sesuaikan urutan series melalui source chart data option (i.e klik kanan pada chart series, klik Select Data, pilih distribution kemudian klik tombol movedown) -> [klik image] 
(4). Hapus Grid Lines, Axis Line, dan Horizontal Axis. Silahkan format warna chart sesuai dengan tampilan gambar di bawah (i.e pada langkah ke 4)
(5). Kecilkan chart, tambahkan judul, tambahkan label dan hilangkan bordernya. Agar judul chart bisa berubah secara dinamis, maka klik title chart, pada formula bar, ketik formula berikut ='Rating Summary'!$E$35. Buatlah hal yang sama untuk labelnya.






7). Mengatur tampilan akhir “Product Review”

Inilah saatnya untuk mengatur tampilan akhir dan melakukan testing. Geser chart yang sudah kita buat sebelumnya ke samping Rating Table. Lakukan test dengan mengklik cell manapun di dalam Rating Table (rngReviews). Selesai!

Sekarang anda bisa menghabiskan teh atau kopi anda yang sudah mulai dingin itu, jangan lupa simpan cemilan anda (untuk mempelajari trik-trik yang lainnya, red), dan tunjukkan pada partner kerja anda hasil akhir dari “ulikan” anda tersebut. Well done!.. J
[Baca Selengkapnya...]


Create Rating Product Using Excel Formula And VBA (Vol. 1)




Membuat dan mengupdate dashboard offline merupakan salah satu (indirect) job saya. Seperti biasa, software yang paling mudah, paling cocok dan paling familiar untuk membuat report dengan scheme seperti itu (i.e dashboard) adalah Microsoft Excel. Anyway busway, bila anda kerap berselancar ke situs-situs online shop seperti Amazon.com, CNET.com dll, pasti anda akan menemukan symbol bintang (umumnya berderet lima, red) atau symbol lain yang sejenis (seperti yang ditunjukkan gambar di bawah, red) di bagian kanan, kiri, atas atau bawah sebuah product yang dipromosikan. Symbol seperti itu biasa disebut dengan istilah “Rate” atau Rating. Rating pada umumnya digunakan oleh Online shop sebagai indikator kualitas sebuah product yang dijual atau bisa juga menunjukkan seberapa tinggi respon pasar terhadap produk yang ditawarkan. Mereka menamakannya dengan “User Review” atau “Customer Review”. Terinspirasi dengan apa yang sudah dibuat oleh Online shop tersebut, saya berencana memasukkan display rating yang serupa pada report dashboard perseroan agar terlihat lebih atraktif.




Anyway, bagaimana cara membuatnya?

Ternyata sederhana. Berikut akan saya terjemahkan (dengan tambahan seperlunya dari penerjemah, red) langkah-langkah membuat “Product Review” di Microsoft Excel dari tulisan original seorang Master Excel dan VBA sekaligus MVP (Microsoft most Valuable Professional), Mr. Purnachandra R Duggirala. Siapkan segelas teh atau kopi hangat, plus cemilan (sehat) untuk menemani aktivitas anda kali ini, since it’s going to spend much time anyway,.. J. Let’s kick off!...

Saya sarankan anda masuk terlebih dahulu ke Chandoo dot Com, kemudian geser scroll bar anda ke bawah, cari judul “Download Example Workbook – On-demand Details in Excel” dan klik link download di bawahnya untuk mendapatkan sample chartnya. Belajar dengan menggunakan contoh dan mempraktekannya secara langsung biasanya lebih mudah ditangkap dan dicerna. Sudah?, Let’s go on…

Perhatikan unlive demo di bawah ini (sekedar info bahwa contoh rating di bawah merupakan replica dari review sebuah product di Amazon.com, red). Ketika anda mengklik di Row (baris) manapun yang anda suka di dalam cell Item + Rating Table di bawah, detail review dari Item yang berkesesuaian (dengan pilihan anda tersebut) akan tampil pada chart di sampingnya.


Nah, apa saja yang perlu dilakukan?

1). Memahami Database

Database ini merupakan source (sumber) dari Chart yang akan kita buat. “It has 3 columns” antara lain Item, Reviewer ID dan Rating (lihat sheet “Item ratings”). Masing-masing Item memiliki rating (antara 1 sampai 5) yang diberikan oleh beberapa reviewer yang berbeda-beda. Nah yang akan kita lakukan adalah mensummarykan seluruh rating-rating tersebut (ke dalam sebuah table dan grafik, red). Seluruh record data berada pada Range Table1 (i.e B2:B102). Kita akan menggunakan structured reference [What are they?] dalam formula agar data dapat tetap terbaca.


(2). Menset-up table Item dan Rating

Langkah pertama yang perlu kita lakukan adalah menampilkan table dengan seluruh Item productnya dan rata-rata rating setiap Item product yang berkesesuaian (note: Pada “Table1” hanya terdapat 9 Products dari 102 record nama yang sebagiannya berulang). Kemudian akan kita tambahkan “circle indicators” atau indicator rating yang berbentuk bulatan untuk memvisualisasikan average rating. Perhatikan gambar di bawah dan pahami penjelasannya (i.e formulasi yang digunakannya).



Ada 3 formulasi yang digunakan dalam hal ini.

(a). AVERAGEIF() formula
Formulasi ini sangat sederhana. Perhatikan, product Item berada pada range C5:C13 (i.e di sheet “Rating Summary”). Klik Cell D5 dan masukkan formulasi berikut =AVERAGEIF(Table1[Item],C5,Table1[Rating]) untuk mengetahui berapa nilai rata-rata rating Item C5 (i.e Instant Road). Kemudian “Fill the rest by dragging the formula down” i.e silahkan anda drag kursor dari D5 ke bawah untuk mengisi Row (baris) yang tersisa.

(b). Conditional Formatting
Setiap kali anda mengklik data pada column Items atau Rating di baris manapun yang anda suka di dalam range Item + Rating Table, maka warna dari Row tersebut akan ikut berubah secara otomatis. Di sinilah fungsi dari Conditional Formatting. Caranya; klik menu Home > Conditional Formatting > Manage Rule. Disana sudah ada sample formulanya untuk masing-masing cell. Silahkan anda pelajari.

(c). REPT formula
Formulasi ini digunakan untuk membuat repetisi (pengulangan) sebuah value (dalam case ini adalah symbol). Jika average rating dari suatu item product nilainya 3 misalnya, maka pada baris yang sama dalam column Rating akan muncul 3 bulatan penuh. Artinya formulasi akan melakukan repetisi symbol full circles sebanyak 3 kali secara otomatis (note: sebenarnya penulis i.e Duggirala “Chandoo” bermaksud menggunakan symbol bintang, namun ternyata tidak tersedia di defaut fonts Excel sehingga dia memilih circle symbol sebagai penggantinya. Simak penuturannya berikut, “There are no star symbols in the default fonts. But we have circles – a full circle, an empty circle and a donut to indicate half-circle. These symbols are available in Wingdings 2 font.”


Jika average ratingnya adalah angka bulat (1, 2, 3, 4 atau 5 misalnya), maka rating yang terprint menjadi 3 full circle dan 2 empty circle. Bagaimana jika average ratingnya decimal e.g 2.83?. Maka rating yang terprint adalah 2 full circles, one donut and 2 empty circles. Silahkan ikuti petunjuk berikut [inserting symbols in to Excel workbooks] untuk menampilkan circle symbol pada worksheet/ workbook anda.


Formulasi Repetisinya sendiri juga tidak kalah sederhana. Karena average ratingnya berada pada range D5:D13, maka formulasinya menjadi sebagai berikut;

=REPT(fullCircleSymbol,INT(D5)) & REPT(donutSymbol,(INT(D5)<>D5)+0) & REPT(emptyCircleSymbol,INT(5-D5))

Anda bisa memulai dari cell E5 dengan mengetikkan formulasi berikut ini;

=REPT($D$37,INT(D5))&REPT($E$37,(INT(D5)<>D5)+0)&REPT($F$37,INT(5-D5))

Block range C5:E15, kemudian kasih nama - rngReviews. Penamaan range ini (i.e di menu Formulas > Name Manager, red) berguna bagi user pada saat melakukan pengcodingan procedure menggunakan VBA. Selain melalui menu Name Manager, kita juga bisa membuat penamaan range di window VBA dengan mengetikkan syntax berikut;

Set rngReviews = Sheets(“Rating Summary”).range(“C5:E15”)

Tafadhal, terserah anda mau menggunakan metode yang mana.. J. O ya, jangan lupa beri nama range C5:C13 dengan lstItems dan cell E28 dengan valSelItem. Apa fungsinya?, akan terjawab pada penjelasan selanjutnya.



(Bersambung ke pembahasan 2)
[Baca Selengkapnya...]


 

Entri Populer

Recent Comments

Blog Statistic

Return to top of page Copyright © 2007 | Old Nakula