2017-04-19 35 views
0

我需要解決只給出了日期的日部分當前周(例如2017年4月1日)內的日期,這可能與Excel VBA? 我已經看過像這樣的excel vba - How to get the Day Name of Date? 的問題,但他們回答不同的問題。我也研究過使用像vbTuesday這樣的常量,但他們沒有幫助,因爲我仍然需要弄清楚如何將當天的名字連接到當前的星期。Excel VBA - 有沒有一種方法可以在當前一週中獲得日期,只給定日期名稱?

+0

究竟是輸入?像這樣的工作:'?Clng(Format(now + 5,「ww」))''如果你把它寫在直接窗口中?它給出當天+5天的一週。 – Vityata

+0

輸入是一個字符串的日期名稱(從下拉列表中選擇,例如「Monday」)。謝謝,我現在就試試。編輯:不知道這是我真正的後。 'd = CLng(格式(「星期一」+ 5,「ww」))'給出類型不匹配錯誤。 – warsong

回答

1

的主要問題是把你一天的名稱爲天數 - 因此週二或週二返回1日(星期一爲0天)。
在第一個想到我會使用一個Select Case聲明VBA,但有可能是一個更好的辦法。

下面的代碼將計算星期一日期(dReturnDate),然後添加一個數字取決於你問的天。無意義的日期名稱將返回#Num錯誤。

Public Function DateFromDay(DayName As String) As Variant 

    Dim dReturnDate As Date 
    Dim lDayNumber As Long 

    dReturnDate = Date - Weekday(Date - 2) 

    Select Case DayName 
     Case "Mon", "Monday" 
      lDayNumber = 0 
     Case "Tue", "Tuesday" 
      lDayNumber = 1 
     Case "Wed", "Wednesday" 
      lDayNumber = 2 
     Case "Thu", "Thursday" 
      lDayNumber = 3 
     Case "Fri", "Friday" 
      lDayNumber = 4 
     Case "Sat", "Saturday" 
      lDayNumber = 5 
     Case "Sun", "Sunday" 
      lDayNumber = 6 
     Case Else 
      lDayNumber = -1 
    End Select 

    If lDayNumber >= 0 Then 
     DateFromDay = dReturnDate + lDayNumber 
    Else 
     DateFromDay = CVErr(xlErrNum) 
    End If 

End Function 

工作表:
=DateFromDay("Tuesday")返回2017年4月18日
=DateFromDay("Any Day")回報#Num!

1

在很大程度上取決於你是否要使用vbUseSystemDayOfWeek或者如果單純治療星期一作爲第1天是可以接受的。您還會需要額外的代碼,如果你想接受,例如,「星期一」和「星期一」,如果你想保護的查找與UCase

原則,不過,該功能可能是簡單的:

Public Function DateFromDayName(dayName As String) As Date 
    Dim d As Long 

    d = WorksheetFunction.Match(dayName, _ 
           Array("Monday", _ 
             "Tuesday", _ 
             "Wednesday", _ 
             "Thursday", _ 
             "Friday", _ 
             "Saturday", _ 
             "Sunday"), _ 
           0) 

    DateFromDayName = Now - Weekday(Now, vbMonday) + d 

End Function 
相關問題