参考上面的组合单元格
Reference combined cell above
我有一个 sheet,其中有很多列以分层方式排序,并合并了单元格:
我想这样命名这些列(例如:第 5 行):MainGroupA-SubGroupA-SubSubGroupA
。
以经典方式简单地引用上面的列将不起作用,因为上面的字段不再可用。 (在示例中:字段 B1 到 F1)(即我无法输入 A1&A2&A3
/ R[-4]C&R[-3]C&R[-2]C
,因为此公式试图从 "hidden" 单元格中读取)。
有没有无需手动操作或不需要取消合并父单元格的方法来执行此操作?我也许可以使用一些外部文本编辑器甚至 VBA 来做到这一点,但我更喜欢 "Excel formula solution",因为它会为新的组和列保持更新。
澄清一下:我希望第 5 行中的所有列都具有 A5 中的文本
如果你想:
MainGroupA-SubGroupA-SubSubGroupA
在 A5 中,这应该有效:
=A1&"-"&A2&"-"&A3
编辑 然后尝试:
=OFFSET(A1,0,1-MOD(COLUMN(),6))&"-"&OFFSET(A2,0,MOD(COLUMN(),2)-1)&"-"&A3
虽然这不会在整行中给出与 A5 中相同的文本。
pnuts 的回答很好,帮我解决了一些测试用例。然而,适应和为最后一列生成空字符串有点困难,所以我还写了一个 VBA-Function 来完全满足我的需要。
打开 VBA 编辑器 (ALT + F11) 并在新模块中输入以下代码:
Public Function checkLeftIfEmpty(start As range) As String
If start.Cells.Count > 1 Then
checkLeftIfEmpty = "Only a single cell allowed as parameter"
Exit Function
End If
Dim currentRange As range
Set currentRange = start
Do While currentRange.Column >= 1
If currentRange.Value <> "" Then
checkLeftIfEmpty = currentRange.Value
Exit Function
Else
Set currentRange = currentRange.Offset(0, -1)
End If
Loop
End Function
您现在可以使用函数 checkLeftIfEmpty
查找参数左侧第一个包含文本的单元格:(这将是合并单元格本身的文本,如果应用于 "hidden by merge"单元格)
还可以组合连接字符串:
我有一个 sheet,其中有很多列以分层方式排序,并合并了单元格:
我想这样命名这些列(例如:第 5 行):MainGroupA-SubGroupA-SubSubGroupA
。
以经典方式简单地引用上面的列将不起作用,因为上面的字段不再可用。 (在示例中:字段 B1 到 F1)(即我无法输入 A1&A2&A3
/ R[-4]C&R[-3]C&R[-2]C
,因为此公式试图从 "hidden" 单元格中读取)。
有没有无需手动操作或不需要取消合并父单元格的方法来执行此操作?我也许可以使用一些外部文本编辑器甚至 VBA 来做到这一点,但我更喜欢 "Excel formula solution",因为它会为新的组和列保持更新。
澄清一下:我希望第 5 行中的所有列都具有 A5 中的文本
如果你想:
MainGroupA-SubGroupA-SubSubGroupA
在 A5 中,这应该有效:
=A1&"-"&A2&"-"&A3
编辑 然后尝试:
=OFFSET(A1,0,1-MOD(COLUMN(),6))&"-"&OFFSET(A2,0,MOD(COLUMN(),2)-1)&"-"&A3
虽然这不会在整行中给出与 A5 中相同的文本。
pnuts 的回答很好,帮我解决了一些测试用例。然而,适应和为最后一列生成空字符串有点困难,所以我还写了一个 VBA-Function 来完全满足我的需要。
打开 VBA 编辑器 (ALT + F11) 并在新模块中输入以下代码:
Public Function checkLeftIfEmpty(start As range) As String
If start.Cells.Count > 1 Then
checkLeftIfEmpty = "Only a single cell allowed as parameter"
Exit Function
End If
Dim currentRange As range
Set currentRange = start
Do While currentRange.Column >= 1
If currentRange.Value <> "" Then
checkLeftIfEmpty = currentRange.Value
Exit Function
Else
Set currentRange = currentRange.Offset(0, -1)
End If
Loop
End Function
您现在可以使用函数 checkLeftIfEmpty
查找参数左侧第一个包含文本的单元格:(这将是合并单元格本身的文本,如果应用于 "hidden by merge"单元格)
还可以组合连接字符串: