Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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_Vba - Fatal编程技术网

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

Excel 在反斜杠之间更改字符串部分的颜色,excel,vba,Excel,Vba,我遇到了这个问题:我想在woorkbook的所有工作表中循环执行以下特定操作:将颜色更改为最后一个反斜杠之间的字符串部分,在“组织”列中: 这是原始数据 这是我希望更改字符串的方式,如下所示: 我想要更改颜色的字符串部分没有相同的长度(否则我可以使用正确的函数解决问题)。你有什么建议我如何编写一个子程序来解决这个问题吗 要在单元格的字符串值内操作子字符串的属性,需要使用Range.Characters属性。这需要一个起点和长度来标识子字符串 由于您需要尾部反斜杠的位置,因此在确定这些位置时,

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

这是原始数据

这是我希望更改字符串的方式,如下所示:


我想要更改颜色的字符串部分没有相同的长度(否则我可以使用正确的函数解决问题)。你有什么建议我如何编写一个子程序来解决这个问题吗

要在单元格的字符串值内操作子字符串的属性,需要使用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
我在红色字体颜色中添加了粗体格式


您需要使用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
函数MarkRed()
变暗,变长
R=28至29'仅为一个样本
标记文本红色(单元格(R,2))
下一个
端函数
公共函数MarkTextRed(myCell作为范围)
调暗T作为字符串
尺寸b为整数,c为整数
T=myCell.Value
b=仪表电压(T,“\”)
c=InStrRev(T,“\”,b-1)
如果c
您能分享您为解决问题而编写的代码吗?您好@user10829321,您提出的解决方案效果很好,只是它只会更改为A列中的字符串。如果您知道如何将此解决方案应用于所有工作表,其中单元格标题为“Organization”,我有多个同名单元格。非常感谢你的支持