将索引匹配项转换为另一张表转换为VBA代码

时间:2019-02-05 22:51:53

标签: excel vba excel-2016

我正在尝试将索引匹配公式转换为VBA代码。我想这样做是因为包含索引匹配公式的单元格不会总是具有相同的行值,因此我不能简单地将公式放在特定的行中。该公式当前在H列中,因此,我尝试使用VBA代码来匹配另一张工作表中的值,并根据索引匹配条件在正确的行中填充H列。

这是我的公式:

=IFERROR(INDEX(Comments!$K$2:$K$76,MATCH(C8,Comments!$B$2:$B$76,0)),"COMMENT REQUIRED")

最初,我被告知要适应VBA代码中的V-Lookup,因为这样做会更容易,但我一直未能成功完成。我尝试过的VBA代码如下:

        Dim h
        With DestinationSheet.Rows(DestinationRow)
        h = Application.VLookup(.Cells(3).Value, Sheets("Comments").Range("$A$2:$C$100"), 3, False)
        .Cells(8).Value = IIf(IsError(h), "COMMENT REQUIRED", h)
        .Cells(8).Font.Color = IIf(IsError(h), RGB(255, 0, 0), h)
        .Cells(8).Font.Bold = IIf(IsError(h), True, h)
        End With

1 个答案:

答案 0 :(得分:1)

您的主要问题是这两行:

    .Cells(8).Font.Color = IIf(IsError(h), RGB(255, 0, 0), h)
    .Cells(8).Font.Bold = IIf(IsError(h), True, h)

h返回错误或值,但是您尝试将其用作RGB颜色和布尔值。 h不能同时是所有三件事。

之前捕获错误并使用标准IF,然后

Dim DestinationSheet As Worksheet
Set DestinationSheet = Worksheets("Sheet1") 'change to your sheet

Dim cmmtsSheet As Worksheet
Set cmmtsSheet = Worksheets("Comments")

Dim DestinationRow As Long
DestinationRow = 3

With DestinationSheet

    Dim mtchRow As Long
    On Error Resume Next
        mtchRow = Application.Match(.Cells(DestinationRow, 3), cmmtsSheet.Range("A:A"), 0)
    On Error GoTo 0

    With .Cells(DestinationRow, 8)
        If mtchRow > 0 Then
            .Value = cmmtsSheet.Cells(mtchRow, 3)
            .Font.Color = RGB(255, 255, 255)
            .Font.Bold = False
        Else
            .Value = "Comment Required"
            .Font.Color = RGB(255, 0, 0)
            .Font.Bold = True
        End If
    End With
End With