【问题标题】:Is there a way to have a simple paste macro, paste onto a cell by matching dates?有没有办法有一个简单的粘贴宏,通过匹配日期粘贴到单元格中?
【发布时间】:2023-03-17 15:36:01
【问题描述】:

我有一个写有宏的 Excel 工作簿。它从一张纸上获取信息并将其粘贴到另一张纸上。但是,每个月数据范围都会发生变化。目前跟踪 12 个月的滚动。所以当前月份是 2 月,我们使用 2014 年 2 月 - 2015 年 1 月的数据。

话虽如此,两张纸上都有当前日期。有没有办法添加到我预先存在的宏中,将其粘贴到与正确日期范围一致的正确单元格中。还是取数据 12 行并将其粘贴到当前月份范围的另一张表中?

Sub Paste_to_UnitProfile()
'
' Paste_to_UnitProfile Macro
'

'
    Range("D2:D13").Select
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("Unit Profile").Select
    Range("G151").Select
    ActiveSheet.Paste

End Sub

我正在添加我尝试在此上使用的 INDEX/MATCH,但我对此并不陌生,而且我确信我在做一些小事情:

=INDEX(PS250-'1EngineHours'!D2:D13,MATCH(E151,UnitProfile!G151:G170,0))

【问题讨论】:

  • 可能甚至像每次点击它时将其粘贴到一行一样简单?也许这将是一个更简单的解决方案。
  • 嗨,如果你能发布一些示例数据,它会更容易提供帮助。
  • 图片已添加!
  • 带有INDEX(MATCH())VLOOKUP 甚至SUMIFS 的公式难道不会比宏更合适吗?
  • 可能是,但我没有关于如何进行 VLOOKUP 的第一个线索。我对此比较陌生。

标签: excel vba


【解决方案1】:

我会将此添加到开头以获取要读取的第一行和要写入的第一行。

i = 1
Do Until IsEmpty(Cells(i, 4).Value)
    i = i + 1
Loop
StartRead = i - 12
EndRead = i - 1

i = 9
Do Until Sheets("Unit profile").Cells(i, 4).Value = Sheets("Unit profile").Cells(5, 2).Value
        i = i + 1
Loop
StartWrite =  i

然后只需将粘贴代码更改为:

Range(Cells(StartRead, 4), Cells(EndRead, 4)).Select
Selection.Copy
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Unit Profile").Select
Cells(StartWrite, 5).Select
ActiveSheet.Paste

我还要补充一点:

Application.ScreenUpdating = False

然后到最后:

Application.CutCopyMode = False
Application.ScreenUpdating = True

只是为了让它更整洁

【讨论】:

  • 我似乎在“直到工作表......”部分出现运行时错误
  • 它是否为您提供了更多信息?问题可能是单元格的格式不同,即 Feb-14 是 2015-02-14 的日期格式,而另一个 'Feb-14' 是字符串格式。
  • 如果是这种情况,最简单的方法当然是更改任一单元格的格式。
  • 我试过这个并不断收到错误:=INDEX(PS250-'1EngineHours'!D2:D13,MATCH(E151,UnitProfile!G151:G170,0))
  • 不知道是不是刚才打错了,但在你的文字中你说工作表名称是“Unit Profile”,但在这个 MATCH 段中它是“UnitProfile”。
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2014-06-06
  • 2021-10-06
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多