VBA 代码中的 Excel 公式

标签 excel excel-formula vba

所以,在 Sheet1 中我有一些名称的基础,它看起来像这样:

enter image description here

在 Sheet2 中,我正在使用 Sheet1 中的这些名称。我这样做的方式是在 A 列中输入代码值,在 B 列中输入名称,在 C 列中输入姓氏。看起来像这样:

enter image description here

我已经使用公式完成了此操作,将其输入到公式栏中。对于 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 公式引用自身;
  • [] 中的 RC 后面的任何数字都是其自身的偏移量,例如如果您位于单元格 A1 中并使用 R[1]C[1],您将引用单元格 B2
  • 此外,RC 后面的任何数字都是精确的,例如如果您引用 R2C2,无论您位于哪个单元格,也将指向 B2;和

如果您位于单元格 C5 中,则会使事情变得复杂,例如使用 Range("C5").FormulaR1C1 = 并编码如下:

  1. "=RC[-1]" 引用单元格 B5
  2. "=RC1" 引用单元格 A5,更正确的是 $A5
  3. "=R[1]C[-2]" 引用单元格 A6
  4. "=Sum(C[-1]:C5)"=Sum(B:E),更正确的是 =Sum(B:$ E)

关于VBA 代码中的 Excel 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916003/

相关文章:

Excel公式: Count repetition factor in a list (Vlookup/Indirect help)

vba - 为什么我在 VBA 中的 HTML 网站搜索不断返回相同的数据集而不是更新?

vba - 导出到管道分隔的 .txt 文件(不带引号)

arrays - 如何使用 Evaluate 方法计算数组公式

excel - OleDb - 从 Excel 读取缓慢

python - Openpyxl 不会以只读模式关闭 Excel 工作簿

excel - Outlook VBA 调用 Excel 宏

matlab - 合并具有连接日期的行

excel - 在一个单元格中获取多个值并使其可以运行数据透视表

excel - 在主监视器上显示 Excel