从Excel合并列中检索值

tpgth1q7  于 2023-05-08  发布在  其他
关注(0)|答案(7)|浏览(275)

我正在对一个跨越多列的值执行hlookup。我的数据与此类似:

A      B      C      D 
  ---------------------------  
1|       Col1          Col2
2|     x      y      z      w
3|
4|

在第3行和第4行(A3、B3、C3、D3等)中,我想将执行hlookup的公式放在工作簿的其他位置。诀窍是,我希望它在A和B列中查找“Col1”,在C和D列中查找“Col2”。“Col1”在A1中,但实际上是A1和B1合并。当我引用A1时,出现“Col1”,但当我引用B1时,返回值为空。
有什么想法吗

i86rm4rw

i86rm4rw1#

这里有另一个解决方案,当合并的单元格具有不同的宽度时也可以工作,让我用一个例子来说明:
1.打开新的Excel,合并B1, C1, D1
1.在合并单元格中键入Col 1
1.在B2中,键入公式**=B1**,在C2中,键入公式**=C1**,在D2中,键入公式**=D1**
1.您应该看到B2Col 1,而C2, D20
1.在B3中,键入公式**=A3**,复制它
1.右键单击合并单元格B1:D1,选择“粘贴特殊->公式”
1.您应该会看到合并后的单元格为0
1.在合并单元格中键入Col 1
1.您现在应该看到所有B2, C2, D2都是Col 1,即现在你可以引用合并的单元格了。
如果您可以合并多个单元格,每个单元格的宽度不同,只需将公式一次性粘贴到所有单元格。
这背后的原因是因为微软的perculier design choice。看起来当你在合并的单元格中粘贴公式时,每个基础单元格都会收到公式(相反,如果你输入一个值,只有左上角的单元格会收到它),所以你可以利用它来粘贴一个引用它旁边的单元格的公式,然后用你想要的值覆盖左上角的单元格,那么合并单元格下面的每个单元格都会有这个值。

i2byvkas

i2byvkas2#

要访问“Col 1”和“Col 2”标签,您可以使用以下命令:
=INDEX($1:$1,1,COLUMN()-MOD(COLUMN()-1,2))
注意:这假设您将相同数量的单元格分组在一起。如果它是三个单元格,您只需将公式中的最后一个数字更改为3,依此类推。

**编辑:**以下是它的工作原理:

INDEX($1:$1,1,x)返回第1行第x列的单元格的值。如果您的表实际上并不位于工作表的左上角,则可以将其更改为包含所有合并标签的实际区域。在这种情况下,它将是:指数($A$1:$D$1,1,x)
COLUMN()返回当前单元格的列号(A列为1,B列为2等)
MOD(COLUMN()-1,x)返回从当前列到包含正确标签的列的偏移量

vd2z7a6w

vd2z7a6w3#

我已经在VBA中构建了一个简单的函数来解决这个问题:

Function mergedText(rngMergedCell As Range)

    If rngMergedCell.MergeCells = True Then
        mergedText = rngMergedCell.MergeArea(1, 1)
    Else
        mergedText = rngMergedCell
    End If

End Function

如果单元格是合并单元格,则函数将返回合并单元格的第一个元素中的值-这是合并单元格存储其值的位置

of1yzvn4

of1yzvn44#

一个更通用的变种e.詹姆斯的建议是:

={INDEX($A$1:A1, 1, MAX(NOT(ISBLANK($A$1:A1))*COLUMN($A$1:A1)-COLUMN($A$1)+1))}

这依赖于这样一个事实,即除了第一个单元格之外,合并的单元格都是空的(除非您遇到类似Martin的提案的情况)。
注意:花括号是用来标记数组公式的(不要输入它们,只需按alt+return来验证单元格中的公式)。

0mkxixxg

0mkxixxg5#

我意识到我对这个帖子已经晚了,但我找到了一个非常简单的答案。
例如,如果标签跨4列a1:d1合并,并且引用b1,则将返回“"。为了动态地找到正确的标签,请在新表中使用此fx:

=if(OriginalTable!B1="",ThisTable!A1,OriginalTable!B1)

我相信你会意识到,这将捕获范围在e1:h1等,因为你拖动。
就这样。希望能帮到大家。

2w2cym1i

2w2cym1i6#

有了新的动态参考,现在有了更多的选择。下面是我编写的一个通用函数,它将搜索单元格的左侧并返回第一个值。它没有优化,但它为我做了工作。

=LET(
  TargetCell, A1,
  TargetRow, ROW(TargetCell),
  TargetCol, COLUMN(TargetCell),
  RowReference, INDIRECT(TargetRow & ":" & TargetRow),
  RowValues, TRANSPOSE(FILTER(RowReference,ISBLANK(RowReference)=FALSE)),
  RowValueColumns, MATCH(RowValues, RowReference,0),
  ReturnColumn, MAX(FILTER(RowValueColumns,RowValueColumns<=TargetCol)),
  Return, INDIRECT(ADDRESS(TargetRow,ReturnColumn)),

  Return
)
3bygqnnd

3bygqnnd7#

单元格B1和D2不包含任何值,只有A1和C1中有值。
因此,您只需确保列A和B中的公式都引用A1作为查找值,列C和D中的公式都引用C1作为查找值。

相关问题