Microsoft Access 掲示板

Lenbについて / 9

20 コメント
views
4 フォロー
9

全角、半角に関しては、いろいろ複雑な事情があります。
とりあえず下記を参照してください。

半角1桁全角2桁で計算するLenB、LeftB関数の代替関数 - hatena chips

VBA Unicode 文字の入力や変換、読み込みについて

Unicode文字(Shift-JISにない文字)、サロゲートぺー文字の扱いはどうするのかまずは決める必要があると思います。

通報 ...
  • 10
    シソンヌ 2020/11/28 (土) 21:10:08 0029a@1c915 >> 9

    ありがとうございます。教えていただいた関数を参考に考えていますが、
    行き詰っています。

    今回文章を何個かに分割したいので、midで作って繰り返しさせたいと思っていますがうまくいきません・・・
    どこが間違っているのでしょうか。
    (とりあえず汎用関数の部分のみ↓)

    Public Function MidAnsiB(S As String, M As Long, L As Long) As String
        Dim res As String, T As Long
     
        If S = "" Then Exit Function  '元テキストが空なら終了
         
        If LenAnsiB(S) <= L Then    '元テキストが任意の数以下ならそのまま出力して終了
            MidAnsiB = S
            Exit Function
        End If
         
        res = StrConv(MidB$(StrConv(S, vbFromUnicode), M, L), vbUnicode)    'コードを変えて文字数揃えてユニコードに戻す
     
        res = Mid$(S, M, Len(res))
     
        If LenAnsiB(res) > L Then
            res = Mid$(S, M, Len(res) - 1)
        End If
     
     
        'サロゲートペア文字対策
        Select Case AscW(Right$(res, 1))
        Case &HD800 To &HDBFF
            res = Left$(res, Len(res) - 1)
        End Select
    
        MidAnsiB = res
        
    End Function
    
    
    11
    シソンヌ 2020/11/28 (土) 21:14:23 0029a@1c915 >> 10

    反映させる部分↓

            cnt = cnt0 + 1
            str1 = MidAnsiB([テキスト], cnt, TEST_COUNT)
            cnt1 = LenAnsiB(str1)
                    
            cnt = cnt + cnt1
            str2 = MidAnsiB([テキスト], cnt, TEST_COUNT)
            cnt2 = LenAnsiB(str2)