我一直在努力寻找一种方法来执行以下匹配和计算,但未能找到类似的方法。
我是VBA初学者,我想要的就是这个。
Worksheet("Sheet1").Range("B4")
是日期(02-31-2020)和Sheet2
有一些数据如下图所示。
现在我想让代码匹配Col"Year">和Col" Quarter"因此,Sheet1 date
表示年为2020and1/4 = 1因此,代码将复制Col"E"
和Col"G"
的值,这些值在同一年份和季度之前。
并粘贴到Worksheet("Sheet3").Range("G10:H10")
感谢您的帮助。
请尝试下一个代码。它从"sheet1"的活动单元格开始。必须找到日期的地方:
Sub testFindDateQAndCopy()
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet, lastR2 As Long
Dim procDate As Date, Qdate As Long, yDate As Long, arr2, i As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set sh3 = Worksheets("Sheet3")
lastR2 = sh2.Range("B" & rows.count).End(xlUp).row
If Not IsDate(sh1.Range("B4").Value) Then _
MsgBox "In cell """ & sh1.Range("B4").Value & """ it is not a date...": Exit Sub
procDate = sh1.Range("B4").Value
Qdate = Int((Month(procDate) - 1) / 3 + 1)
yDate = Year(procDate)
arr2 = sh2.Range("B2:G" & lastR2).Value
For i = 1 To UBound(arr2)
If arr2(i, 1) & arr2(i, 2) = yDate & Qdate Then
sh3.Range("G10:H10").Value = Array(arr2(i, 4), arr2(i, 6))
Exit For
End If
Next
End Sub
创建一个辅助列,结合Year
和Quarter
,如2020Q1
,例如使用公式(因为match只能匹配单个值,而不是2)。然后使用工作表函数。Match方法将helper列与您从日期=YEAR(A1) & "Q" & ROUNDUP(MONTH(A1)/3,0)
中获得的内容相匹配,其中A1是您的日期31-2-2020
。
另一个解决方案是,如果返回值只有数字数字而没有文本,您可以使用SUMIFS
函数:
=SUMIFS(E:E,B:B,YEAR(A1),C:C,ROUNDUP(MONTH(A1)/3,0))
返回e列的值,这里不需要helper列,因为SUMIFS
支持多个条件。