Excel 将多个但独立的字符设置为粗体字符串
我有一个包含文本的单元格,如下所示: k a2 d eu1 n-oe2 r gj y2 t lj e2 r i1-t y1 r kj-jh e2 z aa1 最终应该是这样的: ka2deu1n-oe2 r gj y2 t lj e2 ri1-ty1r kj-jh e2 zaa1 为此,单元格的值存储在变量v3中Excel 将多个但独立的字符设置为粗体字符串,excel,format,vba,Excel,Format,Vba,我有一个包含文本的单元格,如下所示: k a2 d eu1 n-oe2 r gj y2 t lj e2 r i1-t y1 r kj-jh e2 z aa1 最终应该是这样的: ka2deu1n-oe2 r gj y2 t lj e2 ri1-ty1r kj-jh e2 zaa1 为此,单元格的值存储在变量v3中 Public Sub Guide() Dim v3 As String Dim i, j As Integer Dim pos, pos1 As Long v3 = Sheets
Public Sub Guide()
Dim v3 As String
Dim i, j As Integer
Dim pos, pos1 As Long
v3 = Sheets("Script").Cells(12, 8).Value
i = 1
j = 0
Do
j = InStr(i, v3, "1", vbTextCompare)
i = j + 1
pos = InStrRev(v3, " ", (j - 1))
pos1 = (j - 1) - pos
Call BoldText(v3, j - pos1, pos1)
Loop Until j = 0
End Sub
这就是我如何得到字母在1之前的位置,(j-1)
,以及前一个空格和1之间的字符数,pos1
这是“黑体字”:
因此,这样它将字符1保留为(粗体前一个)
常规字体。我们想要的是加粗,然后再加粗一次结束
如何通过多个实例实现这一点,从而实现最终结果
此时,在每个循环上重置最后一个循环。Excel希望它的语法为1到(x-1)
=常规字体,x
=粗体字体,x+1到(y-1)
=常规,y
=粗体,y+1到(z-1)
等等。。。我只是不知道该怎么写
非常感谢。
如果你需要更清楚的话,我可以尽力解释更多 这有点匆忙(也有点骇客),但至少应该让你开始。它使用正则表达式。您可以将其中的一部分转换为带有参数的子对象
Sub Regex2()
Dim oMatches As Object, i As Long, vOut
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\s([a-z]+)1"
Set oMatches = .Execute(Range("A1"))
End With
ReDim vOut(0 To oMatches.Count - 1, 1 To 3)
For i = 0 To oMatches.Count - 1
vOut(i, 1) = oMatches(i).submatches(0)
vOut(i, 2) = oMatches(i).firstindex
vOut(i, 3) = oMatches(i).Length
Next i
For i = LBound(vOut) To UBound(vOut)
Range("A1").Characters(vOut(i, 2) + 1, vOut(i, 3) - 1).Font.Bold = True
Next i
End Sub
难以置信,谢谢你的快速回复!它做得很好,我会根据我的具体需要调整它。很高兴它能工作。我稍后会回来把它整理一下。这是实施之后出现的一些问题。然后如何在不重置格式的情况下删除“1”和“2”?Replace函数可悲地覆盖了粗体。如果你删除了数字,有没有办法区分你感兴趣的文本和其他文本?如果没有,您可以搜索存储在vOut中的每个字符串及其位置,然后再次使用字符。我现在没有时间,但是如果你卡住了,我可以稍后重新编写代码。另一个复杂的问题是如果你有重复的代码,例如字符串中有超过1个y。
Sub Regex2()
Dim oMatches As Object, i As Long, vOut
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\s([a-z]+)1"
Set oMatches = .Execute(Range("A1"))
End With
ReDim vOut(0 To oMatches.Count - 1, 1 To 3)
For i = 0 To oMatches.Count - 1
vOut(i, 1) = oMatches(i).submatches(0)
vOut(i, 2) = oMatches(i).firstindex
vOut(i, 3) = oMatches(i).Length
Next i
For i = LBound(vOut) To UBound(vOut)
Range("A1").Characters(vOut(i, 2) + 1, vOut(i, 3) - 1).Font.Bold = True
Next i
End Sub