在反斜杠之间更改字符串部分的颜色

时间:2018-12-26 09:31:07

标签: excel vba excel-vba

我陷入了这个问题:我想循环执行以下特定操作的woorkbook的所有工作表:在“组织”列中,将颜色更改为最后一个反斜杠之间的字符串部分:

这是原始数据 enter image description here

这是我想如下更改字符串的方式: enter image description here

我想更改颜色的字符串部分长度不一样(否则我可以使用Right函数解决该问题)。您对我如何编写子例程来解决该问题有什么建议? 不幸的是,我尝试了几种选择都没有成功。

非常感谢

2 个答案:

答案 0 :(得分:1)

要在单元格的字符串值内操纵子字符串的属性,您需要使用Range.Characters属性。这需要一个起点和一个长度来标识子字符串。

由于您需要尾随反斜杠的位置,因此在确定这些位置时,使用InStrRev可能比InStr更有效。

Sub redBetweenBackslashes()

    Dim i As Long, s As Long, e As Long, str As String

    With Worksheets("sheet4")
        For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            str = .Cells(i, "A").Value2
            e = InStrRev(str, Chr(92), -1, vbBinaryCompare) - 1
            If e > 0 Then
                s = InStrRev(str, Chr(92), e, vbBinaryCompare) + 1
                If s > 1 Then
                    With .Cells(i, "A").Characters(Start:=s, Length:=e - s + 1)
                        .Font.Color = vbRed
                        .Font.Bold = True
                    End With
                End If
            End If
        Next i
    End With

End Sub

我已将粗体格式添加到红色字体颜色。

enter image description here

答案 1 :(得分:0)

您需要使用instrrev进行上述操作

Function MarkRed()
Dim R As Long
For R = 28 To 29 ' just a sample
    MarkTextRed (Cells(R, 2))
Next
End Function

Public Function MarkTextRed(myCell As Range)
Dim T As String
Dim b As Integer, c As Integer
T = myCell.Value
b = InStrRev(T, "\")
c = InStrRev(T, "\", b - 1)
If c < b Then
    With myCell.Characters(Start:=c + 1, Length:=(b - c - 1)).Font
        .Color = -16776961
    End With
End If
End Function