我正在尝试创建一个宏,将数据从数据输入表复制到摘要表中。输入表每天都会清除,所以我不能使用公式来引用它。我希望用户能够输入日期,运行宏,并让宏将数据从输入表复制到摘要表上相应日期的单元格中。我四处寻找,找到了一些如何做到这一点的零碎方法,但我无法将它们全部整合在一起。
更新:
感谢以下信息,我能够找到一些额外的数据。我有一个非常粗糙的宏,如果用户手动选择正确的单元格,它就会起作用。现在我只需要弄清楚如何自动选择相对于当前日期的当前单元格。
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