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

11

我创建了一个带有合并单元格的表格,但是合并单元格中的值只存储在第一个单元格中。是否有任何方法可以让每个单元格保留相同的值?因为我需要用到这个公式。谢谢!


OpenOffice、Gnumeric、Excel、CSV、Lotus、KOffice、Google Docs、Mac:Numbers、Tables、Mesa...? - sehe
也许问题不太清楚,所以我在表格中合并了3个单元格,但合并后的单元格的值只存在于第一个单元格中。我希望每个单元格都具有相同的值,但显示为一个合并的单元格。 - Kinshuk
1
你的表格?你的纸张?干细胞?你没有告诉我们你是否在使用电脑,如果是的话,使用的是哪一个。接下来我们需要知道你正在使用的应用程序。 - sehe
好的,我在使用微软Excel2007... - Kinshuk
9个回答

7
在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-F11, Ctrl-R, 菜单 插入/模块, 粘贴代码;
  2. 或者:按下 Alt-F8, 输入一个新名称(例如 UnmergeAndFill),点击 MakeCreate 按钮(不知道英文按钮文本?

通过按下 Alt-F8 调用宏,选择它,然后点击 Run。或者将其映射到一个键。


1
这会将它们解除合并...实际上我并不想解除合并,我希望它们保持合并状态,但每个单元格应该有合并单元格中可见的内容... - Kinshuk
2
@Kinshuk:在这种情况下,你就没戏了。Excel的应用程序对象模型明确禁止这样做。 - sehe
1
停止使用合并单元格(您可以通过保护单元格、隐藏单元格、保护工作表来实现类似的效果;接下来,禁用网格线的显示,并使用单元格边框来显示所需的网格)。 - sehe
下面@Knackiedoo的不同答案似乎完全实现了Kinshuk最初想要的。如果有人能详细说明这与Excel的应用程序对象模型是如何一致的,那将会很有趣。 - Clang

6
您可以使用自定义的VBA函数,直接给出合并单元格的值,无论您选择哪个单元格。在这种情况下,不需要复制值。
  1. 切换到VBA视图(Alt-F11)
  2. 通过插入>模块创建一个新模块
  3. 在您的项目中,浏览到新模块(您可能想通过资源管理器下方的(名称)属性为其命名)
  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是合并单元格的一部分。


2
这绝对是最简单、最高效的做法。 - Iorek

5
我知道这是一个比较老的问题,但这是我在寻找答案时首先遇到的地方,而且被接受的答案一点也没有帮助。不过,我在MrExcel上发现了一个非常好的答案,并且认为值得将其放在这个帖子中,以便于任何搜索答案的人受益:
http://www.mrexcel.com/forum/general-excel-discussion-other-questions/487941-data-multiple-cells-within-merged-cell-possible.html 为了节省查找链接的时间,答案实际上非常简单:如果您使用Excel格式刷而不是合并单元格来合并单元格,它会保留合并单元格下面的数据/公式。您只需要在其他位置创建一个正确格式的临时合并块,以用作格式刷的模板。之后可以删除它们。不过需要注意的是,像这样隐藏的数据可能会成为不谨慎的陷阱,因为编辑可见单元格不会更改不可见的单元格。

看起来这正是@Kinshuk最初寻找的东西。肯定帮了我很多,谢谢! - Clang
一开始看起来有点奇怪,但它运行得很好!! - Cube

2

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

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

  1. Insert a column before column A

  2. In A1 type:

    =B1
    
  3. Copy the formula below in A2 :

    =IF(B2="",A1,B2)
    
  4. Drag down the formula u typed in A2

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

0

你能不能把实际的值存储在其他地方,而不是合并的单元格里?然后使用公式在合并的单元格中显示该值。


也许我没有表达清楚,我的意思是,我在表格中合并了3个单元格,但合并后的单元格的值只存在于第一个单元格中。我希望每个单元格都具有相同的值,但显示为一个合并的单元格。不过,我不能将它们存储在其他位置。 - Kinshuk

0
假设列"A"有合并的单元格 - 将其放入B1并复制以填充整个列:
=IF(ISBLANK(A1);OFFSET(B1;-1;0);A1)

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

请注意,它不适用于空单元格。首先,在"A"列中填充空单元格,使用唯一的内容,例如“(empty)”,然后在填充"B"列之后将其替换为空白。


0
说A13到A52已经合并。 a = Cells(13,1)会返回一个值,但是 a = Cells(14,1)不会 "空"
修复:
a = Cells(X,1).MergeArea(1, 1) '如果x=13到52将返回A13的值。
不知道怎么做到的,但它有效。

0
我改进了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

-1
 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接