如何引用VBA中依赖于日期值的单元格

时间:2015-08-12 19:49:35

标签: excel vba excel-vba

我需要将从一张工作表计算的每日交易量更新为包含历史数据的表格。

例如:在表1中,我在1个单元格中有一个日期,在相邻单元格中有一个值。在另一个工作表中,我有几列,其中A列是日期,其余列填充了数据。

我需要一个引用工作表1中日期的宏,并在工作表2中的工作表中粘贴与工作表1中的日期相对应的值。

这是我现在使用的代码,但效率不高。

我正在查找的日期是在sheet1单元格中(1,2)Datematch基本上是一个数值,用于计算我需要在sheet2中偏移的距离,而DateValues是我正在尝试的值输入B栏

我想在不使用Datematch值的情况下执行此操作

Sub testing()
Set Datematch = Sheet1.Cells(1, 1)
Set DateValues = Sheet1.Cells(2, 2)
Sheet2.Activate
Range("A1").Offset(Datematch, 1).Value = DateValues
End Sub

4 个答案:

答案 0 :(得分:1)

这似乎可以通过Lookup function来解决。查看VLOOKUP或HLOOKUP。或者,如果您想学习高级方法,请使用INDEX(MATCH())

答案 1 :(得分:1)

詹姆斯让我抛弃你,给你一些工作,然后在你需要帮助时再回答另一个问题(不想为你想出整个项目)

简短代码:

Sub FindStuff()

Application.ScreenUpdating = False

Dim VariableToLookUp() as Variant 'i used all variants because i don't know what data you have
Dim Results() as Variant 
Dim VariableWithValues() as Variant
Dim I,II as long

Redim Results(UBound(VariableToLookUp))

Set VariableToLookUp Range(Cell(1,1),Cell(LastRow,1) 
Set VariableWithValues Sheet2.Range(Cell(1,1),Cell(LastRow,2) 'this gets column2

For I = 0 to UBound(VariableToLookUp)
    For II = 0 to UBound(VariableWithValues)
        If VariableToLookup(I,1) = VariableWithValues(II,1) Then
              Results(I) = VariableWithValues(II,2)
              exit for
        endIf
    next
next

Sheet1.Range("B2").Activate
For I = 0 to Ubound(Results)
     ActiveCell.Offset(I,0).Value = Results(I)
next

Application.ScreenUpdating = True
)

现在请记住一些事情...... 1我没有测试这个,因为我希望它更能引导您进入下一个问题。 2我可能有错误的语法,但我保证正确的想法或足够接近。如果您发布另一个问题,请回复此链接,以便我可以找到它 ..作为旁注,如果您可以设置表格或添加逻辑以按某种顺序对它们进行排序,您可以获得真正复杂的搜索功能以加快它们的速度,我必须在VBA中检查3MM +数字与90K,所以不得不提出一些索引逻辑

答案 2 :(得分:1)

取决于此工作表的更新方式和频率,将有更好的解决方案。由于您没有说明源数据的更新方式,因此我认为新数据将出现在不同的工作表上是一回事。

根据您手头的情况,您可能根本不需要宏   - 命名源数据范围(静态或动态),例如 SourceRange
  - 确保按升序排序(可以宏观完成)
  - 然后在另一张纸的Col B中,使用公式
=IFERROR(VLOOKUP(<col A>,SourceRange,2,FALSE),0)

为了说明,我把所有的都放在一张纸上:
illustration

由于你没有提到更新时如何存储历史数据,所以没有做任何事情。

该方法将根据源数据的更新/检索方式以及如何处理旧数据而发生变化。

答案 3 :(得分:0)

无法弄清楚如何使用作弊值,即DateRow,它基本上只是一个匹配函数,它返回我的日期所在的行。

Sub InventoryUpdate()

Set DateRow = Sheets("Inputs").Cells(40, 8)
Set DateValues = Sheets("Inputs").Range("B40:F40")

DateValues.Copy
Sheets("Inventory").Activate
Range("A1").Offset(DateRow - 1, 30).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub