如何创建一个 VBA 宏,将数据从输入表按日期复制到摘要表中

如何创建一个 VBA 宏,将数据从输入表按日期复制到摘要表中

我正在尝试创建一个宏,将数据从数据输入表复制到摘要表中。输入表每天都会清除,所以我不能使用公式来引用它。我希望用户能够输入日期,运行宏,并让宏将数据从输入表复制到摘要表上相应日期的单元格中。我四处寻找,找到了一些如何做到这一点的零碎方法,但我无法将它们全部整合在一起。

更新:

感谢以下信息,我能够找到一些额外的数据。我有一个非常粗糙的宏,如果用户手动选择正确的单元格,它就会起作用。现在我只需要弄清楚如何自动选择相对于当前日期的当前单元格。

Sub Update_Deposits()  
'  
' Update_Deposits Macro  
'  

Dim selectedDate As String  
Dim rangeFound As Range  
selectedDate = Sheets("Summary Sheet").Range("F3")  
Set rangeFound = Sheets("Deposits").Cells.Find(CDate(selectedDate))  


Dim Total1 As Double  
Dim Total2 As Double  
Dim Total3 As Double  
Dim Total4 As Double  
Dim Total5 As Double  

  Total1 = Sheets("Summary Sheet").Range("E6")  
  Total2 = Sheets("Summary Sheet").Range("E7")  
  Total3 = Sheets("Summary Sheet").Range("E8")  
  Total4 = Sheets("Summary Sheet").Range("E9")  
  Total5 = Sheets("Summary Sheet").Range("E10")  

If Not (rangeFound Is Nothing) Then  
    rangeFound.Offset(0, 2) = Total1  
    rangeFound.Offset(0, 3) = Total2  
    rangeFound.Offset(0, 4) = Total3  
    rangeFound.Offset(0, 6) = Total4  
    rangeFound.Offset(0, 7) = Total5  
End If  

'  
End Sub  

此版本将找到页面上的第一个值并填写值:

Sub Update_Deposits()  
'  
' Update_Deposits Macro  
'  

Dim selectedDate As String  
Dim rangeFound As Range  
selectedDate = Sheets("Summary Sheet").Range("F3")  
Set rangeFound = Sheets("Deposits").Cells.Find(CDate(selectedDate))  

Dim Total1 As Double  
Dim Total2 As Double  
Dim Total3 As Double  
Dim Total4 As Double  
Dim Total5 As Double  

  Total1 = Sheets("Summary Sheet").Range("E6")  
  Total2 = Sheets("Summary Sheet").Range("E7")  
  Total3 = Sheets("Summary Sheet").Range("E8")  
  Total4 = Sheets("Summary Sheet").Range("E9")  
  Total5 = Sheets("Summary Sheet").Range("E10")  

If Not (rangeFound Is Nothing) Then  
    rangeFound.Offset(0, 2) = Total1  
    rangeFound.Offset(0, 3) = Total2  
    rangeFound.Offset(0, 4) = Total3  
    rangeFound.Offset(0, 6) = Total4  
    rangeFound.Offset(0, 7) = Total5  
End If  

'  
End Sub  

答案1

由于您从宏解决方案开始,我假设您具有足够的编程知识来整理最终结果;因此,鉴于此,我认为您需要的主要部分是:

开始使用

确保显示显影剂色带,然后切换到 VBA 编辑器 (Alt-F11)。
阅读这一页了解整个过程;一些示例可能非常接近您想要的(例如“根据工作表数据自动创建工作簿文件”)。

读取单元格

dim myVar1 as string
myVar1 = Sheets("Sheet1").Range("A1")

这将允许从任何特定工作表上的任何特定单元格读取。

聚合单元格值

Dim myvar2 As Integer
myvar2 = Application.WorksheetFunction.Sum(Sheets("Sheet1").Range("B4:B6"))

这将允许您在任意单元格范围上使用任何标准工作表函数。

写入单元格

Sheets("Sheet2").Range("A1") = myVar1

(简单来说就是阅读的反向操作)

将宏连接到工作表上的按钮

创建宏后,在主表最合理的位置添加一个按钮,如下所示本指南

祝你好运!

编辑1:

根据偏移量写入

要根据日期偏移写入特定单元格,您可以使用日期差异函数来获取偏移的距离,例如:

Dim startDate As Date
Dim currDate as Date
Dim dateOffset As Integer

startDate = #10/21/2011#
currDate = Sheets("Summary Sheet").Range("F3")
dateOffset = DateDiff("d", startDate, currDate)

然后,您可以按照与现有方式相同的方式写入特定单元格:

ActiveSheet.Range("A1").Offset(0, dateOffset) = Total1
ActiveSheet.Range("A1").Offset(0, dateOffset+1) = Total2

ETC

编辑2:

寻找约会对象

根据您的评论:您可以在另一张表中找到日期,如下所示:

Dim selectedDate As String
Dim rangeFound As Range
selectedDate = ActiveCell.Value
Set rangeFound = Sheet2.Cells.Find(CDate(selectedDate))

显然,您可以将其更改Sheet2为您想要的任何内容。这将为您提供摘要表上包含日期的单元格的地址。如果您使用,rangeFound.Address您将获得类似于的值$D$9。如果您使用rangeFound.Row和,rangeFound.Column您将获得实际的行号和列号。请注意,您还可以通过相同的原理获得活动单元格的地址(例如ActiveCell.Row)。从那里,您可以使用类似

If Not (rangeFound Is Nothing) Then
    ActiveCell.Offset(0, 1) = rangeFound.Offset(0, 1)
    ActiveCell.Offset(0, 2) = rangeFound.Offset(0, 2)
End If

相关内容