首先,我对VBA的经验很少。这是我的问题:
我需要每日更新一定的费率才能进行投资计算。现在,我有一个按钮,一旦点击就会自动从网站上获取当天的费率,我必须手动将费率复制并粘贴到各自的日期。我只想点击按钮,我会想要这样做,费率将自动粘贴到其日期旁边。工作表如下所示:
Update Button
Day's date Day's rate
03/01/2013 6%
Date Rate
02/01/2013 5%
03/01/2013 6%
04/01/2013
最明显的方法是使用vlookup查找当天的日期,并将其粘贴到B列的正确位置,但问题是每次更新值时,前一天公式会导致错误。因此,最好的解决方案是使用与A列中日期相匹配的简单宏,并仅粘贴其旁边的费率值。
使用普通工作表函数执行此操作的一个好策略是=CELL("address";INDEX(B:B;MATCH($G$5;A:A;0);))
,这将导致在B列中引用正确日期的单元格。问题是VBA中没有= CELL函数。 / p>
我尝试了以下脚本,但没有成功:
Sub Teste2()
Dim IndexFormula As Range
MatchFormula = WorksheetFunction.Match(Range("Today"), Range("A:A"), 0)
IndexFormula = WorksheetFunction.Index(Range("B:B"), MatchFormula, 0)
Value = IndexFormula.Address
Range("G5").Select
Selection.Copy
Value.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
我应该使用什么代码?
提前致谢
答案 0 :(得分:1)
另一个选择是使用Find功能:
Sub Teste2()
Dim res As Range
Set res = Range("A:A").Find(What:=Range("Today"), Lookat:=xlWhole, MatchCase:=False)
If Not res Is Nothing Then
' res.Offset(, 1) will give you column B (1 to the right from A)
res.Offset(, 1).Value = Range("G5").Value
End If
End Sub
有些说明:
Value
的变量。有一次你会对意外结果感到困惑Copy/PasteSpecial xlPasteValues
,您可以只使用Range("A1").Value = Range("B1").Value
答案 1 :(得分:1)
你非常接近你的尝试只需做一些小改动,如下所示它会起作用,不需要使用一个因为它会慢一点:
Dim MatchFormula As Long
Dim IndexFormula As Range
MatchFormula = WorksheetFunction.Match(Range("Today"), Range("A:A"), 0)
Set IndexFormula = WorksheetFunction.Index(Range("B:B"), MatchFormula, 0)
IndexFormula.Value = Range("G5").Value
更多如果您希望它更快,您可以使用:
Dim MatchFormula As Long
MatchFormula = WorksheetFunction.Match(Range("Today"), Range("A:A"), 0)
Range("B" & MatchFormula).Value = Range("G5").Value
这是有效的,因为列上的匹配返回带有您的值的行,您只需引用列B中的该行就可以无需使用索引。