Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


22301 / 76738 ←次へ | 前へ→

【59820】Re:文字列の分割について・・・
発言  kanabun  - 09/1/9(金) 23:18 -

引用なし
パスワード
   文字列を 10バイトで カンマを挿入するサンプルです。

なお、VBAのMidB関数を VBAの文字列に対して 直接適用してはいけません。
VBA上では 文字コードはUnicodeで(abc123あいう亜 すべて2バイト)
↓最後の参考例のように、目的の文字列は取り出せません。

'Try2 実行結果
あいう111 , おかきくけこ
あいう1え , おかきくけこ
1234567890,abcdefghij
12345     67890

Sub Try2()
  Const u1 = "1234567890abcdefghij"
  Const u2 = "あいう111おかきくけこ"
  Const u3 = "あいう1えおかきくけこ"
  
  Debug.Print USplit(u2, 10) '10バイトまでと それ以降に分割
  Debug.Print USplit(u3, 10)
  Debug.Print USplit(u1, 10)
  '参考
  Debug.Print MidB(u1, 1, 10), MidB(u1, 11, 10)
End Sub

Function USplit(UStr As String, ByVal m As Long) As String
  Dim bb() As Byte
  ReDim bb(1 To m * 2)
  bb = StrConv(UStr, vbFromUnicode) 'ShiftJISバイトコードに直す
  
  '指定のmバイト目が コード80〜9F、または E0〜FF だったら、
  Select Case bb(m + 1)
   Case &H80 To &H9F, &HE0 To &HFF '分割点が全角文字の中にあったら
     m = m - 1     '------ 分割点を1バイト前に移動
     'または m = m + 1 '------ 分割点を1バイト後ろに移動
  End Select
  USplit = StrConv(LeftB(bb, m), vbUnicode) & "," _
      & StrConv(MidB(bb, m + 1), vbUnicode)
End Function

1 hits

【59814】文字列の分割について・・・ 文字ってわからん 09/1/9(金) 18:25 質問
【59817】Re:文字列の分割について・・・ かみちゃん 09/1/9(金) 20:16 発言
【59819】Re:文字列の分割について・・・ kanabun 09/1/9(金) 21:27 発言
【59820】Re:文字列の分割について・・・ kanabun 09/1/9(金) 23:18 発言
【59822】Re:文字列の分割について・・・ kanabun 09/1/10(土) 0:38 発言
【59844】Re:文字列の分割について・・・ kanabun 09/1/13(火) 11:30 発言

22301 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free