从Excel合并列中检索值

时间:2009-01-15 17:22:06

标签: excel formula excel-formula

我正在针对跨越多列的值执行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时,返回值为空白。

有什么想法吗?

7 个答案:

答案 0 :(得分:15)

这是另一个解决方案,当合并的单元格具有不同的宽度时,它也可以工作,让我用一个例子说明:

  1. 打开一个新的Excel,合并 B1,C1,D1
  2. 在合并的单元格中输入 Col1
  3. B2 中,键入公式 = B1 ,并在 C2 = C1 中,在 D2中 = D1
  4. 你应该看到 B2 Col1 C2,D2 0
  5. B3 中,键入公式 = A3 ,复制
  6. 右键单击合并的单元格 B1:D1 ,选择“粘贴特殊 - >公式”
  7. 您应该会看到合并的单元格 0
  8. 在合并的单元格中输入 Col1
  9. 您现在应该看到所有 B2,C2,D2 都是 Col1 ,即现在您可以按预期引用合并的单元格。
  10. 如果您可以使用不同宽度的多个合并单元格,只需将公式粘贴到所有这些单元格中即可。

    这项工作背后的原因是因为微软的perculier design choice。看起来当你在合并单元格中粘贴公式时,每个底层单元格都会收到公式(相反,如果你输入一个值,只有左上角的单元格得到它)所以你可以利用它来利用它并粘贴一个参考的公式旁边的单元格,然后使用您想要的值覆盖左上角的单元格,然后合并单元格下面的每个单元格都将具有该值。

答案 1 :(得分:10)

要访问“Col1”和“Col2”标签,您可以使用以下内容:

  

= INDEX($ 1:$ 1,1,COLUMN() - MOD(COLUMN() - 1,2))

注意:这假设您将相同数量的单元格组合在一起。如果它是三个单元格,您只需将公式中的最后一个数字更改为3,依此类推。

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

INDEX($ 1:$ 1,1,x)返回第1行第x列中单元格的值。如果您的表实际上不在工作表的左上角,则可以将其更改为包含所有合并标签的实际范围。在这种情况下,它将是: INDEX($ A $ 1:$ D $ 1,1,x)

COLUMN()返回当前单元格的列号(A列中为1,B列中为2,等等)

MOD(COLUMN() - 1,x)返回从当前列到保存正确标签的列的偏移量

答案 2 :(得分:4)

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

Function mergedText(rngMergedCell As Range)

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

End Function

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

答案 3 :(得分:2)

e.James提案的更通用的变体是:

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

这取决于合并的单元格除了第一个单元格之外是空的(除非你是像马丁的建议一样)。

注意:花括号用于标记数组公式(不要输入它们,只需按alt + return以验证单元格中的公式)。

答案 4 :(得分:1)

我意识到我迟到了这个帖子,但我找到了一个非常简单的答案。

例如,如果您的标签在4列a1:d1中合并,并且如果您引用b1,则返回“”。要动态查找正确的标签,请在新表中使用此fx:

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

我相信你会意识到这会在你拖过时捕获e1:h1等的范围。

就是这样。希望它可以帮到某人。

答案 5 :(得分:0)

单元格B1和D2不包含任何值,只有A1和C1内部有一些内容。

因此,您只需要确保A列和B列中的公式都将A1作为查找值引用,并且C列和D列中的公式都引用C1作为查找值。

答案 6 :(得分:0)

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

=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
)