【问题标题】:Excel Compare two columns for matches or differences in the same row based on the headerExcel 根据标题比较同一行中两列的匹配或差异
【发布时间】:2018-08-14 02:02:39
【问题描述】:

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

这是我用过的公式:

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

【问题讨论】:

  • 您的第二列是 Base Country 还是 Work Geography
  • 对不起,我匹配列 A 和列 B
  • =IF(Work Geography,A2) 的目的是什么?除非您没有布尔值,否则它将引发错误。 Work GeographyWork Country 是命名范围吗?否则它也会抛出错误。
  • #NAME 错误会在函数未定义或拼写错误时出现。在上面的屏幕截图中,我可以看到“IFS”是 excel 中不可用的功能,这就是您收到 #NAME 错误的原因。
  • 回去重读我的评论,然后重读你的叙述,最后好好看看你提供的图片,并理解这一切。

标签: excel excel-formula excel-2013 vba


【解决方案1】:

这个错误可能有多种原因:

  • 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

【讨论】:

  • 我同意 OP 的查询存在一些问题(正如您所概述的),但您提供的答案并不是 OP 查询的解决方案。它是对可能的分析(很可能) OP 查询的问题。尽管我同意您概述的内容,但我不认为应该将其作为答案提供
  • @Zac 我应该在最后添加公式以改进我的答案吗?当我阅读问题标题和问题本身时,我有点迷茫,因为它们都涉及不同的问题(列比较和#NAME?计算)。我应该回答哪一个?
  • 你好 AntiDrondert,我推翻了我的投票,但我应该感谢你提供这些有用的信息。
  • 据我了解,OP 的问题有两个方面:1. OP 的公式存在问题。 2. 列并不总是在“同一个地方”。我怀疑答案可能是 VBA 和公式的组合。我认为您现在拥有的公式可以使用,但需要一些 VBA 才能在第一个实例中找到列,然后使用 VBA 来实现您的公式
  • 您好 AntiDrondert,非常感谢您对我的帮助,此代码完美运行,我永远不会忘记您。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多