所以,在 Sheet1 中我有一些名称的基础,它看起来像这样:
在 Sheet2 中,我正在使用 Sheet1 中的这些名称。我这样做的方式是在 A 列中输入代码值,在 B 列中输入名称,在 C 列中输入姓氏。看起来像这样:
我已经使用公式完成了此操作,将其输入到公式栏中。对于 A 列(或姓名),我使用了以下公式:=IFERROR(VLOOKUP(A2;Sheet1!A:C;2;FALSE);"")
对于 B 列(或姓氏) )我用过这个:=IFERROR(VLOOKUP(A2;Sheet1!A:C;3;FALSE);"")
。我已将这些公式拖到第 20 行,效果非常好。
现在,我想做的是将这些公式放入 Excel VBA 代码中,并使它们适用于指定的范围。我刚刚开始使用VBA,我不知道如何在其中执行此操作,尝试了一些方法但不起作用,...,到目前为止我已经做到了。我对 Excel/宏/VBA 很陌生,因此我们将不胜感激。
最佳答案
如果您在 sheet2
中输入 Code
值并突出显示它们,然后运行此宏,则以下代码将起作用:
Selection.Offset(0, 1).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Sheet1!C[-1]:C,2,FALSE),"""")"
Selection.Offset(0, 2).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],Sheet1!C[-2]:C,3,FALSE),"""")"
Selection.Offset(0, 1).Value = Selection.Offset(0, 1).Value
Selection.Offset(0, 2).Value = Selection.Offset(0, 2).Value
编辑:如果您想在键入时更新值,请使用(感谢@PeterAlbert 的额外优化!):
Private Sub Worksheet_Change(ByVal Target As Range)
'end if the user made a change to more than one cell at once?
If Target.Count > 1 Then End
'stop system activating worksheet_change event while changing the sheet
Application.EnableEvents = False
'continue if column 1(A) was updated
'and
'dont continue if header or row 1 was changed
If Target.Column = 1 And Target.Row <> 1 Then
With Target.Offset(0, 1) 'alter the next cell, current column +1 (column B)
'RC1 = current row and column 1(A) e.g. if A2 was edited, RC1 = $B2
'C1:C2 = $A:$B
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,Sheet1!C1:C2,2,FALSE),"""")"
.Value = .Value 'store value
End With
With Target.Offset(0, 2) 'alter the next cell, current column +2 (column C)
'C1:C3 = $A:$C
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,Sheet1!C1:C3,3,FALSE),"""")"
.Value = .Value 'store value
End With
End If
Application.EnableEvents = True 'reset system events
End Sub
RC说明:
在引用当前单元格的单元格时,FormulaR1C1
公式类型非常有用。有一些规则需要记住:
R
代表行,C
代表列,其后面的整数(如果有)定义行或列;- 作为基础,
RC
公式引用自身; []
中的R
或C
后面的任何数字都是其自身的偏移量,例如如果您位于单元格A1
中并使用R[1]C[1]
,您将引用单元格B2
;- 此外,
R
和C
后面的任何数字都是精确的,例如如果您引用R2C2
,无论您位于哪个单元格,也将指向B2
;和
如果您位于单元格 C5
中,则会使事情变得复杂,例如使用 Range("C5").FormulaR1C1 =
并编码如下:
"=RC[-1]"
引用单元格B5
"=RC1"
引用单元格A5
,更正确的是$A5
"=R[1]C[-2]"
引用单元格A6
"=Sum(C[-1]:C5)"
是=Sum(B:E)
,更正确的是=Sum(B:$ E)
关于VBA 代码中的 Excel 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916003/