iT邦幫忙

DAY 20
0

Excel VBA 的眉眉角角系列 第 20

Excel VBA 的眉眉角角Day20:關於日期的相關問題

關於日期的處理,我整理了幾個要點,希望大家使用前先看一下,避免浪費時間在debug與try and error。

我用以下三個程式來介紹

一、日期、時間的顯示

Sub Day20_1()
    '使用Format方法來取得日期、時間的相關數據
    
    dateNow = Now
    Debug.Print dateNow
    Debug.Print
    Debug.Print "標準日期:" & Format(dateNow, "ddddd")
    Debug.Print "長日期:" & Format(dateNow, "dddddd")
    Debug.Print "4碼年份:" & Format(dateNow, "yyyy")
    Debug.Print "2碼年份:" & Format(dateNow, "yy")
    Debug.Print "2碼月份:" & Format(dateNow, "mm")
    Debug.Print "1碼月份:" & Format(dateNow, "m")
    Debug.Print "月份(英文):" & Format(dateNow, "mmmm")
    Debug.Print "短月份(英文):" & Format(dateNow, "mmm")
    Debug.Print "2碼日期:" & Format(dateNow, "dd")
    Debug.Print "1碼日期:" & Format(dateNow, "d")
    Debug.Print "星期:" & Format(dateNow, "aaaa")
    Debug.Print "短星期:" & Format(dateNow, "aaa")  '2003無作用,僅於儲存格格式作用
    Debug.Print "星期(英文):" & Format(dateNow, "dddd")
    Debug.Print "短星期(英文):" & Format(dateNow, "ddd")
    Debug.Print "本週第幾天:" & Format(dateNow, "w")
    Debug.Print "當年的第幾週:" & Format(dateNow, "ww")
    Debug.Print "當年的第幾季:" & Format(dateNow, "q")
    Debug.Print
        
    Debug.Print "完整時間:" & Format(dateNow, "ttttt")
    Debug.Print "2碼時" & Format(dateNow, "hh")
    Debug.Print "1碼時" & Format(dateNow, "h")
    Debug.Print "2碼分" & Format(dateNow, "nn")
    Debug.Print "1碼分" & Format(dateNow, "n")
    Debug.Print "2碼秒" & Format(dateNow, "ss")
    Debug.Print "1碼秒" & Format(dateNow, "s")
    Debug.Print "AM/PM:" & Format(dateNow, "AM/PM")
    Debug.Print "A/P:" & Format(dateNow, "A/P")
    Debug.Print "24小時制:" & Format(dateNow, "hh:mm:ss")
    Debug.Print "12小時制:" & Format(dateNow, "hh:mm:ss AM/PM")

    Debug.Print "當月有幾日"

End Sub

執行結果:

二、取得該月有幾天

Sub Day20_2()
    '取得該月有幾天
    '方式一
    st = Year(Date) - 1
    st = st & "-12-31"
    m = Month(Date)
    d = DateAdd("m", m, DateValue(st))
    d = Day(d)
    Debug.Print "方法1:" & m & "月份最後一日是:" & d

    '方式二
    Debug.Print "方法2:" & Month(Date) & "月份最後一日是:" & Day(DateAdd("m", 1, (Format(Date, "yyyy/m/") & 1)) - 1)

End Sub

執行結果:

三、關於日期的搜尋

Sub Day20_3()
    '關於日期資料的搜尋方式
    '如果搜尋的變數為日期變數,沒問題
    '如果搜尋的變數為文字變數,須套用DateValue函數才行

    Dim dateTarget As Date
    Dim strTarget As String
    
    dateTarget = "2014/1/4"  '日期格式的日期資料
    strTarget = "2014/1/4"   '文字格式的日期資料
    
    On Error GoTo ErrZona
    Debug.Print
    Debug.Print "字串/一般:" & Worksheets("Day20").Cells.Find(strTarget).Row
    Debug.Print "字串/使用What:方式:" & Worksheets("Day20").Cells.Find(What:=strTarget).Row
    Debug.Print "字串/使用DateValue方式:" & Worksheets("Day20").Cells.Find(DateValue(strTarget)).Row
    Debug.Print
    Debug.Print "日期/一般:" & Worksheets("Day20").Cells.Find(dateTarget).Row
    Debug.Print "日期/使用What:方式:" & Worksheets("Day20").Cells.Find(What:=dateTarget).Row
    Debug.Print "日期/使用DateValue方式:" & Worksheets("Day20").Cells.Find(DateValue(dateTarget)).Row

    
    Exit Sub

ErrZona:
    Debug.Print Err.Number & ": " & Err.Description
    Resume Next
End Sub 

資料表:

執行結果:

要點一,將有助於建構以日期為基礎的檔案名稱資料,或者便於分類。要點二則帶出當月總天數,有便於計算與天數有關的程式。第三點則是工作表搜尋,若要收尋工作表為「日期」的資料,變數也一定得是日期,否則需要用DateValue,不然資料是找不到的。以上幾點與各位分享!


上一篇
Excel VBA 的眉眉角角Day19:判斷檔案是否已開啟
下一篇
Excel VBA 的眉眉角角Day21: 執行外部程式
系列文
Excel VBA 的眉眉角角30

尚未有邦友留言

立即登入留言