从Excel合并列中检索值
我正在做一个横跨多列的值hlookup
。 我的数据与此类似:
ABCD --------------------------- 1| Col1 Col2 2| xyzw 3| 4|
在第3行和第4行(A3,B3,C3,D3等)中,我想将公式放在工作簿中的其他位置。 诀窍是,我想要查找“列1”列A和B和“列2”列C和D.“列1”在A1中,但是真正的A1和B1合并。 当我引用A1时,出现“Col1”,但是当我引用B1时,返回值为空。
有任何想法吗?
要访问“Col1”和“Col2”标签,您可以使用以下内容:
= INDEX($ 1:$ 1,1,COLUMN() – MOD(COLUMN() – 1,2))
注意:这假设您正在将相同数量的单元格组合在一起。 如果是三个单元格,则只需将公式中的最后一个数字更改为3,依此类推。
编辑:这是如何工作的:
INDEX($ 1:$ 1,1,x)返回第1行第x列单元格的值。 如果您的表格实际上不在工作表的左上angular,则可以将其更改为包含所有已合并标签的实际范围。 在这种情况下,它将是:INDEX($ A $ 1:$ D $ 1,1,x)
COLUMN()返回当前单元格的列号(列A中的1,列B中的2等)
MOD(COLUMN() – 1,x)返回从当前列到包含正确标签的列的偏移量
这里是另一个解决scheme,当合并的单元格宽度不同时,也可以工作,让我来举个例子:
- 打开一个新的Excel,合并B1,C1,D1
- 在合并单元格中键入Col1
- 在B2中 ,键入公式= B1 ,在C2 = C1中 ,在D2 = D1中
- 你应该看到B2是Col1,而C2,D2是0
- 在B3中 ,input公式= A3 ,复制它
- 右键单击合并的单元格B1:D1 ,select“粘贴特殊 – >公式”
- 您应该看到合并的单元格为0
- 在合并单元格中键入Col1
- 现在你应该看到所有的B2,C2,D2都是Col1 ,也就是说现在你可以引用合并的单元格了,就像你期望的那样。
如果你可以多个合并的单元格,每个不同的宽度,只需粘贴到所有的公式一次。
这个作品背后的原因是由于微软的一个挑剔的deviseselect 。 看起来,当你在公式中粘贴公式时,每个底层单元格都会接收公式(相反,如果你input一个值,只有左上angular的单元格才能得到)所以你可以使用它,并且粘贴一个引用的公式单元格旁边的单元格,然后用所需值覆盖左上angular的单元格,则合并单元格下的每个单元格将具有该值。
我已经在vba中构build了一个简单的函数来解决这个问题:
Function mergedText(rngMergedCell As Range) If rngMergedCell.MergeCells = True Then mergedText = rngMergedCell.MergeArea(1, 1) Else mergedText = rngMergedCell End If End Function
如果单元格是一个合并单元格,该函数将返回合并单元格的第一个元素的值 – 这是合并的单元格存储其值
我意识到我迟到这个线程,但我发现一个非常简单的答案。
例如,如果您的标签跨4列a1:d1合并,并且如果您引用b1,则将返回“”。 为了dynamic地find正确的标签,在你的新表中使用这个fx:
=if(OriginalTable!B1="",ThisTable!A1,OriginalTable!B1)
我相信你会意识到,这将捕捉在E1:H1等范围,当你拖过去。
而已。 希望它可以帮助别人。
单元格B1和D2不包含任何值,只有A1和C1在里面有东西。
因此,您只需确保列A和B中的公式都将A1指定为查找值,并且列C和D中的公式都指向C1以查找值。
e.James提议的更通用的变体是:
={INDEX($A$1:A1, 1, MAX(NOT(ISBLANK($A$1:A1))*COLUMN($A$1:A1)-COLUMN($A$1)+1))}
这取决于这样一个事实,即合并的单元格除了第一个单元格外是空的(除非像Martin提议的那样)。
注意:花括号在那里标记一个数组公式(不要input它们,只需按alt + return来validation单元格中的公式)。