【发布时间】:2021-06-29 08:41:16
【问题描述】:
我想管理我正在购买的股票。我有一个分类帐表,用于存储 TransactionDate、Stock、Ticker、Qty、Price、BrokeFee 和其他一些数据。我还有一个 StockHistory 表,我使用 Excel 中内置的 stockhistory 功能(通过 VBA)拉出每日开盘价、收盘价、最高价、最低价和成交量。
在 StockHistory 表中,我试图在 StockHistory 表中查找 Ticker 并执行 Sumif,其中我想要特定日期的特定代码(或股票)的总数。
工作单元格公式,其中 C 列是 StockHistory 表中的代码,A 列是日期。
=SUMIFS(U:U,S:S,C7,Q:Q,"<=" & A7)
VBA 中的以下内容似乎忽略了日期标准,并给出了指定日期之前和之后的总体总计。
Ticker = Cells(LastRowD, 3).Value
DateCheck = Cells(LastRowD, 1).Value
Qty = Application.WorksheetFunction.SumIfs(Range("U:U"), _
Range("S:S"), "=" & Ticker, Range("A:A"), "<=" & Range("A" & LastRowD))
见过类似的问题,但没有一个标准适用而另一个标准被忽略(但完成时没有错误)。
注意:我将这两个表放在不同的工作表上,但在我进行故障排除时已将分类帐复制到 StockHistory 选项卡以消除引用不同工作表的问题。
【问题讨论】:
-
Debug.Print VarType(DateCheck)在即时窗口中返回什么? -
返回 7。但是你确实让我想到了日期,我相信这是问题的一部分。我在澳大利亚,所以我们的日期格式是 dd/mm/yyyy,这就是我在两个表中格式化日期的方式(并已验证)。我扩大了日期范围,任何一天超过 12 天的日期都返回 0,而其他日期是正确/不正确的混合。看这张图片
-
好吧,看来这是日期的问题,但我尝试过,我无法让它干净地工作。然而,我设法让它工作,没有任何计算错误。我这样做的方法是在每个表中添加一个额外的列,用于以数字格式(即 23/2/21 = 44250)的日期,然后使用这些列来验证日期而不是日期列。如前所述,感觉问题是因为在澳大利亚,我们的日期格式与美国和其他地区不同。在我看来(我记得几年前在 MS Access VBA 中的类似内容)VBA 存在这种格式的问题。
-
有什么建议可以让我重新使用日期列,这样我就不需要这个额外的列了吗?
-
如果日期是“真实日期”(即,如果您将单元格格式化为
General,它将显示五位数字),然后尝试使用 Range 对象的.Value2属性来代替在引用工作表上的日期时,默认的.Value属性与您现在一样。 (由于您没有提供说明您的问题的数据示例,并且可以将其粘贴到我的工作表中,因此我无法确定重现您的问题)。阅读 MS 文档以了解差异。