昨天順手解了一題用Excel vba代替格式化條件,今天把它做完整做出來,就被選為「最佳解答」。第一次在iT邦回答就被選為最佳解答,我會記住2018.11.21這一天。
項目 | 時間 |
---|---|
Excel vba 最佳回答 | 3 hr 11 min |
學習Git Issue,JavaScript | 1 hr 11 min |
鐵人賽發文 | 1 hr 04 min |
有圖有證據
這五個需求程式運作相同,做好第一支後複製貼上五次。
然後每隻程式依照需求,慢慢找參數手動變更。
檢討:後來想到可以在參數位置改成變數
將整段程式做整合,程式碼行數減少60%,後續要維護也方便。
將參數設為變數,並且將程式分為宣告、主程式二段。
使用者只要更改宣告裡變數陣列,不需要變動主程式。
因為色碼不敷使用,需要做變動。
為了方便使用者,以變更最少程式碼為主。
希望後面接手維護的人不會討厭我XD。
這是第二版
'開頭宣告
'ifst(需求1,2判斷字),colind(填滿顏色),rerg(需求3~5選取範圍)
Dim ifst, colind, rerg As Variant
Dim rei, sti As Integer
Dim cell, cell2 As Range
ifst = Array("目標", "達成")
colind = Array(4, 7, 8, 9, 10) '需求1~5依序填入色碼
rerg = Array("D3", "D20", "C3", "C20", "B3", "B20")
'lacol 為表格最尾列,larow 為表格最尾攔(第二列尾攔往左第一個字)
Dim lacol, larow As Integer
Range("B3").End(xlDown).Select
lacol = Selection.Row
Cells(2, 1000).End(xlToLeft).Select '日後欄出錯請改此參數
larow = Selection.Column
'主程式
'整欄變色
For sti = 0 To 1
For Each cell In Range("B2", "V2")
If cell.Value = ifst(sti) Then
cell.Interior.ColorIndex = colind(sti)
cell.Font.Bold = True
cell.Copy
Range(cell, Cells(lacol, cell.Column)).Select
Selection.PasteSpecial xlFormats
End If
Next cell
Next sti
'整列變色
For rei = 0 To 2
For Each cell2 In Range(rerg(rei * 2), rerg(rei * 2 + 1))
If cell2.Value = "All" Then
cell2.Interior.ColorIndex = colind(rei + 2)
cell2.Font.Bold = True
cell2.Copy
Range(cell2, Cells(cell2.Row, larow)).Select
Selection.PasteSpecial xlFormats
End If
Next cell2
Next rei
End Sub
思維還停留在新手,有二個習慣要改掉。
第一要懂得做函式設變數,整合重複程式碼。
這五個需求運作是一樣的,卻直接複製貼上。
在參數地方應該用變數,變數設為陣列。
第二命名要有意義
變數用i,j,k,而不是有意義命名。
並且解釋每一段程式碼用意,宣告、主程式都有規畫區域。
讓後續維護的人方便理解。
計算機規劃一版
參考:
Learn JavaScript in 12 Minutes(一些基礎語法,有學過其他語言可以跳著看)
23 - GitHub Issues and Labels
這邊試著開需求
1.用迴圈建立0~9按鈕,按下後會按照點擊順序顯示在螢幕,陣列儲存
2.建立運算按鈕,點擊後顯示在螢幕上,結算後會清除運算圖示。
若是螢幕有運算圖示,再次點擊,則會結算當前結果,在螢幕顯示圖示。
3.建立螢幕為空按鈕,清除畫面及陣列。
4.建立陣列儲存數字及運算元,結算時只留下計算結果。
這次和發問者溝通程式需求,讓我會換位思考。
如果我是發問者要更改顏色,要從哪裡下手?
如果用複製貼上,就要從五個地方做更改。
整合起來就只要從一個地方更改。
感謝撥冗閱讀,一起紀念這一刻。