Excel 通过组合字符组拆分字符串
我正在使用Excel vba处理包含Unicode组合字符的字符串。我需要将字符串拆分为一个字符数组。。。很简单。我的问题是我需要角色组。也就是说,字符及其组合字符。如何使用Excel vba将字符串拆分为字符组+组合字符组?vba没有直接的功能来处理组合字符。相反,您必须使用一些代码来解决问题。事实上,这不是VBA的具体问题,请阅读 下面的代码将尝试处理最常见的组合字符问题,并且与变音符号有关。变量unicode将存储所需的拆分unicode字符串 当然,组合字符可能会从标记中延伸出来,比如ae作为唯一字母或ß也可以写为ssExcel 通过组合字符组拆分字符串,excel,vba,unicode,Excel,Vba,Unicode,我正在使用Excel vba处理包含Unicode组合字符的字符串。我需要将字符串拆分为一个字符数组。。。很简单。我的问题是我需要角色组。也就是说,字符及其组合字符。如何使用Excel vba将字符串拆分为字符组+组合字符组?vba没有直接的功能来处理组合字符。相反,您必须使用一些代码来解决问题。事实上,这不是VBA的具体问题,请阅读 下面的代码将尝试处理最常见的组合字符问题,并且与变音符号有关。变量unicode将存储所需的拆分unicode字符串 当然,组合字符可能会从标记中延伸出来,比如a
Sub Test()
Dim r As Range
Set r = ActiveSheet.Range("A1")
' Set some combined chars in A1 cell
r = "a" + ChrW(&H300)
r = r + "e" + ChrW(&H301)
r = r + "i" + ChrW(&H305)
r = r + "o" + ChrW(&H300)
r = r + "u" + ChrW(&H300)
' Store the combined chars from cell A1 to str
Dim str As String
str = r
' Length, counting the individual characters in string
Dim strLen As Integer
strLen = Len(str)
' Each element in unicode() will contain combined chars
Dim unicode() As String
ReDim unicode(strLen)
' Length, counting the combined characters in string
Dim unicodeLength As Integer
unicodeLength = 0
' Split str into unicode()
Dim char As Integer
For i = 1 To strLen
char = AscW(Mid(str, i, 1))
unicode(unicodeLength) = unicode(unicodeLength) + ChrW(char)
If i < strLen Then
'If it is not the last char, check if
'the following char is a combining diacritical mark
'and if so, do not increment the length
char = AscW(Mid(str, i + 1, 1))
If Not (char >= &H300 And char <= &H36F) Then
unicodeLength = unicodeLength + 1
End If
Else
unicodeLength = unicodeLength + 1
End If
Next i
' Fill B column with 1 combined char per row
For i = 1 To unicodeLength
ActiveSheet.Range("B" & i) = unicode(i - 1)
Next i
End Sub
<>这个代码没有考虑三个主要的事情:
除了U+0300到U+036F之外,还有更多罕见的unicode字符
一些像U+035C到U+0362这样的变音符号将两个字符连接在一起,即a͜b a+ChrW和H35C+b。在这种情况下,您必须编写一些附加条件。
如果有一些变音符号,unicode数组中将有空格。在这种情况下,您必须使用Unicode长度重拨Preserve以释放一些空间,或者使用Unicode长度作为上限。
更多信息
自版本1.0起,将变音符号0300–036F与
后续版本中的修改一直到4.1
组合变音符号扩展1AB0–1AFF,7.0版
组合变音符号补充1DC0–1DFF,版本4.1至5.2
自版本1.0起,结合符号20D0–20FF的变音符号,并进行修改
在5.1以下的后续版本中
结合半标记FE20–FE2F,版本1.0,并在后续版本中进行修改,直到8.0
没有回答我的问题。。。循环遍历每个字符。组合字符单独处理。我需要在我的循环中将组合字符分组在一起。我猜它是否是模式匹配。。。如果您发布了一个示例字符串和预期的输出,那么它会更有用。