[英]How to keep value of merged cells in each cell?
我创建了一个包含合并单元格的工作表,但合并单元格的值仅存储在第一个单元格中。 无论如何,为了在每个单元格中保持相同的值,我需要它作为我使用的公式。 谢谢!
在 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
通过以下方式创建宏
Insert/Module
,粘贴代码;UnmergeAndFill
),单击Make
或Create
( ?不知道英文按钮文本) 按 Alt-F8 调用宏,选择它, Run
。 或者将其映射到一个键
无论您选择哪一个,您都可以使用直接给出合并单元格值的自定义 VBA 函数。 在这种情况下,没有必要复制这些值。
代码:
Option Explicit
Function GetMergedValue(location As Range)
If location.MergeCells = True Then
GetMergedValue = location.MergeArea(1, 1)
Else
GetMergedValue = location
End If
End Function
代码:
=GetMergedValue(A1)
其中 A1 是合并单元格的一部分。
我知道这是一个相当古老的问题,但这是我在寻找答案时首先到达的地方,而接受的答案根本没有帮助。 但是,我确实在 MrExcel 上发现了一个很好的答案,我认为值得将其放在此线程上,以使其他人在谷歌上搜索答案:
http://www.mrexcel.com/forum/general-excel-discussion-other-questions/487941-data-multiple-cells-within-merged-cell-possible.html
为了节省查找链接,答案非常简单; 如果您使用 Excel 格式刷合并单元格,而不是合并单元格,它会保留合并单元格“基础”的数据/公式。 您只需要在其他地方以正确的格式创建一个临时合并的单元格块,以用作格式刷的模板。 您可以在之后删除它们。 但是,需要注意的一件事是,像这样的“隐藏”数据可能会成为粗心的陷阱,因为编辑可见单元格不会更改不可见单元格。
您可以创建一个新列(或行)并在第一个单元格中应用此公式并将其向下拖动:
我想在 A 列中您已合并单元格(例如 A1:A3 和 A5:A8 已合并)。
在 A 列之前插入一列
在 A1 类型中:
=B1
在 A2 中复制以下公式:
=IF(B2="",A1,B2)
把你在A2中输入的公式往下拉
在您的公式中使用新创建的列,使用后您可以隐藏它。
假设“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
您不能将实际值存储在其他地方吗? 而不是合并的单元格? 是的,使用公式在合并单元格上显示值。
假设 A13 到 A52 被合并。 a = Cells(13,1)
将返回一个值,但a = Cells(14,1)
不会“空”
使固定:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.