我目前有一个代码,用于查找特定列中的第一个空单元格,并将“SumIfs”计算的结果保存到该单元格中。它针对多个条件运行多个列。下面的示例是我搜索条件“R”和“ECHO”的一个实例,将第16列中的相应值相加,并将结果放在另一个工作表的“C”列中:
Sub SumIfs()
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("previous_day_split")
Worksheets("daily_balance").Activate
Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
Application.SumIfs(ws2.Columns(16), ws2.Columns(15), "R", ws2.Columns(20), "ECHO")
End Sub
它工作得很好,但现在不是只将结果放在列“C”的第一个空单元格中,我想找到一种方法来根据具体情况指定一行(并不总是第一个空行)日期在“daily_balance”的第一列。
简而言之,例如,我希望代码基本上在工作表“daily_balance”的第一列中搜索日期(例如11/2/2015),将该行指定为要将值转储到的行,在“ws2”中运行SumIfs函数,并将结果放在包含11/2/2015的行的“C”列中。
有关根据条件指定行的最佳方法的任何建议或想法吗?
答案 0 :(得分:1)
您可以使用Do While
循环
i = 0
Do While Cells(i, "A") <> {lookup_value} And Cells(i, "A") <> ""
i = i + 1
loop
'Check that {i} holds row number for our lookup value and not for an empty one
if Cells(i, "A") = {lookup_value} then
'Do your calculations here
'And then use {i} as row number to save your result.
end if
所以{lookup_value}
是一个常数或变量,包含您要查找的日期。如果您的日期格式不正确,您可能需要使用CDate()
将lookup_value和cell值设置为相同的格式,这意味着代替:
Do While Cells(i, "A") <> {lookup_value} And Cells(i, "A") <> ""
你应该使用:
Do While CDate(Cells(i, "A")) <> CDate({lookup_value}) And Cells(i, "A") <> ""
祝你好运,并随时提出更多细节。