2016-06-21 70 views
0

我想在我的VBA代碼上使用Sumifs函數,但是當條件是日期時它失敗。含日期標準的Sumifs

我有兩個代表月份和年份的字符串,如jan/2016feb/2016

我將它們轉換爲最新獲得「真正的」日期像01/01/201601/02/2016

month1 = CDate(string1) 
month2 = CDate(string2) 

我的範圍是一個像04/01/201613/01/2016值被格式化爲日期(DateRange)一列,.. 。

而且代碼:

sumifs1 = Application.WorksheetFunction.SumIfs(Range1, 
    Range2, var, 
    DateRange, ">=" & month1, 
    DateRange, "<" & month2) 

此作品(返回值)如果我不把日期,但我必須限制一段時間的總和。

我已經嘗試改變日期欄的數字格式是這樣的:

DateRange.NumberFormat = "dd/mm/yyyy" 
DateRange.NumberFormatLocal = "dd/mm/yyyy" 

試圖格式化我個這樣的:

month1 = Format$(CDate(string1), "dd/mm/yyyy") 
month2 = Format$(CDate(string2), "dd/mm/yyyy") 

但沒有任何工程(返回0)。

回答

1

我落得這樣做是這樣的:

month1 = CLng(CDate(string1)) 
month2 = CLng(CDate(string1)) 

sumifs1 = Application.WorksheetFunction.SumIfs(Range1, 
    Range2, var, 
    DateRange, ">=" & month1, 
    DateRange, "<" & month2) 

由於@SeanC here

+0

這與我在處理Office程序中的日期時使用的方法相同......日期存儲爲「Double」值,其中積分部分是1900年1月1日以來經過的天數,小數部分是日期分數即'0.5'意味着'12:00:00 PM') – Barranka

0

隨着柱日期和值在列,則在本例中:

=SUMPRODUCT(--(A1:A20>=DATEVALUE("1/1/2016"))*(A1:A20<DATEVALUE("2/1/2016"))*(B1:B20)) 

enter image description here

息率值的時間範圍內的列B的總和。

VBA

Sub dural() 
    Dim s1 As String, s2 As String, d1 As Date, d2 As Date 
    Dim N As Long, ss As String 
    Dim r1 As Range, r2 As Range 

    s1 = "jan/2016" 
    s2 = "feb/2016" 
    d1 = CDate(s1) 
    d2 = CDate(s2) 

    Set r1 = Range("A1:A20") 
    Set r2 = Range("B1:B20") 

    For Each r In r1 
     If r.Value >= d1 And r.Value < d2 Then 
      N = N + r.Offset(0, 1).Value 
     End If 
    Next r 

    MsgBox N 
End Sub 

將產生相同的結果。

+0

謝謝,但我最終將其轉換爲長。我發現它更容易。 – lpfx

+0

@lpfx *長*也是一個好主意。 –

+0

日期格式取決於區域配置,所以最好轉換爲數字('Long'或'Double')以確保代碼獨立於區域配置。 – Barranka