我可以使用以下输入成功修改单个或一组正常细胞:
.Range("C" & i) _
.Characters(WorksheetFunction.Find("NOTE:", Range("C" & i).Value, 1), 100) _
.Font.Bold = True
在C列的长度下运行,加粗在&#34之后的所有内容;注意:" (特别是过去100个字符,包括找到的文本字符串)
问题是 - 如果C列中有任何合并的单元格,它会忽略它。我已经运行了一些快速测试 - 它识别出单元格中有文本,我可以将合并单元格的内容打印到单个单元格中,以后可以找到文本字符串,但不会找到&# 34;注意:"由于某种原因在合并的单元格本身
答案 0 :(得分:3)
从合并范围中取出第一个(左上角)单元格并继续使用代码:
With .Range("C" & i).MergeArea.Cells(1, 1)
lngFound = InStr(1, .Value2, "NOTE:", vbTextCompare)
If lngFound > 0 Then
.Characters(lngFound, 100).Font.Bold = True
End If
End With
答案 1 :(得分:1)
据我所知,它适用于以C列中的单元格开头的合并单元格,但是当合并的单元格在C列之前开始时会中断。我能够使用If
语句使其工作确定Range("C" & I)
中的值是否为空,然后选择合并单元格的第一个单元格并执行格式化。
请参阅下面的代码我需要工作。我的数据集仅适用于单元格C1:C20
:
Sub test()
Dim i As Integer
Dim rng As Range
With ThisWorkbook.ActiveSheet
On Error Resume Next
For i = 1 To 20
If .Range("C" & i).Value = "" Then
If Range("A" & i).Value <> "" Then
Set rng = Range("A" & i)
Else
Set rng = .Rows(i).SpecialCells(xlCellTypeBlanks)(1).Offset(0, 1)
End If
rng.Characters(WorksheetFunction.Find("NOTE:", rng.Value, 1), 100).Font.Bold = True
Else
.Range("C" & i).Characters(WorksheetFunction.Find("NOTE:", Range("C" & i).Value, 1), 100).Font.Bold = True
End If
Next i
End With
End Sub
之前(用于表示合并单元格开始和结束位置的边框):
后: