|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2012-12-22, 01:44 AM | #1 |
長老會員
|
其它 - Excel 日期時間轉換
|
__________________ 金錢的數量,決定馬子的漂亮 硬碟的容量,決定男人的力量 製作Mail Logo按這裡 |
|
送花文章: 257,
|
2012-12-25, 08:12 PM | #2 (permalink) |
管理員
|
原始的來源格式,似乎是 NOW() 的函數
因此假設 A1 儲存格為 =NOW() B1 儲存格為 =MONTH(A1)&DAY(A1)&CHAR(10)&HOUR(A1)&MINUTE(A1) 並且將 B1 儲存格的「儲存格格式」中的自動換行勾選起來,應該就可以做到如上所示的 效果 ... 當然若是將兩者的公式合併的話就是 =MONTH(NOW())&DAY(NOW())&CHAR(10)&HOUR(NOW())&MINUTE(NOW()) Excel 函數解說 Now 取得系統目前的時間,只要重新開檔、重新入 =NOW() 的儲存格,內容就會被更新 MONTH 取得日期格式中「月的部份」1~12。 DAY 取得日期格式中「日的部份」1~31。 HOUR 取得時間格式中「小時的部份」0~12 或 0~23。 MINUTE 取得時間格式中「分鐘的部份」0~59。 CHAR(10) 取得換行符號,在儲存格有自動換行下,當有換行符號時,在該符號位置會換行。 -------------------------------------------------------------------------- 如果這是純文字的格式的話,如 A3 儲存格為 '2012/12/21 07:33:00 PM B3 儲存格為 =REPLACE(MID(A3,6,FIND(" ",MID(A3,6,6))),FIND("/",MID(A3,6,5)),1,"")&CHAR(10)&REPLACE(LEFT(RIGHT(A3,13),5),FIND(":",RIGHT(A3,13)),1,"") 並且將 B2 儲存格的「儲存格格式」中的自動換行勾選起來,應該就可以做到如上所示的 效果 ... Excel 函數解說 REPLACE 取代指定位置的字元或字串。 RIGHT 從右方開始取得指定字數的字元或字串。 LEFT 從左方開始取得指定字數的字元或字串。 MID 從指定從左方第幾位起開始取得指定字數的字元或字串。 FIND 從指定從左方第幾位起開始找尋指定字元或字串,並回傳在字串中的位置編號(Index)。 CHAR(10) 取得換行符號,在儲存格有自動換行下,當有換行符號時,在該符號位置會換行。 不然就要使用 VBA 來作格式轉換了 ... 此帖於 2012-12-26 08:40 PM 被 getter 編輯. 原因: 補充 |
__________________ 在「專業主討論區」中的問題解決後,要記得按一下 按鈕喔, 這是一種禮貌動作。 一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。 不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。 天線寶寶說再見啦~ ... 天線寶寶說再見啦~ 迪西:「再見~ 再見~」 『 Otaku Culture Party 』 關心您 ... |
|
送花文章: 37855,
|
2012-12-29, 06:25 PM | #4 (permalink) |
管理員
|
會不會動到了一些不知道的設定 ... 剛開始的迪西也是有 90 出現
後來就不會了 ... 不然試著看看迪西測試的 檔案看看 http://www.ziddu.com/download/21221300/123.rar.html |
送花文章: 37855,
|
向 getter 送花的會員:
|
a471 (2012-12-29)
感謝您發表一篇好文章 |
2012-12-31, 04:42 PM | #5 (permalink) | |
長老會員
|
引用:
也就是說 我Key 2012/12/31 09:00 Excel的欄位會自己判斷為 2012/11/21 09:00:00 AM 但是顯示出來會是 2012/12/31 9:00 (因為儲存格格式選的是時間) 所以要把 2012/12/31 9:00 轉成 1231 0900 |
|
送花文章: 257,
|
向 leowang 送花的會員:
|
getter (2013-01-01)
感謝您發表一篇好文章 |
2012-12-31, 08:09 PM | #6 (permalink) |
管理員
|
用 =MONTH(A1)&DAY(A1)&CHAR(10)&HOUR(A1)&MINUTE(A1) 改用手動輸入,使用上述一樣的時間格式 ... 可以正常顯示 ... A1 儲存格為 2012/12/31 08:14:12 PM B1 儲存格為 =HOUR(A1) B1 儲存格格式『日期』 顯示就會變成 1900/1/20 00:00 B1 改成 =HOUR(A1)&MINUTE(A1) 顯示就會變成 2014 後來發現單獨使用 MINUTE 結果跟 HOUR 是一樣的 會變成哪種顯示有點怪的狀況跟 B1 儲存格格式有關系, 若單獨使用的話, B1 儲存格格式為『日期』時, 會變成 把輸出的結果填到日期的『日』上面。若改成 文字、數值 、G/通用等格式,則會單純的顯示該值,如 8。 當公式完全後,會各自把函數的值填到相對的位置,此格式 為日期文字、數值、G/通用等格式,都不會變動 ... 還有一種簡單的方式就是使用[自訂儲存格式] 如 mmdd hhmm 可以得到正確的顯示結果,但不會斷行 .... 若怎麼改都是很奇怪的話,只能說不曉得原因在哪裡了 ... 此帖於 2012-12-31 09:21 PM 被 getter 編輯. |
送花文章: 37855,
|
2013-01-02, 01:34 AM | #7 (permalink) | |
長老會員
|
引用:
遇到0的話就不會顯示出來的 比如0900 只會顯示90 如果用改變顯示格式方式的話 改變的是顯示方式 雖然可以達到要的目的 但如果與Word配合使用的話 還是會顯示原本的時間格式 此帖於 2013-01-02 01:48 AM 被 leowang 編輯. |
|
送花文章: 257,
|
2013-01-02, 07:30 PM | #8 (permalink) | |
管理員
|
引用:
遇到0的話就不會顯示出來的 比如0900 只會顯示90 迪西這邊的不會說 ... 您那個看來是 office 2010 的樣子 或考慮換成 2003 或其他種的 Office 試試看看 ... 或者是 把 Office 更新看看 ... 可以問一下版上其他人也會一樣嗎? 此帖於 2013-01-02 09:01 PM 被 getter 編輯. |
|
送花文章: 37855,
|
向 getter 送花的會員:
|
a471 (2013-01-03)
感謝您發表一篇好文章 |
2013-01-03, 10:51 PM | #10 (permalink) |
管理員
|
這種的喔 ... 原因是在於 函數本身的回傳啦 ...
當各自組合之後的 顯示概念上的笑話 ... 這樣的話,在年月的部份也會鬧出相同的效果出來 ... 主要原因是 Excel 函數本身的回傳值,只要是個位數都會只有 1位數 的回傳,舉例: DAY(1/9) = 9 但不會顯示 09 MONTH(1/9) = 1 但不會顯示 01 當以字串組合後就會變成 19 ... 不信 ... 去改變月日就知道了 ... 若是先前的公式,若是 2013/01/01 03:03 AM 好了 就會被翻譯成 11 33,這不是函數出錯,是經過組合後的顯示邏輯的格式錯 誤 ... 這不是函數的錯,因為是回傳成數字。不是特定格式的顯示文字,所有的函數 都是這樣 ... 怎麼解決,設法補足缺乏的那的 0 的那 1位數,使其變成 2位數,在經組合之後 就會是想要的結果 ... 怎麼補 ... 有兩種方式 1個是使用函數 IF,另一個使用 VBA 自建函數來作業 這裡先提供第一種方式 ... 比較簡單 ... 原理很簡單 ... 先用 IF 判斷單一函數的回傳值是不是個位數的條件,是的話 就補個 0。 簡單喔 這裡以月先示範一下 IF(MONTH(A1)<10,0&MONTH(A1),MONTH(A1)) 這樣的話 1 就會變成 01 了 時間的話就比較麻煩了 ... 因為有 12 hr 或 24hr 24hr =IF(MONTH(A1)<10,0&MONTH(A1),MONTH(A1)) & IF(DAY(A1)<10,0&DAY(A1),0&DAY(A1)) &CHAR(10)& IF(HOUR(A1)<10,0&HOUR(A1),HOUR(A1)) & IF(MINUTE(A1)<10,0&MINUTE(A1),MINUTE(A1)) 12hr =IF(MONTH(A1)<10,0&MONTH(A1),MONTH(A1))& IF(DAY(A1)<10,0&DAY(A1),0&DAY(A1))&CHAR(10)& IF(MOD(HOUR(A1),12)=0,12,IF(HOUR(A1)<10,0&HOUR(A1),IF(HOUR(A1)<22,0&HOUR(A1)-12,HOUR(A1)-12)))& IF(MINUTE(A1)<10,0&MINUTE(A1),MINUTE(A1))& IF(HOUR(A1)<12,"AM","PM") 此帖於 2013-01-04 12:21 AM 被 getter 編輯. |
送花文章: 37855,
|
向 getter 送花的會員:
|
leowang (2013-01-04)
感謝您發表一篇好文章 |
2013-01-04, 12:22 AM | #11 (permalink) |
管理員
|
語法:
Function Df12hr(ByVal DateTime) As Variant Dim YearX, MonX, DayX, HrX, MinX, SecX, APM, Out As Variant YearX = Year(DateTime) '取得年份數值 MonX = MONTH(DateTime) '取得月份數值 DayX = Day(DateTime) '取得日期數值 HrX = Hour(DateTime) '取得小時數值 MinX = Minute(DateTime) '取得分鐘數值 SecX = Second(DateTime) '取得秒鐘數值 If HrX < 12 Then '取得 AM 或 PM APM = "AM" Else APM = "PM" End If If MonX < 10 Then '月補 0 位數 Out = "0" & MonX Else Out = MonX End If If DayX < 10 Then '日補 0 位數 Out = Out & "0" & DayX Else Out = Out & DayX End If Out = Out & vbCrLf '換行符號 If HrX > 11 Then '24hr 轉 12hr HrX = HrX - 12 End If If HrX = 0 Then Out = Out & 12 ElseIf HrX < 10 Then '時補 0 位數 Out = Out & "0" & HrX Else Out = Out & HrX End If If MinX < 10 Then '分補 0 位數 Out = Out & "0" & MinX Else Out = Out & MinX End If Df12hr = Out & APM End Function Function Df24hr(ByVal DateTime) As Variant Dim YearX, MonX, DayX, HrX, MinX, SecX, APM, Out As Variant YearX = Year(DateTime) '取得年份數值 MonX = MONTH(DateTime) '取得月份數值 DayX = Day(DateTime) '取得日期數值 HrX = Hour(DateTime) '取得小時數值 MinX = Minute(DateTime) '取得分鐘數值 SecX = Second(DateTime) '取得秒鐘數值 If HrX < 12 Then '取得 AM 或 PM APM = "AM" Else APM = "PM" End If If MonX < 10 Then '月補 0 位數 Out = "0" & MonX Else Out = MonX End If If DayX < 10 Then '日補 0 位數 Out = Out & "0" & DayX Else Out = Out & DayX End If Out = Out & vbCrLf '換行符號 If HrX < 10 Then '時補 0 位數 Out = Out & "0" & HrX Else Out = Out & HrX End If If MinX < 10 Then '分補 0 位數 Out = Out & "0" & MinX Else Out = Out & MinX End If Df24hr = Out '回傳結果 End Function 可以參考以下,如何插入一個「模組」並修改名稱 http://server01.lse.com.tw/elearning...330/229001.htm 將上述的原始碼,複製貼上 ... 接著就仿照一般的函數使用 如 =Df24hr(A1) 或是 =Df12hr(A1) 如果換行的話,一樣如之前,要勾選『儲存格格式』裡的自動換行 |
送花文章: 37855,
|
向 getter 送花的會員:
|
leowang (2013-01-04)
感謝您發表一篇好文章 |
2013-01-04, 08:07 PM | #13 (permalink) |
管理員
|
一開始有點會錯意 ... 就會想的不一樣 ... 就要花點時間了 ...
用 Excel 內建 IF 函數還是 VBA 自定函數哪個好? 就程式設計的概念是一樣的,但 IF 函數使用上很直覺簡單,但有缺點 若條件一多就會很長,看得很辛苦。當 fx 的公式出錯了,因為公式太 長除錯上,有時就會眼花花,光是弄個括號就會吐血。此外 IF 函數使 用上還有某種數量上的限制,太多一樣會出現找不到原因的錯誤。 VBA 自定函數,可以自行建立自己需要的函數,可以取代那個長到令人吐血 眼花的 fx 公式,缺點有三:1.可能需要一點點的程式基礎,需要能編輯簡單 的 VBA 程式。2.自定函數使用時沒有說明,如果自己寫自己用就還 ok,給人 用有風險,要加說明功能相當複雜。3.因為是 VBA 需要修改 VBA 巨集的安全 性。 |
送花文章: 37855,
|
2013-01-06, 12:12 AM | #14 (permalink) | |
長老會員
|
引用:
VBA的話 沒用過 所以不是很熟悉它 |
|
送花文章: 257,
|
向 leowang 送花的會員:
|
getter (2013-01-06)
感謝您發表一篇好文章 |
|
|
相似的主題 | ||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
如何使AUTOCAD圖檔內資料(材料表)轉換至EXCEL或WORD檔作統計 | oldman53 | 軟體應用問題討論區 | 2 | 2004-08-08 11:15 PM |
每次開機時間日期都會歸零? | jerry12 | 一般電腦疑難討論區 | 3 | 2003-10-18 01:23 AM |
關於xp的日期與時間 | 光仔 | 軟體應用問題討論區 | 0 | 2003-04-24 12:22 PM |