iT邦幫忙

2019 iT 邦幫忙鐵人賽

1
自我挑戰組

程式設計師大冒險系列 第 52

[52/150]iT邦里程碑-第一次獲得最佳解答

  • 分享至 

  • xImage
  •  

昨天順手解了一題用Excel vba代替格式化條件,今天把它做完整做出來,就被選為「最佳解答」。第一次在iT邦回答就被選為最佳解答,我會記住2018.11.21這一天。

【大綱】

  • 時間分配
  • 最佳解答的是,來杯拿鐵
  • Git Issue
  • 總結

【時間分配】

項目 時間
Excel vba 最佳回答 3 hr 11 min
學習Git Issue,JavaScript 1 hr 11 min
鐵人賽發文 1 hr 04 min

【最佳解答的是,來杯拿鐵】

有圖有證據
https://ithelp.ithome.com.tw/upload/images/20181121/20091910Jpcm0wN4XI.jpg

第一版

這五個需求程式運作相同,做好第一支後複製貼上五次。
然後每隻程式依照需求,慢慢找參數手動變更。
檢討:後來想到可以在參數位置改成變數

第二版

將整段程式做整合,程式碼行數減少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,而不是有意義命名。
並且解釋每一段程式碼用意,宣告、主程式都有規畫區域。
讓後續維護的人方便理解。

【Git Issue】

計算機規劃一版
參考:
Learn JavaScript in 12 Minutes(一些基礎語法,有學過其他語言可以跳著看)
23 - GitHub Issues and Labels
這邊試著開需求
1.用迴圈建立0~9按鈕,按下後會按照點擊順序顯示在螢幕,陣列儲存
2.建立運算按鈕,點擊後顯示在螢幕上,結算後會清除運算圖示。
若是螢幕有運算圖示,再次點擊,則會結算當前結果,在螢幕顯示圖示。
3.建立螢幕為空按鈕,清除畫面及陣列。
4.建立陣列儲存數字及運算元,結算時只留下計算結果。

【總結】

這次和發問者溝通程式需求,讓我會換位思考。
如果我是發問者要更改顏色,要從哪裡下手?
如果用複製貼上,就要從五個地方做更改。
整合起來就只要從一個地方更改。

感謝撥冗閱讀,一起紀念這一刻。


上一篇
[51/150]RWD大,網頁急需你的支援
下一篇
[53/150]網頁版計算機製作(上篇)
系列文
程式設計師大冒險115
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言