【发布时间】:2018-04-18 21:54:12
【问题描述】:
我有一个包含两行的表格,其中有条件格式(规则,例如 if 低于然后彩色文本)。我需要连接这两行并分别保留每一行的格式。因此,我不能只连接值和粘贴格式,因为它会将条件格式应用于整个文本,而不仅仅是部分文本。
我搜索了解决方案,发现您可以使用 Range.DisplayFormat 属性将条件格式转换为静态格式。在我的代码中,我基本上是按每个字符 并从源单元格复制 DisplayFormat(使用条件格式)并在我的目标范围内的字符上使用相同的字体、大小、粗体和颜色。
结果应该是这样的:
不幸的是,我得到的只是一个没有格式化的连接字符串。您知道实现我需要的更好方法吗?或者你能帮我修复现有的代码吗?
Sub Merge_Cells()
Dim i As Integer
Dim rngFrom1 As Range
Dim rngFrom2 As Range
Dim rngTo As Range
Dim lenFrom1 As Integer
Dim lenFrom2 As Integer
Set rngFrom1 = Cells(59, 1) 'first row
Set rngFrom2 = Cells(60, 1) 'second row
Set rngTo = Cells(64, 1)
lenFrom1 = Len(rngFrom1)
lenFrom2 = Len(rngFrom2)
rngTo.Value = rngFrom1.Text & " " & rngFrom2.Text 'concatenating text
For i = 1 To lenFrom1
With rngTo.Characters(i, 1).Font
.Name = rngFrom1.DisplayFormat.Characters(i, 1).Font.FontStyle
.Bold = rngFrom1.DisplayFormat.Characters(i, 1).Font.Bold
.Size = rngFrom1.DisplayFormat.Characters(i, 1).Font.Size
.ColorIndex = rngFrom1.DisplayFormat.Characters(i, 1).Font.ColorIndex
End With
Next i
For i = 1 To lenFrom2
'start from character that is after space
With rngTo.Characters(lenFrom1 + 1 + i, 1).Font
.Name = rngFrom2.DisplayFormat.Characters(i, 1).Font.Name
.Bold = rngFrom2.DisplayFormat.Characters(i, 1).Font.Bold
.Size = rngFrom2.DisplayFormat.Characters(i, 1).Font.Size
.ColorIndex = rngFrom2.DisplayFormat.Characters(i, 1).Font.ColorIndex
End With
Next i
End Sub
【问题讨论】:
-
您想对字符串的“一半”应用条件格式吗?
-
不支持连接单元格的部分格式:见partial format contents in a concatendated cell
-
我对 Total Value 和 Delta 行中的值设置了条件格式。我想连接这两行的值,同时保留每行的格式。据我了解,这无法通过条件格式来完成,因此我想将其转换为字符串每个“一半”的静态格式。这就是我尝试为每个角色着色的原因。如果源格式是静态的而不是有条件的,它就可以工作。
-
你是如何制作问题中的图片的?用油漆?还是 Excel 的截图?
-
@Seidhe 只是将 A 格式化到右侧,将 B 格式化到左侧。这样看起来几乎一样。正如您在我的链接中所读到的,Excel 不支持连接单元格的部分格式。您可能会在这里查看stackoverflow.com/questions/49895205/…,这是一个类似的问题。