Excel根据标题比较两列以查找同一行中的匹配或差异

问题描述 投票:-2回答:1

Sheet1上有45列 每次列不在同一个地方时,在Sheet1中有两个重要的列是Work Country和Base Country,我在这里检查两列中的值是相同还是不同:如果它们相同,则输出为列状态应为Local,否则为Expat。 但是当我尝试计算我的公式时,结果是#Name? 你能帮我解决这个问题吗?我附上了工作表的屏幕截图。 我的Excel文件也包含VBA模块,所以我可以使用公式或VBA代码。

这是我用过的公式:

=IF(Work Geography,A2)=IFS(Work Country,B2)

enter image description here

excel excel-vba excel-formula excel-2013 vba
1个回答
2
投票

There could be multiple reasons for this error:

  • 在MS Office Professional Plus 2013中未定义IFS功能,您使用的是在您的Excel版本中未启用的功能。
  • 您的公式引用了一个未在Excel中定义的名称,您显然使用命名范围(Work GeographyWork Country),但您可能忘记定义它们。
  • 有一个拼写错误,它可能在Work GeographyWork Country或两者,因为名称不能容纳空格字符。
  • 逻辑是有缺陷的,使用IF函数对非布尔值的值可能导致意外的结果。

一级方程式将使用:

=IF(A2=B2, "Local", "Expat")

感谢@Zac的澄清。 这就是我想出的:

Option Explicit
Sub CheckCountries()
    Dim lRow As Long
    Dim MySheet As Worksheet
    Dim rngGeo As Range, rngCountry As Range, rngStatus As Range
    Dim rngData As Range

    '    Define Sheet1
    Set MySheet = ThisWorkbook.Worksheets("Sheet1")

    '    I assumed headers are constantly on the first row
    '    Find cells with needed headers
    Set rngGeo = MySheet.Rows(1).Find("Work Geography", , xlValues, xlWhole, xlByColumns)
    Set rngCountry = MySheet.Rows(1).Find("Work Country", , xlValues, xlWhole, xlByColumns)
    Set rngStatus = MySheet.Rows(1).Find("Status", , xlValues, xlWhole, xlByColumns)

    '    Your big table, excluding headers
    With MySheet.Range("A1").CurrentRegion
        Set rngData = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
    End With

    '    Define needed columns
    Set rngGeo = Intersect(rngData, rngGeo.EntireColumn)
    Set rngCountry = Intersect(rngData, rngCountry.EntireColumn)
    Set rngStatus = Intersect(rngData, rngStatus.EntireColumn)

    '    Calculate
    rngStatus.Value _
        = Evaluate("=IF(" & rngGeo.Address & "=" & rngCountry.Address & ", " & _
                        """Local"", " & _
                        """Expat"")")
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.