Access VBA質問箱 IV

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

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


381 / 9994 ←次へ | 前へ→

【12926】Re:指定文字数にしたい
発言  かるびの  - 16/1/16(土) 16:34 -

引用なし
パスワード
   >今回は半角文字の対応はしなくても大丈夫そうなのですが、これをきちんと出す方法があれば、
>後学のために教えていただけるとうれしいです。

 これへの対応方法について興味が湧いたので、その対応方法を考えてみました。

 細かな処理を要するので、関数化します。

Function FnGetStr(ByVal strUni As String _
        , lngJisLen As Long _
        , strAddFull As String _
        , strAddHalf As String) As String
'UnicodeのstrUni文字列から、Shift-Jisで数えてlngJisLen分のバイト数の文字列を切り出す関数
'引数 strUni 文字列の切り出し元となるUnicodeの文字列)
'   lngJisLen 切り出すバイト数(Shift-Jisで計算)
'   strAddFull strUniがlngJisLenより短い場合に付加する全角の文字
'    strAddHalf strUniのバイト数が奇数になる場合に付加する半角の文字
'返り値 UnicodeのstrUni文字列から、Shift-Jisで数えてlngJisLen分のバイト数分を取り出した文字列(Unicode)
  
  Dim i As Long
  Dim strJis(1) As String  '添え字:0=前回ループ、1=今回ループ    
  Dim lngLen As Long
  Dim strRslt As String
  Dim strDbgUni As String  'デバッグ用
  
  'strUniがlngJisLenよりも短い場合に備えて、全角文字を付加
  strUni = strUni & String(lngJisLen, strAddFull)
  
  'Shift-JisによるstrUniのバイト数を調査。
  For i = Int(lngJisLen / 2) To Len(strUni)
    strJis(1) = Left(strUni, i)
    strJis(1) = StrConv(strJis(1), vbFromUnicode)
    
    If (LenB(strJis(1)) > lngJisLen) Then
      Exit For
    End If
    
    strJis(0) = strJis(1)
    
    strDbgUni = StrConv(strJis(0), vbUnicode) 'デバッグ用
  Next i

  'strUniから該当部分を切り出す。
  strRslt = Left(strUni, i - 1)
  lngLen = LenB(strJis(0))

  'Shift-Jisのバイト数が奇数になってしまう場合に備えて、半角文字を追加
  If lngJisLen - lngLen = 1 Then
    strRslt = strRslt & strAddHalf
  End If
  
  FnGetStr = strRslt
End Function

156 hits

【12918】指定文字数にしたい あおぎん 16/1/8(金) 12:06 質問[未読]
【12919】Re:指定文字数にしたい かるびの 16/1/8(金) 15:59 回答[未読]
【12920】Re:指定文字数にしたい あおぎん 16/1/14(木) 10:45 質問[未読]
【12921】Re:指定文字数にしたい かるびの 16/1/14(木) 11:57 回答[未読]
【12922】Re:指定文字数にしたい あおぎん 16/1/14(木) 16:16 お礼[未読]
【12926】Re:指定文字数にしたい かるびの 16/1/16(土) 16:34 発言[未読]
【12933】Re:指定文字数にしたい あおぎん 16/2/4(木) 19:01 お礼[未読]

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