我正在尝试编写代码来计算数据库中一起出现某个日期和一个特定字符串的实例的数量。我编写了以下For Loop。但是,“ JanHousekeeping”的输出返回值为15。
我正在使用的示例数据集如下。
我有3个“客房整理和其他危险”实例,但是循环返回的值为15。为什么这样做,又该如何解决呢?预先感谢您的帮助!
aws s3 cp "s3://my-bucket/testaws/data/E:\Home\temp\test-1_20180101.csv" test.csv
答案 0 :(得分:1)
尽管我会选择数据透视表解决方案,但我认为这是您的意思,因为数据透视表本质上是动态的,从长远来看是好的。
i
)遍历行。 Housekeeping and Other Hazards
是所有输入都必须满足的测试,则只需在循环外部进行测试。 0
,更重要的是,您将拥有更明确的代码Select Case
在这里可以很好地工作,尽管数组解决方案会更好,而且可以将其压缩为循环更短的代码Sub Test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Jan")
Dim i As Long
Dim Jan As Long, Feb As Long, Mar As Long, Apr As Long, May As Long, Jun As Long, _
Jul As Long, Aug As Long, Sep As Long, Oct As Long, Nov As Long, Dec As Long
For i = 5 To 20
If ws.Range("I" & i) = "Housekeeping and Other Hazards" Then
Select Case Month(ws.Range("D" & i))
Case 1
Jan = Jan + 1
Case 2
Feb = Feb + 1
Case 3
Mar = Mar + 1
Case 4
Apr = Apr + 1
Case 5
May = May + 1
Case 6
Jun = Jun + 1
Case 7
Jul = Jul + 1
Case 8
Aug = Aug + 1
Case 9
Sep = Sep + 1
Case 10
Oct = Oct + 1
Case 11
Nov = Nov + 1
Case 12
Dec = Dec + 1
End Select
End If
Next i
End Sub
数据透视表解决方案如下图所示。如果交换行字段,甚至可以按类型进行过滤(当前视图允许您按日期进行过滤)。您可以使用GETPIVOTDATA
来将单元格设置为等于数据透视表的某些条件,就像宏要在最后执行的操作一样
答案 1 :(得分:0)
您正在遍历 j ,但是使用 i 将日期检索到 DateCheckLoop 中。
您没有提供 i 的指示,因此无法确定Worksheets("Jan").Cells(i, 4)
处的值。我可以提供1到31之间的月份为1。
由于永不更改 i ,因此每个循环都会重复一次。