请教一个用excel拆分文本的问题

想把表一的文本拆分成结果表右边的样式,但实际的结果变了结果表左边的样式。也就是把𩡩字拆成了两个字符,𩡩字也不能列在结果表中。



文本拆分.zip (23.6 KB)
代码在压缩文件中,不知问题出在哪里,向各位请教。

1 个赞

扩展区汉字支持欠佳四字节汉字被当成两个双字节汉字

转换思路,用正则应该不难吧

1 个赞

我最近也碰到拆分深僻汉字构词,发生错误的问题,只能手动修正。

现在考虑用试错的方法。

1.构建一个完整的汉字表。

2.用lenb 2byte检查构词的2byte拆分在汉字表里有没有字,有的话,就用2byte拆分。

假如2byte拆分没字,就改用4byte拆分。4byte拆分有字,就用4byte拆分。

假如4byte拆分没字,返回一个特殊记号,过后再检查,看是什么情况。

你的Excel版本假如够新,也可以考虑用Unicode函数检查构词首字。

你得自己实验一下。

我的Excel版本很旧,连你这个文档都无法打开。

换个工具就简单了,复制到emeditor,拆分就一个正则了事。何必局限于EXCEL!

谢谢各位的回复!问题已解决。附上解决的代码,供有此需要者参考。
Sub 拆分()
Dim arr1, mrow&, mcount&, i%
Dim char As String
Dim isFourByte As Boolean

arr1 = Sheets(1).[A1].CurrentRegion.Value
mcount = 1
Application.ScreenUpdating = False

With Sheets(2)
    .Columns("A:H").Clear
    For col = 1 To 8
        .Cells(1, col) = arr1(1, col)
    Next
    
    For mrow = 2 To UBound(arr1)
        i = 1
        Do While i <= Len(arr1(mrow, 1))
            char = Mid(arr1(mrow, 1), i, 1)
            isFourByte = False
            
            ' 判断是否为四字节字符的起始部分
            If AscW(char) >= &HD800 And AscW(char) <= &HDBFF Then
                ' 如果是四字节字符的起始部分,尝试获取下一个字符
                If i + 1 <= Len(arr1(mrow, 1)) Then
                    char = Mid(arr1(mrow, 1), i, 2)
                    isFourByte = True
                End If
            End If
            
            mcount = mcount + 1
            .Cells(mcount, 1) = char
            .Cells(mcount, 2) = arr1(mrow, 2)
            .Cells(mcount, 3) = arr1(mrow, 3)
            .Cells(mcount, 4) = arr1(mrow, 4)
            .Cells(mcount, 5) = arr1(mrow, 5)
            .Cells(mcount, 6) = arr1(mrow, 6)
            .Cells(mcount, 7) = arr1(mrow, 7)
            .Cells(mcount, 8) = arr1(mrow, 8)
            
            ' 如果是四字节字符,跳过下一个字符
            If isFourByte Then
                i = i + 2
            Else
                i = i + 1
            End If
        Loop
    Next
    .Activate
End With
Application.ScreenUpdating = True

End Sub

1 个赞