• ベストアンサー

半角と全角が混ざった文字列のバイト処理に関して

失礼します。 "あイウエお"という文字列があったとして、 出力する場所に6バイト分の幅しかない場合、 "あイウエお"だと7バイトになってしまい入らないので "あイウエ"だけ抜き出して出力し、 2行目に"お"と出力するにはどのような記述をすれば良いのでしょうか?全角の文字を途切らせないで、入りきれないなら次行に移したいのです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=172521 に載ってるソースを参考にしてみたのですが、上手くいきませんでした。。

質問者が選んだベストアンサー

  • ベストアンサー
  • fantom
  • ベストアンサー率31% (30/94)
回答No.2

ちょっと作ってみました。 文字列を1行目と2行目で分ける関数です。 末端のバイトコードで全角チェックをしています。 全角の場合は末端文字の手前で改行コードをいれています。 これでどうでしょうか? -----使用例----- Dim s2 As String '※↓全角表示されていますが半角文字のイウエです MsgBox "1行目:" & Separate("あイウエお", 6, s2) MsgBox "2行目:" & s2 ----------------------------- Public Function Separate(strtxt As String, lim As Integer, ByRef strtxt2 As String) As String '第1引数:対象文字列 '第2引数:1行目に表示可能なバイト幅 '第3引数:2行目に出力される文字列 '戻り値:1行目に出力される文字列 Dim rec() As Byte, cr() As Byte, send() As Byte, leave() As Byte Dim i As Integer '対象文字列をバイト配列に変換 rec = StrConv(strtxt, vbFromUnicode) '改行コードをバイト配列に変換 cr = StrConv(vbCrLf, vbFromUnicode) ReDim send(UBound(rec) + 1) As Byte For k = 0 To lim - 2 send(k) = rec(k) Next '末端文字が全角かどうかチェック If (rec(lim - 1) >= &H81 And rec(lim - 1) <= &H9F) Or (rec(lim - 1) >= &HE0 And rec(lim - 1) <= &HFC) Then '末端が全角の場合 '改行コード挿入 send(lim - 1) = cr(0) send(lim) = cr(1) '残りの文字挿入 For k = lim - 1 To UBound(rec) ReDim Preserve leave(i) As Byte leave(i) = rec(k) i = i + 1 Next Else '末端が全角じゃない場合 send(lim - 1) = rec(lim - 1) '改行コード挿入 send(lim) = cr(0) send(lim + 1) = cr(1) '残りの文字挿入 For k = lim To UBound(rec) ReDim Preserve leave(i) As Byte leave(i) = rec(k) i = i + 1 Next End If '第2行目の文出力 strtxt2 = StrConv(leave, vbUnicode) '第1行目の文出力 Separate = StrConv(send, vbUnicode) End Function

noname#15844
質問者

お礼

回答有難う御座いました~。 わざわざソースまで記述してもらって感謝です^^ まだそこまで沢山試してないですが、上手く出来ているみたいです。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

参考URLは、エクセルVBAでのものですけど、 参考にはならないでしょうか

参考URL:
http://okwave.jp/kotaeru.php3?qid=1800442
noname#15844
質問者

お礼

回答有難う御座いました~。 参考のURL、大変為になりました。