跳到主要內容

發表文章

[EXCEL]以VBA與巨集自動化修改日期格式

在工作上可能會遇上的問題,在此紀錄與分享一下。 問題: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           ...
最近的文章

105商業類技藝競賽試題Problem3

*這兩題解題時間是前面問題一、二的加總,感謝 台灣商管教材研發學會 的教學影片 問題一、是否為堆積樹(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...

105商業類技藝競賽試題Problem2

問題二都是簡單的數學問題,須注意的重點如下 1.矩陣與Split:目前題目一直在用,做運算前處理 2.AND運算:並不用真的將10進位轉為2進位,就可以執行 3.GCD遞迴寫法 Problem 2 :數學問題 子題 1 : 網段 ID   ( 程式執行限制時間 : 2 秒 ) 13 分 IPv4 的 IP 位址為 32 位元資料,內容常表示成 4 個十進位數字,中間以點 (.) 隔開 ( 如 192.168.10.246) 那要如何從一個 IP 位址和子網路遮罩得知網段 ID 呢 ? 實際的情形是:當知道 IP 位址 和 子網路遮罩 ( 都是二進位數字 ) 之後,可使用一個 AND 的二進位邏輯運算,來求出網段 ID 。我們任選一個 IP 位址來做例子﹕ IP 位址: 139.175.153.252 換成二進位是﹕ 10001011.10101111.10011001.11111100 給予子網路遮罩是 255.255.0.0 ,換成二進位﹕ 11111111.11111111.00000000.00000000 然後將 IP 位址和子網路遮罩以   AND   運算﹕ 10001011.10101111.10011001.11111100 AND 11111111.11111111.00000000.00000000 得出﹕ 10001011.10101111.00000000.00000000 換成十進位就是 139.175.0.0 ,這個就是網段 ID 了。 範例 : 測試資料會有 IP 位址 / 子網路遮罩資訊,寫一程式計算網段 ID 。 IP 位址 192.168.10.65 11000000.10101000.00001010.010 00001 子網路遮罩 255.255.255.224 11111111.11111111.11111111.111 00000 網段 ID 192.168.10.64 11000000.10101000.00001010.010 00000 I...

105商業類技藝競賽試題Problem1

Problem 1:字串問題 子題 1:計算字數。 (程式執行限制時間: 2 秒) 9 分 做網路廣告的時候,有些廣告的文案都有規定字數不能超過多少,如果想要知道每列測試資 料(每組測試資料)有多少英文字,字和字之間用一個或多個空白隔開。”, ;! .” 這四個符號 會與英文字相鄰。寫一程式計算每列字數。 解法: Dim Sep() As String = {" ", ",", "!", ".", ";"} SR.ReadLine().Split(Sep, StringSplitOptions.RemoveEmptyEntries) 以空格為切割點,計算共有幾個字,並且刪除標點符號。 子題 2:摩斯電碼。(程式執行限制時間: 2 秒) 11 分 摩斯電碼是一種在電報通訊的時代傳送文字訊息的方式,透過不同的排列順序來表達不同的 英文字母、數字和標點符號。是由美國人薩繆爾·摩斯在1836 年發明。有兩種「符號」用來 表示字元:點(.)(ASC 碼0X2E)和劃(-)(ASC 碼0X2D),或叫「滴」(Dit)和「答」(Dah)。 數字對應的摩斯電碼如下: 0 ----- (Dah-Dah-Dah-Dah-Dah) 1 .---- (Dit-Dah-Dah-Dah-Dah) 2 ..--- (Dit-Dit-Dah-Dah-Dah) 3 ...-- (Dit-Dit-Dit-Dah-Dah) 4 ....- (Dit-Dit-Dit-Dit-Dah) 5 ..... (Dit-Dit-Dit-Dit-Dit) 6 -.... (Dah-Dit-Dit-Dit-Dit) 7 --... (Dah-Dah-Dit-Dit-Dit) 8 ---.. (Dah-Dah-Dah-Dit-Dit) 9 ----. (Dah-Dah-Dah-Dah-Dit) 解法: '使用StartsWith(String s) 回傳true/false 注意大小寫 延伸:EndsWith(String s)  '使用Substring (startIndex As Integer, length As Inte...

MySQL 亂碼設定

一、預設設定 xampp\mysql\bin\my.ini     找到 [client] 區塊> default-character-set=utf8 找到 [mysqld] 區塊> character-set-server=utf8 collation-server=utf8_general_ci 二、修改已建table ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 ; 三、PDO連線時設定 $dbh = new PDO ( "mysql:$connstr" , $user , $password ); $dbh -> exec ( "set names utf8" ); 四、meta時設定 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />