Excel VBA:有没有一种方法可以遍历特定范围内的字符?

Excel VBA:有没有一种方法可以遍历特定范围内的字符?,excel,string,vba,iteration,Excel,String,Vba,Iteration,是否有一种方法可以遍历特定范围内的字符,如: ... For each char1 in range1.Characters [It does not work the fake code above, because Characters is not a collection] 我的意思是:是否存在这样的集合?如果要循环遍历包含文本的单单元格范围对象,返回单字符对象,这是一种方法: Sub IterateCharactersObject() Dim ch As Charac

是否有一种方法可以遍历特定范围内的字符,如:

...
For each char1 in range1.Characters
    [It does not work the fake code above, because Characters is not a collection]

我的意思是:是否存在这样的集合?

如果要循环遍历包含文本的单单元格范围对象,返回单字符对象,这是一种方法:

Sub IterateCharactersObject()
    Dim ch As Characters, n As Long
    With Sheets("Sheet1").Range("A1")
        For n = 1 To .Characters.Count
            Set ch = .Characters(n, 1)
            'print position#, character, font name & size to immediate window
            Debug.Print "#" & n & "=" & ch.Text, ch.Font.Name, ch.Font.Size
        Next n
    End With
End Sub
只有在需要更改对象的某些文本而不影响其他文本时,才需要Characters方法。如果对象不支持富文本,则无法使用Characters方法格式化部分文本。要同时更改所有文本,通常可以将适当的方法或属性直接应用于对象

…或者,如果您实际上不需要返回Characters对象,则最好使用MID和LEN函数:

Sub IterateCharacters_String()
    Dim n As Long
    With Sheets("Sheet1").Range("A1")
        For n = 1 To Len(.Value)
            'print position# and character to immediate window
            Debug.Print "#" & n & "=" & Mid(.Value, n, 1)
        Next n
    End With
End Sub
这也可以在不使用VBA的情况下使用MID和LEN工作表函数来完成

更多信息: MSDN:

MSDN:

MSDN:

MSDN:


如果要循环遍历包含文本的单单元格范围对象,返回单字符对象,这是一种方法:

Sub IterateCharactersObject()
    Dim ch As Characters, n As Long
    With Sheets("Sheet1").Range("A1")
        For n = 1 To .Characters.Count
            Set ch = .Characters(n, 1)
            'print position#, character, font name & size to immediate window
            Debug.Print "#" & n & "=" & ch.Text, ch.Font.Name, ch.Font.Size
        Next n
    End With
End Sub
只有在需要更改对象的某些文本而不影响其他文本时,才需要Characters方法。如果对象不支持富文本,则无法使用Characters方法格式化部分文本。通常情况下,您可以将文本直接应用于所有对象,也可以将相应的属性直接应用于所有对象

…或者,如果您实际上不需要返回Characters对象,则最好使用MID和LEN函数:

Sub IterateCharacters_String()
    Dim n As Long
    With Sheets("Sheet1").Range("A1")
        For n = 1 To Len(.Value)
            'print position# and character to immediate window
            Debug.Print "#" & n & "=" & Mid(.Value, n, 1)
        Next n
    End With
End Sub
这也可以在不使用VBA的情况下使用MID和LEN工作表函数来完成

更多信息: MSDN:

MSDN:

MSDN:

MSDN:


我将引入一个变量来存储循环外的文本长度:myLen=Len.Value。由于不断地从范围内读取,如果有许多重复,则需要一段时间。在循环内部为空的情况下,在包含文本ashleedawg的单元格A1上,在1百万次迭代中,差异为0.06秒与1.16秒。显然是为了性能。值应该以类似的方式作为字符串存储在外部。@RobertoSantos-别忘了✓ 接受一个有助于解决问题的答案…你将获得+2声誉,答案作者获得+15声誉。当你达到15声誉时,你也可以▲ 向上投票任何有帮助的答案,这也会奖励作者以及您以投票形式提供的反馈,从而使整个社区受益!我将引入一个变量来存储循环外的文本长度:myLen=Len.Value。由于不断地从范围内读取,如果有许多重复,则需要一段时间。在循环内部为空的情况下,在包含文本ashleedawg的单元格A1上,在1百万次迭代中,差异为0.06秒与1.16秒。显然是为了性能。值应该以类似的方式作为字符串存储在外部。@RobertoSantos-别忘了✓ 接受一个有助于解决问题的答案…你将获得+2声誉,答案作者获得+15声誉。当你达到15声誉时,你也可以▲ 向上投票任何有帮助的答案,这也会奖励作者以及您以投票形式提供的反馈,从而使整个社区受益!