参考上面的组合细胞

时间:2015-02-11 14:25:40

标签: excel excel-2010

我有一张包含大量列的表格,这些列以分层方式排序并合并了单元格:

Example table

我想将这些列(例如:第5行)命名为:MainGroupA-SubGroupA-SubSubGroupA

只需以经典方式引用上面的列就行不通,因为上面的字段不再可用。 (在示例中:字段B1到F1)(即,我无法输入A1&A2&A3 / R[-4]C&R[-3]C&R[-2]C,因为此公式尝试从“隐藏”单元格中读取。)

有没有办法在没有手动工作或需要取消合并父单元格的情况下执行此操作?我可以使用一些外部文本编辑器甚至VBA来执行此操作,但更喜欢“Excel公式解决方案”,因为它会保持更新以适应新的组和列。

要澄清:我希望第5行中的所有列都有像A5中的文本

2 个答案:

答案 0 :(得分:1)

如果你想:

  

MainGroupA-SubGroupA-SubSubGroupA

在A5然后这应该工作:

=A1&"-"&A2&"-"&A3

编辑然后尝试:

 =OFFSET(A1,0,1-MOD(COLUMN(),6))&"-"&OFFSET(A2,0,MOD(COLUMN(),2)-1)&"-"&A3  

虽然这不会给整个行中的A5提供相同的文本。

答案 1 :(得分:0)

pnuts的答案很棒,帮我解决了一些测试用例。然而,为最后一列调整和生成空字符串有点困难,所以我还编写了一个VBA函数来完全按照我的需要进行操作。

打开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从参数中找到包含文本的第一个单元格左侧:(这将是合并单元格本身的文本,如果应用于&#34;隐藏通过合并&#34; cell)

Using checkLeftIfEmpty

还可以组合连接字符串:

Using checkLeftIfEmpty to concatenate a string