如何在每个单元格中保留合并单元格的值



我创建了一个包含合并单元格的工作表,但合并单元格的值只存储在第一个单元格中。不管怎样,为了在每个单元格中保持相同的值,我需要它作为我使用的公式。谢谢

在Excel 2003中,此宏执行以下操作:

Public Sub UnmergeAndFill()
    With Selection
        If .MergeCells Then
            .MergeCells = False
            Selection.Cells(1, 1).Copy
            ActiveSheet.Paste 'Or PasteSpecial xlPasteFormulasAndNumberFormats
        End If
    End With
End Sub

通过创建宏

  1. Alt-F11Ctrl-R
  2. 或者Alt-F8,键入一个新名称(例如UnmergeAndFill),单击MakeCreate?不知道英文按钮文本

按Alt-F8调用宏,选择它,Run。或者将其映射到关键

无论选择哪一个,都可以使用自定义VBA函数直接给出合并单元格的值。在这种情况下,没有必要重复这些值。

  1. 切换到VBA视图(Alt-F11)
  2. 通过插入>模块创建新模块
  3. 在您的项目中,浏览到新模块(您可能希望通过资源管理器下的(name)属性为其提供一个新名称)
  4. 在模块中复制以下代码(在ThisWorkbook中粘贴代码将不起作用)

代码:

Option Explicit
Function GetMergedValue(location As Range)
    If location.MergeCells = True Then
        GetMergedValue = location.MergeArea(1, 1)
    Else
        GetMergedValue = location
    End If
End Function
  1. 您现在可以在excel中使用该公式

代码:

=GetMergedValue(A1)

其中A1是合并单元格的一部分。

我知道这是一个相当古老的问题,但这是我寻找答案时的第一个地方,接受的答案根本没有帮助。然而,我确实在MrExcel上发现了一个很好的答案,我认为值得放在这个帖子上,以方便其他人在谷歌上搜索答案:
http://www.mrexcel.com/forum/general-excel-discussion-other-questions/487941-data-multiple-cells-within-merged-cell-possible.html

为了避免查找链接,答案非常简单;如果使用Excel Format Painter而不是"合并单元格"合并单元格,则会保留合并单元格的"基础"数据/公式。您只需要在其他地方以正确的格式创建一个临时合并的单元格块,用作format Painter的模板。之后您可以删除它们。不过,需要注意的一点是,像这样的"隐藏"数据可能会成为粗心者的陷阱,因为编辑可见单元格不会改变不可见单元格。

您可以创建一个新列(或行),并在第一个单元格中应用此公式并将其向下拖动:

我想在A列中您已经合并了单元格(例如A1:A3和A5:A8被合并)。

  1. 在列a 之前插入一列

  2. 在A1类型中:

    =B1
    
  3. 在A2中复制以下公式:

    =IF(B2="",A1,B2)
    
  4. 下拉A2 中键入的公式u

在公式中使用新创建的列,使用后可以隐藏它。

您可以不将实际值存储在其他地方吗?而不是合并的单元格?是的,使用公式显示合并单元格上的值。

假设列"A"已合并单元格-将其放在B1中并复制以填充列的其余部分:

=IF(ISBLANK(A1);OFFSET(B1;-1;0);A1)

它检查左边的单元格是否有值,如果有,则返回其值,如果没有,则从上面的单元格中获取值。

请注意,它不适用于空单元格。首先用一些独特的东西填充"A"列中的空单元格,比如"(空)",并在填充"B"列后用"A"one_answers"B"中的空替换回来。

我改进了sehe的宏,可以根据您的选择进行任意数量的合并单元格。

代码:

Public Sub UnmergeAndFillMultiple()
    Dim w As Range, m As Range, n As Range
    For Each w In Selection.Cells
        If w.MergeCells Then
            Set n = w.MergeArea.Cells(1, 1)
            Set m = w.MergeArea
            w.MergeCells = False
            n.Copy
            m.PasteSpecial
        End If
    Next
End Sub

假设A13到A52被合并。a = Cells(13,1)将返回一个值,但是CCD_ 7将不会";空的"
修复:
a = Cells(X,1).MergeArea(1, 1) 'if x=13 through 52 will return value in A13.
不知道我是怎么做到的,但它很管用。

 Dim rowcnt As Long, i As Long
    rowcnt = Cells(Rows.Count, "A").End(xlUp).Row
    For i = rowcnt To 3 Step -1
        With Cells(i, 1)
            If .Value = Cells(i - 1, 1).Value Then
                .Font.ColorIndex = 9
            End If
        End With
    Next i

最新更新