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

时间:2015-01-06 11:49:23

标签: excel vba excel-vba if-statement excel-formula

我的工作簿中有两张 - Sheet1 Sheet2

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中,我从第2行的Sheet1中的任何单元格中引入引用。 因此,以下示例将引入值100:

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

[Sheet2]

Sheet2-B2中我试图包含一个IF语句:

单元格Sheet2-A2中的IF值从Sheet1-ColumnA拉出,然后在单元格Sheet2-B2中打印 MARK 值。
单元格Sheet2-A3中的IF值从Sheet1-ColumnB拉出,然后在单元格Sheet2-B3中打印 LUCY 值。
单元Sheet2-A4中的IF值从Sheet1-ColumnA拉出,然后在单元格Sheet2-B4中打印 MARK 值。

等等,结果看起来像这样:

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

[Sheet2]

我不确定VLOOKUP是否是正确的方法,所以任何帮助将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:0)

如果没有额外的专栏,就无法实现这一目标。

<强> Sheet 2中

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

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

  1. 转到VBA代码编辑器(ALT + F11)
  2. 插入新模块(菜单 - &gt;插入 - &gt;模块)
  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)
    
  5. 它会返回 MARK LUCY ,具体取决于 A2 单元格中公式所引用的单元格。

答案 1 :(得分:0)

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

  • MATCH将检查A2是否出现在&#34; Mark&#34; s值中。 0 in&#34; type&#34;指定完全匹配。如果未找到则返回错误。
  • 如果ISERROR返回错误,则
  • MATCH返回true - 即。当A2中的值属于露西时。
  • IF返回&#34; Mark&#34; if false(MATCH不是错误)和&#34; LUCY&#34;如果匹配错误。

答案 2 :(得分:0)

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

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

该公式的作用:它由一个&#34; if&#34;检查两个中的哪一个匹配&#34;公式返回不等于零的东西。这两个匹配&#34;公式如下:

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

两者都检查单元格A1(在sheet2中)中的数字是否位于sheet1中的列A或B(有限范围)中。他们足够地返回第1列的标题或第2列的标题。

答案 3 :(得分:0)

如果您使用的是Excel 2013,则可以使用FORMULATEXT直接检查A2中的公式。

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

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

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

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