以字符串粗体创建多个但单独的字符

时间:2018-04-25 17:30:38

标签: excel excel-vba format vba

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

k a2 d eu1 n - oe2 r gj y2 t lj e2 r i1 - t y1 r kj - jh e2 z aa1

最终它应该是这样的:

k a2 d eu 1 n - oe2 r gj y2 t lj e2 r i 1 - t y 1 r kj - jh e2 z aa 1

出于此目的,单元格的值存储在变量v3中。

f()

这就是我在1 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) ...

这是“BoldText”:

pos1

所以这样它可以保留字符Sub BoldText(Txt, strt As Integer, Lngt) Dim Ln As Long Ln = Len(Txt) Range("H12").Select With ActiveCell.Characters(Start:=1, Length:=(strt - 1)).Font .FontStyle = "Regular" End With With ActiveCell.Characters(Start:=strt, Length:=Lngt).Font .FontStyle = "Bold" End With With ActiveCell.Characters(Start:=(strt + Lngt + 1), Length:=(Ln - strt)).Font .FontStyle = "Regular" End With End Sub 常规字体。我们想要的那些大胆,然后1 to (one before the bold)再次定期。

如何通过多个实例实现这一目标,从而实现最终结果?

目前,在每个循环中它重置最后一个循环。 Excel希望它的语法为(one after bold) to End =常规字体,1 to (x - 1) =粗体字体,x =常规,x + 1 to (y-1) =粗体,y等。 ..我只是不确定如何编写脚本。

非常感谢提前。 如果你需要更清楚的东西,那么我可以尽力解释一下。

1 个答案:

答案 0 :(得分:0)

这有点匆忙(而且有点像黑客),但至少应该让你开始。它使用正则表达式。您可以将其中的一些转换为带参数的子。

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