Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 匹配从日期开始的年度和季度,并粘贴vaues_Excel_Vba_Copy_Match - Fatal编程技术网

Excel 匹配从日期开始的年度和季度,并粘贴vaues

Excel 匹配从日期开始的年度和季度,并粘贴vaues,excel,vba,copy,match,Excel,Vba,Copy,Match,我一直在努力寻找一种方法来执行以下匹配和计算,但找不到类似的方法 我是VBA的初学者,我想要的就是这个 工作表(“表1”)。范围(“B4”)是日期(2020年02月31日),表2有一些数据,如下图所示 现在我希望代码通过匹配日期来匹配列“年”和列“季度”,因此Sheet1日期表示年是2020年,季度是1,因此代码将从列“E”和列“G”复制值日期前的年份和季度 并将该值粘贴到工作表(“Sheet3”).范围(“G10:H10”) 您的帮助将不胜感激。创建一个helper列,该列结合了年和季度,如2

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

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

工作表(“表1”)。范围(“B4”)
是日期(2020年02月31日)
表2
有一些数据,如下图所示

现在我希望代码通过匹配日期来匹配列“年”列“季度”,因此
Sheet1日期
表示年是2020年,季度是1,因此代码将从
列“E”
列“G”复制值
日期前的年份和季度

并将该值粘贴到
工作表(“Sheet3”).范围(“G10:H10”)


您的帮助将不胜感激。

创建一个helper列,该列结合了
季度
,如
2020Q1
等,例如使用公式(因为match只能匹配单个值,不能匹配2)。然后使用将该助手列与您从日期
=年(A1)和“Q”以及汇总(月(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
支持多个条件。

请尝试下一个代码。它从“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

请最好指定要输入的内容。第1页的日期?活动单元格值?如果日期应为“31-2-2020”,这将永远不存在(在2月),那么代码是否应提取年份和季度,并将其用作第二页中搜索的参考?FaneDuru,是的,你是对的,我已将日期参考更改为“02-31-2020”是的!代码将提取年份和季度,并在第二页中使用它作为参考进行搜索。然后,请尝试我发布的代码…感谢您提供的帮助@Pᴇʜ但我正在寻找VBA中的解决方案,因为我发布的内容是我工作的5%,将附加到原始代码中。所以我需要代码中的这个东西。谢谢@FaneDuru运行良好,但我希望这个东西是动态的,无论Sheet1范围代码中的日期是什么,都会在年份和季度中进行转换,以匹配Sheet2,因为当前代码只适用于“02-29-2020”Feb@Learning:不太。。。在活动单元格中有(任何)日期就足够了@学习:你之前问过“B7”。。。我用“B4”修改了代码。但只有当它是该单元格中的日期时,它才起作用。如果它是一个字符串,可以转换,请将其发布在这里。@Learning:那么,它工作还是仍然进行测试?@Learning:我编辑了代码,并对其进行了修改,以便在特定单元格中没有日期时发出警告。。。