如何保持每个单元格中合并单元格的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保持每个单元格中合并单元格的值?相关的知识,希望对你有一定的参考价值。
我创建了一个包含合并单元格的工作表,但合并单元格的值仅存储在第一个单元格中。无论如何,为了在每个单元格中保持相同的值,我需要为我使用的公式。谢谢!
在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
通过创建宏
- 按Alt-F11,Ctrl-R,菜单
Insert/Module
,粘贴代码; - 或者:Alt-F8,键入一个新名称(例如
UnmergeAndFill
),单击Make
或Create
(?不知道英文按钮文本)
按Alt-F8调用宏,选择它,Run
。或者将其映射到一个键
我知道这是一个相当古老的问题,但这是我在寻找答案时首先登陆的地方,而且接受的答案根本没有帮助。我找到了一个很好的答案,但是,对于MrExcel我认为值得投入这个帖子,以便其他人在谷歌搜索答案: http://www.mrexcel.com/forum/general-excel-discussion-other-questions/487941-data-multiple-cells-within-merged-cell-possible.html
为了节省查找链接,答案非常简单;如果使用Excel Format Painter而不是Merge Cells合并单元格,则会保留合并单元格中的数据/公式“底层”。您只需要在其他位置以正确的格式创建临时合并的单元格块,以用作Format Painter的模板。您可以在之后删除它们。但要注意的一件事是,像这样的“隐藏”数据可能是一个不警惕的陷阱,因为编辑可见单元格不会改变不可见的单元格。
您可以创建一个新列(或行)并在第一个单元格中应用此公式并将其向下拖动:
我想在A列中你有合并的单元格(例如A1:A3和A5:A8合并)。
- 在A列之前插入一列
- 在A1类型:
=B1
- 复制A2中的公式:
=IF(B2="",A1,B2)
- 下拉您在A2中键入的公式
在公式中使用新创建的列,使用后可以隐藏它。
您可以使用自定义VBA函数直接提供合并单元格的值,无论您选择哪一个。在这种情况下,没有必要复制值。
- 切换到VBA视图(Alt-F11)
- 通过“插入”>“模块”创建新模块
- 在您的项目中,浏览到新模块(您可能希望通过资源管理器下的(name)属性为其指定新名称)
- 复制模块中的以下代码(粘贴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
- 您现在可以在excel中使用该公式
码:
=GetMergedValue(A1)
A1是合并单元格的一部分。
你能否在其他地方存储实际值?而不是合并的单元格?是的,使用公式显示合并单元格上的值。
假设列“A”已合并单元格 - 将其放入B1并复制以填充列的其余部分:
=IF(ISBLANK(A1);OFFSET(B1;-1;0);A1)
它检查左边的单元格是否有值,如果它返回了它的值,如果不是,则从上面的单元格中获取值。
请注意,它不适用于空单元格。首先在列“A”中用空的单元格填充空单元格,如“(空)”,并在填充列“B”后将其替换为“A”和“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
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
以上是关于如何保持每个单元格中合并单元格的值?的主要内容,如果未能解决你的问题,请参考以下文章
使用OLEDB读取EXCEL数据时,为何读取不到单元格中的时间值,全是1900\1\0