如果从特定列中提取数据,则显示列 header 值
Display column header value if data is being pulled from specific column
我的工作簿中有两张纸 – 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
中,我从 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代码。
- 转到 VBA 代码编辑器 (ALT+F11)
- 插入新模块(菜单->插入->模块)
复制粘贴下面的代码
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
现在转到 Sheet2 并将公式插入 B2 单元格
=GetHeader(A2)
它 returns MARK 或 LUCY 取决于 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 的行。
它的潜在优势是您可以将其扩展到两列以上。
我的工作簿中有两张纸 – 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
中,我从 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代码。
- 转到 VBA 代码编辑器 (ALT+F11)
- 插入新模块(菜单->插入->模块)
复制粘贴下面的代码
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
现在转到 Sheet2 并将公式插入 B2 单元格
=GetHeader(A2)
它 returns MARK 或 LUCY 取决于 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 的行。
它的潜在优势是您可以将其扩展到两列以上。