Excel 根据 header 比较同一行中两列的匹配或差异
Excel Compare two columns for matches or differences in the same row based on the header
Sheet1
上有 45 列
每次列都不会出现在同一个地方,在 Sheet1
中有两个重要的列,即 Work Country 和 Base Country,我在这里检查两列的值是相同还是不同:如果它们相同,则 Status 列中的输出应该是 Local, Expat 否则。
但是当我尝试计算我的公式时,结果是 #Name?
你能帮我解决这个问题吗?我附上了我的工作表的屏幕截图。
我的 Excel 文件也包含 VBA 模块,所以我可以使用公式或 VBA 代码。
这是我使用的公式:
=IF(Work Geography,A2)=IFS(Work Country,B2)
此错误可能有多种原因:
- IFS 函数未在 MS Office Professional Plus 2013 中定义,您正在使用的函数在您的 Excel.[=34= 版本中未启用]
- 您的公式引用了一个未在 Excel 中定义的名称,您显然使用的是命名范围(
Work Geography
和 Work Country
) 但你可能会忘记定义它们。
- 有错别字,要么是
Work Geography
要么是Work Country
,或者两者都是,因为名字不能包含space个字符.
- 逻辑有缺陷,对非布尔值使用
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
Sheet1
上有 45 列
每次列都不会出现在同一个地方,在 Sheet1
中有两个重要的列,即 Work Country 和 Base Country,我在这里检查两列的值是相同还是不同:如果它们相同,则 Status 列中的输出应该是 Local, Expat 否则。
但是当我尝试计算我的公式时,结果是 #Name?
你能帮我解决这个问题吗?我附上了我的工作表的屏幕截图。
我的 Excel 文件也包含 VBA 模块,所以我可以使用公式或 VBA 代码。
这是我使用的公式:
=IF(Work Geography,A2)=IFS(Work Country,B2)
此错误可能有多种原因:
- IFS 函数未在 MS Office Professional Plus 2013 中定义,您正在使用的函数在您的 Excel.[=34= 版本中未启用]
- 您的公式引用了一个未在 Excel 中定义的名称,您显然使用的是命名范围(
Work Geography
和Work Country
) 但你可能会忘记定义它们。 - 有错别字,要么是
Work Geography
要么是Work Country
,或者两者都是,因为名字不能包含space个字符. - 逻辑有缺陷,对非布尔值使用
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