在工作上可能會遇上的問題,在此紀錄與分享一下。 問題:Excel中輸入日期,有些人輸入108/7/8、108.3.5等等格式要怎麼統一成 1080506這樣的 格式呢? 步驟一:先以內建函數轉換(取代)日期 要認識的基本函數 IF、Mid、Left、Right、Substitute 進行取代 IF( MID(RIGHT(A1,2),1,1)="/" , IF(RIGHT(LEFT(A1,6),1)="/" ,SUBSTITUTE(SUBSTITUTE(A1,"/","0",2),"/","0",1),SUBSTITUTE(SUBSTITUTE(A1,"/","0",2),"/","",1)),IF( RIGHT(LEFT(A1,6),1)="/" , SUBSTITUTE(SUBSTITUTE(A1,"/","",2),"/","0",1) ,SUBSTITUTE(SUBSTITUTE(A1,"/","",2),"/","",1))) 第一個IF是用來判斷"日"的格式,舉例來說108/5/6,Right(A1,2)會取出"/6",再用Mid設定取第1個字"/",108/5/16,Right(A1,2)會取出"16",再用Mid設定取第1個字"1", 這也代表如果是1-9日可以讓她進行補0的動作。 第二個IF是用來判斷"月"的格式,與上面用取法類似。 步驟二:建立自訂函數 改為VBA格式,建立一個自己設定的函數SubstituteDate() Function SubstituteSlash(A1) If InStr(A1, "/") > 0 Then ...
*這兩題解題時間是前面問題一、二的加總,感謝 台灣商管教材研發學會 的教學影片 問題一、是否為堆積樹(Heap tree)或二元搜尋樹(Binary search tree) 判斷Heap Tree的條件為 左右子節點都比其父節點大/小 即為最大/最小堆積樹 判斷Binary Tree的條件為 左子節點都比其父節點小而右 子節點都比其父節點大 即為二元搜尋樹 所以重點在於,判斷節點的大小 Private Function FindMax(nodes() As Integer, root As Integer, upperBound As Integer) As Integer If root > upperBound Then Return Integer.MinValue Dim t As Integer = Math.Max(FindMax(nodes, 2 * root + 1, upperBound), FindMax(nodes, 2 * root + 2, upperBound)) Dim Max As Integer = Math.Max(nodes(root), t) Return Max End Function 以遞迴方式,每個節點都會看做Root點,以判斷最大堆積樹為例 Private Function isMaxHeap(nodes() As Integer) As Boolean Dim U As Integer = nodes.GetUpperBound(0) Dim i As Integer = 0 For i = 0 To U If nodes(i) < FindMax(nod...