史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2013-01-02, 10:40 PM   #1 (permalink)
長老會員
 
leowang 的頭像
榮譽勳章
UID - 2461
在線等級: 級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時
註冊日期: 2002-12-06
文章: 4729
精華: 0
現金: 101679 金幣
資產: 668410953 金幣
預設

引用:
作者: getter 查看文章
遇到0的話就不會顯示出來的 比如0900 只會顯示90
迪西這邊的不會說 ... 您那個看來是 office 2010 的樣子

http://cdn1.fotopu.com/img/297677-3.png

或考慮換成 2003 或其他種的 Office 試試看看 ...
或者是 把 Office 更新看看 ...

可以問一下版上其他人也會一樣嗎?
就大大的圖所顯示的09:18 就顯示918
而不會顯示0918
__________________
https://lh3.googleusercontent.com/RuWvUdY-gxGU8oiOD6DIEoKZhLD-Hn-ITKj1LgD3QY6MehzkoddZNew3f3AFLA8dbxbnK-uiFipPzO3GpT5iL4VTIKCiYhgfnQiP5DROmn_5YIpA9zrseGljottMSbiTsw=w1280

金錢的數量,決定馬子的漂亮
硬碟的容量,決定男人的力量

製作Mail Logo按這裡
leowang 目前離線  
送花文章: 257, 收花文章: 1161 篇, 收花: 4928 次
回覆時引用此帖
舊 2013-01-03, 10:51 PM   #2 (permalink)
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

引用:
作者: leowang 查看文章
就大大的圖所顯示的09:18 就顯示918
而不會顯示0918
這種的喔 ... 原因是在於 函數本身的回傳啦 ...
當各自組合之後的 顯示概念上的笑話 ...
這樣的話,在年月的部份也會鬧出相同的效果出來 ...

主要原因是 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")

http://cdn1.fotopu.com/img/298277-3.png

此帖於 2013-01-04 12:21 AM 被 getter 編輯.
__________________
在「專業主討論區」中的問題解決後,要記得按一下 http://forum.slime.com.tw/images/stamps/is_solved.gif 按鈕喔,
這是一種禮貌動作。

一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。

天線寶寶說再見啦~ ... 天線寶寶說再見啦~

迪西:「再見~ 再見~」

Otaku Culture Party 關心您 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
向 getter 送花的會員:
leowang (2013-01-04)
感謝您發表一篇好文章
舊 2013-01-04, 12:22 AM   #3 (permalink)
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

語法:
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
使用 VBA 編輯器,插入一個「模組」貼上述兩段原始碼 ...

可以參考以下,如何插入一個「模組」並修改名稱
http://server01.lse.com.tw/elearning...330/229001.htm

將上述的原始碼,複製貼上 ...

接著就仿照一般的函數使用
如 =Df24hr(A1) 或是 =Df12hr(A1)

如果換行的話,一樣如之前,要勾選『儲存格格式』裡的自動換行

http://cdn1.fotopu.com/img/298278-3.png
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
向 getter 送花的會員:
leowang (2013-01-04)
感謝您發表一篇好文章
舊 2013-01-04, 12:49 AM   #4 (permalink)
長老會員
 
leowang 的頭像
榮譽勳章
UID - 2461
在線等級: 級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時
註冊日期: 2002-12-06
文章: 4729
精華: 0
現金: 101679 金幣
資產: 668410953 金幣
預設

參考了getter大大的公式
我小修改了一下 終於符合我的需求

非常的感謝大大的幫助 超強的
leowang 目前離線  
送花文章: 257, 收花文章: 1161 篇, 收花: 4928 次
回覆時引用此帖
向 leowang 送花的會員:
getter (2013-01-04)
感謝您發表一篇好文章
舊 2013-01-04, 08:07 PM   #5 (permalink)
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

一開始有點會錯意 ... 就會想的不一樣 ... 就要花點時間了 ...
用 Excel 內建 IF 函數還是 VBA 自定函數哪個好?

就程式設計的概念是一樣的,但 IF 函數使用上很直覺簡單,但有缺點
若條件一多就會很長,看得很辛苦。當 fx 的公式出錯了,因為公式太
長除錯上,有時就會眼花花,光是弄個括號就會吐血。此外 IF 函數使
用上還有某種數量上的限制,太多一樣會出現找不到原因的錯誤。

VBA 自定函數,可以自行建立自己需要的函數,可以取代那個長到令人吐血
眼花的 fx 公式,缺點有三:1.可能需要一點點的程式基礎,需要能編輯簡單
的 VBA 程式。2.自定函數使用時沒有說明,如果自己寫自己用就還 ok,給人
用有風險,要加說明功能相當複雜。3.因為是 VBA 需要修改 VBA 巨集的安全
性。
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
舊 2013-01-06, 12:12 AM   #6 (permalink)
長老會員
 
leowang 的頭像
榮譽勳章
UID - 2461
在線等級: 級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時級別:111 | 在線時長:12773小時 | 升級還需:219小時
註冊日期: 2002-12-06
文章: 4729
精華: 0
現金: 101679 金幣
資產: 668410953 金幣
預設

引用:
作者: getter 查看文章
一開始有點會錯意 ... 就會想的不一樣 ... 就要花點時間了 ...
用 Excel 內建 IF 函數還是 VBA 自定函數哪個好?

就程式設計的概念是一樣的,但 IF 函數使用上很直覺簡單,但有缺點
若條件一多就會很長,看得很辛苦。當 fx 的公式出錯了,因為公式太
長除錯上,有時就會眼花花,光是弄個括號就會吐血。此外 IF 函數使
用上還有某種數量上的限制,太多一樣會出現找不到原因的錯誤。

VBA 自定函數,可以自行建立自己需要的函數,可以取代那個長到令人吐血
眼花的 fx 公式,缺點有三:1.可能需要一點點的程式基礎,需要能編輯簡單
的 VBA 程式。2.自定函數使用時沒有說明,如果自己寫自己用就還 ok,給人
用有風險,要加說明功能相當複雜。3.因為是 VBA 需要修改 VBA 巨集的安全
性。
我是使用Excel 內建 IF 函數 比較容易看得懂 也容易修改
VBA的話 沒用過 所以不是很熟悉它
leowang 目前離線  
送花文章: 257, 收花文章: 1161 篇, 收花: 4928 次
回覆時引用此帖
向 leowang 送花的會員:
getter (2013-01-06)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
如何使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


所有時間均為台北時間。現在的時間是 11:32 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1