ExcelVBA シフト文字を含めてバイト数をカウントする

IT関連

これは私の備忘録です。

 

エクセルに入力したデータをAS400にアップロードする仕組みを作ったのですが、AS400はシフト文字の関係上、文字数の計算がややこしいです。

 

例えば「ありがとう」は10バイトピッタリのはずですが、実際は両端にシフト分半角が1づつ入るので、10+2の12バイトになります。

 

なので、エクセルのデータの入力規則でLenb(A1) < 10などとしてもダメ。

UPDATE時に文字数がおかしいよと怒られてしまいます。

 

これを回避するには、セルの文字を1つ1つ見ていくしかないみたい。

 

サンプルプログラムはこんな感じ。変数はdimで定義しているものと思ってください。

 '変数初期化
 cnt = 0
 prv = 0
 now = 0
        
'セルの文字数を取得
Length = Len(Cells(1,1).Value)
        
'文字数が0でなければ
If Length <> 0 Then
        
'-----------------
'セルに対して処理
'-----------------
For i = 1 To Length
                        
    '現在のセルのバイト数を取得
    now = LenB(StrConv(Mid(Cells(1,1), i, 1), vbFromUnicode))
            
    '最初の文字で2バイト文字ならシフト分を足す
    If i = 1 And now = 2 Then
    cnt = cnt + 1
    End If
            
    '最後の文字で2バイト文字ならシフト分を足す
    If i = Length And now = 2 Then
    cnt = cnt + 1
    End If
            
    '前回と今回のバイト数が違うならシフト分を足す
    If i <> 1 And prv <> now Then
    cnt = cnt + 1
    End If
            
    '合計カウントに足しこむ
    cnt = cnt + now
                        
    '1つ前の数値に代入
    prv = now
                        
Next i
            
'---------
'文字数検証
'---------
'例えば10バイトより大きければエラー
If cnt > 10 Then
MsgBox Cells(1, 1).Value & "の値が不正です"
Cells(1, 1).Font.ColorIndex = 3
Else
Cells(1, 1).Font.ColorIndex = 1
End If

 

コメント

タイトルとURLをコピーしました