VBA 在单元格中同时显示结果和公式(用于审核目的)

VBA show BOTH results and formula (for audit purposes) in the cell

我的拼图需要帮助。我写了一个工作正常的代码。现在用户不仅希望看到最终结果,还希望看到写在 VBA 中的公式(用于审核目的)以验证结果是否正确。有没有办法在同一个单元格中同时显示结果和公式?

到目前为止我的代码:

Sub Vlookup_Condition_VAT_table()
Dim Rng As Range
Dim i As Long

Application.ScreenUpdating = False

Workbooks("GST_recovery_overclaim.xlsm").Worksheets("MonthlyData_Raw").Activate

'Identify the Destination location to start populating vlookuped values

Range("AK2").Activate

With Worksheets("MonthlyData_Raw").Cells
    Set Rng = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)

    For i = 2 To Rng.Rows.Count

    'populate the destination range with
    'vlookup values from the list vlookup table

        Rng.Cells(i, 37) = Application.VLookup(.Cells(i, 28), Sheets("VAT_apportionment_table_201310").Range("D:G"), 4, False)

    Next
End With

Application.ScreenUpdating = True

End Sub

非常感谢, 拉斯

也许可以在结果中添加带有答案和公式的文本。

Rng.Cells(i, 37) = "Answer: " & Application.VLookup(.Cells(i, 28), Sheets("VAT_apportionment_table_201310").Range("D:G"), 4, False) & ", Formula: = Application.VLookup(.Cells(i, 28), Sheets("VAT_apportionment_table_201310").Range("D:G"), 4, False)"

如果我没理解错的话,您想显示单元格中输入的公式和结果。这个怎么样?

   'Assume that you have a Range("A1") equals to = cos(20)
    Sub GetFormula()
    Dim MyFormula As String
    MyFormula = Replace(Range("A1").Formula, "=", "")
    MsgBox ("Formula is : " & MyFormula _
    & " Result is :" & Range("A1"))
    End Sub

如果您没有查看数千行,您可以尝试以下操作。

而不是使用此行来打印 vlookup 公式的结果:

Rng.Cells(i, 37) = Application.VLookup(.Cells(i, 28), Sheets("VAT_apportionment_table_201310").Range("D:G"), 4, False)

您可以改为将实际公式放入具有此更改的单元格中

Rng.Cells(i, 37).Formula = "=VLOOKUP(" & _
          .Cells(i, 28).Address & "," & _
          "'" & Sheets("VAT_apportionment_table_201310").name & "'!D:G," & _
          "4," & _
          "False)"

----------------根据操作评论更新------------------------ ---

通过 ISERROR 函数添加错误捕获(未测试)

Dim errMsg as String
errMsg = "Not in exception list"
Rng.Cells(i, 37).Formula = "=ISERROR(VLOOKUP(" & _
          .Cells(i, 28).Address & "," & _
          "'" & Sheets("VAT_apportionment_table_201310").name & "'!D:G," & _
          "4," & _
          "False), " & errMsg & ")"

出于几个原因,我为错误消息创建了一个变量。

  1. 以后更容易调试
  2. 像这样处理发送到单元格的公式中的文本可能很棘手。使用变量可以解决棘手问题。