Excel VBA質問箱 IV

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

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


7317 / 13646 ツリー ←次へ | 前へ→

【39849】文字列を30バイトで切るには? mutu 06/7/3(月) 10:01 質問[未読]
【39850】Re:文字列を30バイトで切るには? Blue 06/7/3(月) 10:11 発言[未読]
【39851】Re:文字列を30バイトで切るには? Blue 06/7/3(月) 10:20 発言[未読]
【39857】Re:文字列を30バイトで切るには? ichinose 06/7/3(月) 11:49 発言[未読]
【39872】Re:文字列を30バイトで切るには? mutu 06/7/3(月) 14:35 お礼[未読]

【39849】文字列を30バイトで切るには?
質問  mutu  - 06/7/3(月) 10:01 -

引用なし
パスワード
   おはようございます。
ブルーな月曜の朝ですが、ご助言よろしくお願いします。

いま、全角・半角が混ざった100文字の文字列があります。
これを先頭から60バイト分(全角半角不問)だけ抜き出したいのですが
どのようにすればよろしいのでしょうか?

ヘルプを見てleftB(文字列, 60)をやってみたのですが、できませんでした。

よろしくお願いします。

【39850】Re:文字列を30バイトで切るには?
発言  Blue  - 06/7/3(月) 10:11 -

引用なし
パスワード
   Shift_JISでのバイト数であれば、文字列をShift_JISコードの文字列に変更し、
LeftBで分割してみてください。

Dim s As String

s = "ABCあいう"
' Shift_JISコードの文字列に変更
s = StrConv(s, vbFromUnicode)
' 指定バイト数で分割
s = LeftB(s, 5)
' 文字コード元に戻して表示
MsgBox StrConv(s, vbUnicode)

【39851】Re:文字列を30バイトで切るには?
発言  Blue  - 06/7/3(月) 10:20 -

引用なし
パスワード
   ちなみに、指定バイト数で区切ると、2バイト文字で「泣き別れる」
可能性がある場合、面倒ですが1文字ずつチェックしていくしかないでしょう。

参考)LeftBについて
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200604/06040045.txt

【39857】Re:文字列を30バイトで切るには?
発言  ichinose  - 06/7/3(月) 11:49 -

引用なし
パスワード
   ▼mutu さん:
こんにちは。

Evaluateをとおして、ワークシート関数を使う方法もです。

新規ブックの標準モジュールに
'==============================================================
Sub main()
  Dim teststr As String
  With Range("a1")
   .NumberFormatLocal = "@"
   .Value = "123456789"
   MsgBox "セルA1 = ""123456789"" 9バイト取得" & vbCrLf & _
       "Evaluate(""leftb(a1,9)"") = " & _
         Evaluate("leftb(a1,9)") & vbCrLf & _
       "StrConv(LeftB(StrConv(.Value, vbFromUnicode), 9), vbUnicode) = " & _
         StrConv(LeftB(StrConv(.Value, vbFromUnicode), 9), vbUnicode) & vbCrLf & _
       "LeftB(.Value, 9) = " & LeftB(.Value, 9)

   teststr = "123456789"
   MsgBox "teststr = ""123456789""  9バイト取得" & vbCrLf & _
       "Evaluate(""leftb("" & teststr & "",9)"") = " & _
        Evaluate("leftb(""" & teststr & """,9)") & vbCrLf & _
       "StrConv(LeftB(StrConv(.Value, vbFromUnicode), 9), vbUnicode) = " _
        & StrConv(LeftB(StrConv(teststr, vbFromUnicode), 9), vbUnicode) & vbCrLf & _
       "LeftB(.Value, 9) = " & LeftB(teststr, 9)
   End With
End Sub

確認してみてください。

【39872】Re:文字列を30バイトで切るには?
お礼  mutu  - 06/7/3(月) 14:35 -

引用なし
パスワード
   ▼ichinose さん、Blueさん

ありがとうございました。
おかげさまで、うまくいきました。

StrConv(LeftB(StrConv(.Value, vbFromUnicode), 9), vbUnicode)
を使ってみようと思います。

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