Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel vba Sumif对日期感到困惑,4月份的结果错误_Excel_Vba_User Defined Functions_Worksheet Function - Fatal编程技术网

Excel vba Sumif对日期感到困惑,4月份的结果错误

Excel vba Sumif对日期感到困惑,4月份的结果错误,excel,vba,user-defined-functions,worksheet-function,Excel,Vba,User Defined Functions,Worksheet Function,我很明白这一点,但当我对结果进行了理智检查时,我在4月份发现了这种奇怪的行为,4月份的任何rev_date结果都是0。我尝试了不同的日期和rev_date和grid_date时间间隔,但同样的情况也发生了,我可以归咎于系统日期配置吗?我错过了什么 我宁愿使用excel中的公式,而不是UDF,但是这个奇怪的结果让我觉得很痒 使用此自定义项: Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Double Di

我很明白这一点,但当我对结果进行了理智检查时,我在4月份发现了这种奇怪的行为,4月份的任何
rev_date
结果都是0。我尝试了不同的日期和
rev_date
grid_date
时间间隔,但同样的情况也发生了,我可以归咎于系统日期配置吗?我错过了什么

我宁愿使用excel中的公式,而不是UDF,但是这个奇怪的结果让我觉得很痒

使用此自定义项:

Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Double

  Dim Team As Range
  Dim First_PD As Range
  Dim PAmount1 As Range

  Application.Volatile (True)

  Set PAmount1 = Sheets("Sheet1").Range("$F6:$F12")
  Set First_PD = Sheets("Sheet1").Range("$E6:$E12")
  Set Team = Sheets("Sheet1").Range("$D6:$D12")

            GRIDSALES = Application.WorksheetFunction.SumIfs( _
            PAmount1 _
            , Team, "<>9" _
            , First_PD, ">=" & Format$(rev_date, "dd mmm yyyy") _
            , First_PD, "<=" & Format$(Application.WorksheetFunction.EoMonth(grid_date, 0), "dd mmm yyyy"))

End Function
公共功能GRIDSALES(版本日期为日期,网格日期为日期)为双精度
暗队作为射程
第一次调暗作为范围
变暗PA1 As范围
Application.Volatile(True)
设置PAmount1=板材(“板材1”)。范围($F6:$F12)
设置第一张图纸(“图纸1”)。范围($E6:$E12)
设置团队=工作表(“工作表1”)。范围($D6:$D12)
GRIDSALES=Application.WorksheetFunction.SumIfs(_
PAmount1_
,小组,“9”_
,First_PD,“>=”&格式$(修订日期,“dd-mmm-yyyy”)_

,First_PD,“我遵循了您的做法,得到了正确的结果。您将日期设置硬编码为“dd-mmm-yyyy”,我在处理法语设置时发现该设置无法识别。请通过控制面板检查您的设置,了解您的区域设置。 此外,请检查日期mm/dd的使用情况。更改单元格格式以指示月份名称,而不是“05”。这样,您可以验证您没有反转日期和月份,并且每个日期都是一个日期


我遵循了您的做法,得到了正确的结果。您将日期设置硬编码为“dd-mmm-yyyy”,我在处理法语设置时发现该设置无法识别。请通过控制面板检查您的设置,了解您的区域设置。 此外,请检查日期mm/dd的使用情况。更改单元格格式以指示月份名称,而不是“05”。这样,您可以验证您没有反转日期和月份,并且每个日期都是一个日期


不确定,但我认为在VBA中,您应该始终使用US date格式。我通常用常量定义它:
const kUsDate=“mm\/dd\/yyyy”

反斜杠是转义字符。
作为证明,可以这样做:在B2中输入一个日期,如2011年6月20日(法式),然后从VBA运行代码

Debug.Print ActiveCell.NumberFormat
Excel将返回:
m/d/yyyy
CQFD

;-)

不确定,但我认为在VBA中,您应该始终使用US日期格式。我通常将其定义为常量:
const kUsDate=“mm\/dd\/yyyy”

反斜杠是转义字符。
作为证明,可以这样做:在B2中输入一个日期,如2011年6月20日(法式),然后从VBA运行代码

Debug.Print ActiveCell.NumberFormat
Excel将返回:
m/d/yyyy
CQFD

;-)

这是正确的,但在我的示例中,我将日期放在5月和6月之间,如果我在4月和7月之间使sumif总和值为0,则在3月和7月之间产生正确的值,当第一个日期是4月时,则产生错误的结果,更重要的是,使用Excel内置函数执行该过程会产生正确的结果,但我的UDF产生wrong result.最后我可以查看新的解决方案,您编辑的答案很好,解决了我的问题,谢谢!这是正确的,但在我的示例中,我将日期放在5月和6月之间,如果我在4月和7月之间使sumif总和值为0,则在3月和7月之间产生正确的值,当第一个日期是4月时,则产生错误的结果,甚至更多地使用Excel内置函数执行该过程会产生正确的结果,但我的自定义项会产生错误的结果。最后我可以查看新的解决方案,您编辑的答案很好,解决了我的问题,谢谢!