【问题标题】:Match the year and quarter from Date and paste the vaues从日期匹配年份和季度并粘贴值
【发布时间】:2021-01-20 10:39:42
【问题描述】:

我一直在努力寻找一种方法来执行以下匹配和计算,但找不到类似的东西。

我是 VBA 的初学者,我想要的就是这个。

Worksheet("Sheet1").Range("B4")(02-31-2020) 的日期,Sheet2 有一些数据,如下图所示。

现在我希望代码通过匹配日期来匹配 Col"Year"Col"Quarter",所以 Sheet1 date 表示 year 是2020季度为 1,因此代码将复制 Col"E"Col"G" 中的值,根据日期,这些值早于同一年和同一季度。

并将这些值粘贴到Worksheet("Sheet3").Range("G10:H10")

我们将不胜感激。

【问题讨论】:

  • 请更好地指定您的输入。 Sheet1 中的日期?活动单元格值?如果日期应该是“31-2-2020”,它永远不会存在(二月),代码是否应该提取年份和季度并将其用作参考以在第二张表中进行搜索?
  • FaneDuru,是的,你是对的,我已将日期参考更改为“02-31-2020”是的!代码将提取年份和季度,并像参考一样使用它在第二张表中进行搜索。
  • 那么,请尝试我发布的代码...

标签: excel vba copy match


【解决方案1】:

请尝试下一个代码。它从必须找到日期的“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

【讨论】:

  • 谢谢它工作正常@FaneDuru,但我希望这个东西是动态的,无论 Sheet1 范围代码中的日期是什么,它都会在 Year 和 Quarter 中隐藏它以在 Sheet2 中匹配它,因为当前代码只是为“2020 年 2 月 29 日”二月工作
  • @Learning:不是真的...在活动单元格中有一个(任何)日期就足够了!
  • @Learning:您之前要求“B7”...我用“B4”调整了代码。但只有当它是该单元格中的日期时它才有效。如果是字符串,可以转换,请发在这里。
  • @Learning:那么,它是否有效或仍在进行测试?
  • @Learning:我编辑了代码并对其进行了修改,以在该特定单元格中没有日期的情况下发出警告...
【解决方案2】:

创建一个组合YearQuarter 的辅助列,例如使用公式2020Q1(因为匹配只能匹配单个值,但不能匹配2)。然后使用WorksheetFunction.Match method 将该帮助列与您从日期=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 列返回值。这里不需要辅助列,因为SUMIFS 支持多个条件。

【讨论】:

  • 感谢您提供@Pᴇʜ 的帮助,但我正在寻找 VBA 中的解决方案,因为我发布的内容是我工作的 5% 将附加到原始代码。所以我在代码中需要这个东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多