【问题标题】:Retrieving Values From Excel Merged Columns从 Excel 合并列中检索值
【发布时间】:2009-01-15 17:22:06
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 如果单元格为空,偏移量是否总是-1?
  • 在真正的电子表格中,有 5 个单元格合并在一起。我需要这五列来引用合并的单元格。有意义吗?

标签: excel formula excel-formula


【解决方案1】:

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

  1. 打开一个新的Excel,合并B1、C1、D1
  2. 在合并的单元格中键入 Col1
  3. B2 中,输入公式 =B1,在 C2 =C1 中,在 D2 =D1
  4. 你应该看到 B2Col1C2, D20
  5. B3中,输入公式=A3,复制它
  6. 右击合并单元格B1:D1,选择“选择性粘贴->公式”
  7. 您应该看到合并的单元格为 0
  8. 在合并的单元格中键入 Col1
  9. 您现在应该看到所有 B2、C2、D2 都是 Col1,即现在您可以按照预期引用合并的单元格。

如果您可以合并多个不同宽度的单元格,只需将公式一次性粘贴到所有单元格。

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

【讨论】:

  • 巧妙的把戏。 TLDR 是您使用粘贴公式将=<cell to my left> 分散到跨度中的每个单元格中,然后在第一个单元格中键入一个值。
  • 需要注意的几个小警告:在跨度内插入新列不会像您预期的那样复制相邻的公式(因此您需要重新应用这些体操)。 2010 年之前的 Excel 版本存在一个错误,即取消合并单元格,然后单击撤消,不会恢复“分散”的公式。
  • 好招!似乎在 Google 表格中不起作用。
【解决方案2】:

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

=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) 返回从当前列到包含正确标签的列的偏移量

【讨论】:

  • 谢谢 :) 我喜欢你的“语法糖”
  • 如果该假设不成立,James Hole 的解决方案会更好,因为它是完全通用的。
  • 这个功能非常漂亮,但由于某种原因,我发现有时它不起作用,而在其他时候它可能会进入以前工作的“状态”,然后停止. (不是很有帮助,但希望其他人也遇到过类似的异常情况?)
【解决方案3】:

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

Function mergedText(rngMergedCell As Range)

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

End Function

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

【讨论】:

    【解决方案4】:

    e.James 提议的一个更通用的变体是:

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

    这取决于合并的单元格除了第一个单元格之外都是空的这一事实(除非您处于像 Martin 的提议这样的情况)。

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

    【讨论】:

      【解决方案5】:

      我意识到我来晚了,但我找到了一个非常简单的答案。

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

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

      我相信您会意识到,当您拖过时,这将捕获 e1:h1 等中的范围。

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

      【讨论】:

      • 这是一个很棒的答案,不需要额外的函数/宏等。
      【解决方案6】:

      单元格 B1 和 D2 不包含任何值,只有 A1 和 C1 里面有东西。

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

      【讨论】:

      • 我想避免这种情况,因为实际上有 132 列 6 个合并单元格 (6 * 22)。我想要一个可复制的公式,以便在公式需要更改时轻松完成。
      【解决方案7】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多