如果从特定列中提取数据,则显示列 header 值

Display column header value if data is being pulled from specific column

我的工作簿中有两张纸 – Sheet1Sheet2.

Sheet1 有两列和六行。

    A        B
1 [MARK]    [LUCY]
2 100       120
3 200       220
4 300       320
5 400       420
6 500       520

[Sheet1]

Sheet2 有两列,我试图使用 IF 语句和 VLOOKUP 从 Sheet1 中提取数据。

在单元格 Sheet2-A2 中,我从 Sheet1 中第 2 行向下的任何单元格中提取引用。 所以下面的例子会拉取 100 的值:

    A                 B
1 [VALUE]           [NAME]
2 =Sheet1!A2
3 
4 
5 

[Sheet2]

Sheet2-B2 中,我试图包含一个 IF 语句,上面写着:

如果单元格 Sheet2-A2 中的值是从 Sheet1-ColumnA 提取的,则在单元格 Sheet2-B2.[=46= 中打印值 MARK ] 如果单元格 Sheet2-A3 中的值来自 Sheet1-ColumnB,则在单元格 Sheet2-B3.
中打印值 LUCY 如果单元格 Sheet2-A4 中的值来自 Sheet1-ColumnA,则在单元格 Sheet2-B4.
[=46= 中打印值 MARK ] 依此类推,结果如下所示:

    A           B
1 [VALUE]     [NAME]
2 100          MARK
3 220          LUCY
4 400          MARK
5 520          LUCY

[Sheet2]

我不确定 VLOOKUP 是否是执行此操作的正确方法,因此我们将不胜感激。谢谢!

没有额外的专栏就无法实现。

Sheet2

Row    A             B          C
1      Value         ReferTo    Name
2       =Sheet1!A2   Sheet1!A2  =INDIRECT(MID(B2,1,SEARCH("!",B2,1)+1) & "" )

如果你想在没有额外列的情况下实现这一点,你需要添加一段VBA代码。

  1. 转到 VBA 代码编辑器 (ALT+F11)
  2. 插入新模块(菜单->插入->模块)
  3. 复制粘贴下面的代码

    Option Explicit
    
    Function GetHeader(ByVal rng As Range, Optional HeaderRow As Integer = 1) As Variant
    Dim i As Integer
    
        'get referenced row
        i = Range(rng.Formula).Row
        i = (i - HeaderRow) * -1
    
        GetHeader = Range(rng.Formula).Offset(RowOffset:=i).Value
    
    End Function
    
  4. 现在转到 Sheet2 并将公式插入 B2 单元格

    =GetHeader(A2)
    

它 returns MARKLUCY 取决于 A2[= 中的公式引用的单元格40=] 单元格.

Sheet2 B2 的公式:=IF(ISERROR(MATCH(A2,Sheet1!$A:$A,0)),Sheet1!$B,Sheet1!$A)

  • MATCH 将检查 A2 是否出现在 "Mark" 的值中。 "type" 中的 0 指定完全匹配。如果没有找到它 returns 一个错误。
  • ISERROR returns 如果 MATCH returns 出现错误则为真 - 即。当 A2 中的值属于 Lucy 时。
  • IF returns "Mark" 如果为假(MATCH 不是错误)并且 "LUCY" 如果 Match 是错误的。

我不太确定我是否正确理解了问题的根源,但也许这会解决它 - 如果您想要一个公式来告诉您列的 header 给定数字所在的位置。

        =IF(IF(ISERROR(MATCH(A1;Sheet1!$A:$A;0));0;Sheet1!$A)=0;IF(ISERROR(MATCH(A1;Sheet1!$B:$B;0));0;Sheet1!$B);IF(ISERROR(MATCH(A1;Sheet1!$A:$A;0));0;Sheet1!$A))

公式的作用:它由一个 "if" 语句组成,该语句检查两个 "match" 公式中的哪一个 return 不等于零。这两个"match"公式如下:

   IF(ISERROR(MATCH(A1;Sheet1!$A:$A;0));0;Sheet1!$A)
   IF(ISERROR(MATCH(A1;Sheet1!$B:$C;0));0;Sheet1!$B)

两者都检查单元格 A1(在工作表 2 中)中的数字是否位于工作表 1 中的 A 列或 B 列(有限范围)中。充分地,他们 return 第 1 列的 header 或第 2 列的 header。

如果你有Excel2013,你可以直接用FORMULATEXT检查A2中的公式。

不幸的是我没有得到它,但这是另一个建议:-

=INDEX(Sheet1!$A:$B,SUMPRODUCT(COLUMN(Sheet1!$A:$B)*(Sheet1!$A:$B=A2)))

这会在范围内查找,找到匹配值在哪一列,并用它来索引包含 MARK 和 LUCY 的行。

它的潜在优势是您可以将其扩展到两列以上。