Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将多个但独立的字符设置为粗体字符串_Excel_Format_Vba - Fatal编程技术网

Excel 将多个但独立的字符设置为粗体字符串

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

我有一个包含文本的单元格,如下所示:

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("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