Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel根据标题比较同一行中两列的匹配或差异_Excel_Excel Formula_Excel 2013_Vba - Fatal编程技术网

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

Excel根据标题比较同一行中两列的匹配或差异,excel,excel-formula,excel-2013,vba,Excel,Excel Formula,Excel 2013,Vba,表1上有45列 每次列不在同一位置时,在表1中有两个重要的列,即工作国家和基准国家,在这两个列中,我检查两个列的值是否相同或不同:如果相同,则列状态中的输出应为本地,否则,请移居国外。 但当我尝试计算公式时,结果是#Name? 你能帮我解决这个问题吗?我已附上工作表的屏幕截图。 我的Excel文件也包含VBA模块,所以我对公式或VBA代码都没有意见 这是我使用的公式: =IF(Work Geography,A2)=IFS(Work Country,B2) 此错误可能有多种原因: 如果MS O

表1上有45列

每次列不在同一位置时,在
表1
中有两个重要的列,即工作国家基准国家,在这两个列中,我检查两个列的值是否相同或不同:如果相同,则列状态中的输出应为本地,否则,请移居国外。
但当我尝试计算公式时,结果是#Name?
你能帮我解决这个问题吗?我已附上工作表的屏幕截图。
我的Excel文件也包含VBA模块,所以我对公式或VBA代码都没有意见

这是我使用的公式:

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

此错误可能有多种原因:
  • 如果MS Office Professional Plus 2013中未定义S功能,则您使用的是Excel版本中未启用的功能
  • 您的公式引用了Excel中未定义的名称,显然您使用的是命名范围(
    工作地域
    工作国家
    ),但您可能会忘记定义它们
  • 有一个输入错误,它要么在
    工作地域
    中,要么在
    工作国家
    中,要么在两者中,因为名称不能包含空格字符
  • 逻辑有缺陷,对非布尔值使用
    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

您的第二列是以国家或工作地区为基础的吗?很抱歉,我对A列和B列进行了匹配。
=IF(工作地区,A2)
?它将抛出错误,除非您没有布尔值。
工作地域
工作国家
是否命名范围?否则也会抛出错误。#函数未定义或拼写错误时会出现名称错误。在上面的屏幕截图中,我可以看到“IFS”是excel中不可用的函数,这就是为什么您会出现#名称错误。请返回并重新阅读我的评论,然后重新阅读您的叙述,最后仔细查看您提供的图像并对其进行理解。我同意OP的查询有一些问题(如您所述)但你提供的答案并不是OP问题的解决方案。。这是对OP查询中可能(最有可能)问题的分析。虽然我同意你概述的内容,但我不认为它应该作为一个项目提供answer@Zac我是否应该在结尾添加公式以改进我的答案?当我阅读问题标题和问题本身时,我有点不知所措,因为它们都涉及不同的问题(列比较和#NAME?计算)。我应该回答哪一个问题?你好,安德隆德,我颠倒了我的投票,但我应该感谢你提供了这些有用的信息。据我所知,OP的问题有两个方面:1。OP的公式有问题。2.这些列并不总是在“同一个位置”。我怀疑答案可能是VBA和公式的组合。我想你现在的公式可以用了,但是首先需要一些VBA来查找列,然后使用VBA来实现你的公式Hello AntiDrondert,非常感谢你对我的帮助,这段代码非常有效,我永远不会忘记你。再次感谢你。