
エクセルのVBAで、StrConv関数を使用して、文字列をUnicodeに変換しようとしているのですが、特定の文字が変換できません。
解決方法をご存知の方は教えてください。
現象:StrConv("マミムメモ",vbUnicode)で変換すると、ムメモが文字化けしてしまう。
確認方法:
MsgBox StrConv(StrConv(InputBox("入力"), vbUnicode), vbFromUnicode)
で、InputBoxに"マミムメモ"を入力すると、メッセージボックスに"マミ???"と表示されてしまう。
No.3ベストアンサー
- 回答日時:
> Outlookで使用しているレジストリに格納して、Outlookでその文字列を
> 使用したいのですが....
最初に言ってもらわないと...^^;
VB(A) の SetSetting/GetSetting ステートメントではアクセスできる場所
に制限がありますので、Outlook のレジストリにアクセスしているとなると
API を使ってますね?
恐らく API の使い方にミスがありそうです。
ヒント:API の宣言部に間違いはありませんか?
ヒント:API に文字列を渡す場合、ByVal キーワードを使って渡します。
ヒント:RegSetValue API の引数 cbData は、Unicode --> Shift-JIS に
変換したバイト長+1、つまり最後がNullで終わるように渡さないと、
NT 系 OS では正しく書き込めません。
Ex) CLng(LenB(StrConv("文字列", vbFromUnicode)) + 1
アドバイスありがとうございました。
マイクロソフト社に問い合わせたところ、VB(A)から呼び出せるAPIでは、当該のOutlookのレジストリに正しく文字列を書き込むことはできないのだそうです。。。。
WMIを使う方法を案内してもらって、解決することができました。
度々、回答いただきまして、ありがとうございました。
No.2
- 回答日時:
vbUnicodeとvbFromUnicodeを反対にするのでは?
MsgBox StrConv(StrConv(InputBox("入力"), vbFromUnicode), vbUnicode)
No.1
- 回答日時:
こんにちは。
ご質問文にあるとおりの用途なら、
> StrConv("マミムメモ",vbUnicode)
これは Unicode をさらに Unicode へエンコードしているため文字化けします。
以下を実行すると分かります。
MsgBox LenB(InputBox("入力", Default:="マミムメモ1"))
結果は 12 を返します。「マミムメモ1」 は全角5文字+半角1文字の計 11
バイトですが、Unicode は全角・半角ともに 2 バイトなので
6文字×2バイト = 12
ですね。InputBox からの入力は Unicode です。
Buf = StrConv(Buf, vbFromUnicode)
(中間処理)
Buf = StrConv(Buf, vbUnicode)
といった処理で文字化けするなら、コード全体を補足する必要があります。
> MsgBox StrConv(StrConv(InputBox("入力"), vbUnicode), vbFromUnicode)
以上の理由で、これは使い方自体が間違えてますよ。
回答ありがとうございます。
もし、ご存知でしたら、なぜ「マミ」は正しく変換され、「ムメモ」は変換されないのか教えて下さい。
実は、実際にやりたいことは、InputBoxで入力した文字列を変換したいのではありませんでした。
Excelのセルに表示している文字を、Outlookで使用しているレジストリに格納して、Outlookでその文字列を使用したいのですが、その際に「マミ」はOutlookで正しく表示され、「ムメモ」は正しく表示されなかったのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
StrConvの使い方について教えてください。
Visual Basic(VBA)
-
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
UNICODE文字が含まれているかのチェック
Visual Basic(VBA)
-
-
4
EXCELのVBAでLenB関数について
Excel(エクセル)
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
7
byte型をstring型として扱うには
Visual Basic(VBA)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
10
Redimした動的配列はEraseする必要があるのか
Visual Basic(VBA)
-
11
UTF8のテーブルをODBCドライバ経由のMS Accessから開くと日本語が文字化けする
MySQL
-
12
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
13
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
14
VBAのstrConv関数のUNICODE変換について
Visual Basic(VBA)
-
15
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
16
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
17
Excelの警告について
Excel(エクセル)
-
18
【ExcelVBA】UTF-8(BOM無)でCSV保存するには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
TextFieldParserの固定長桁数を...
-
VB6のテキストボックスに入力し...
-
VBScriptで半角カナと半角英数...
-
アクセス ステータスバーの文...
-
一番右のスペース以降の文字列...
-
機種依存文字と特殊文字について
-
CString型 全角半角を意識せず...
-
「シフトJIS X 0213」形式の文...
-
VBA 変数名に変数を使用したい。
-
VB6.0の「vbFromUnicode」はVB....
-
エクセルでXY座標に並べられた...
-
SQLを発行とは?クエリの作成と...
-
[C#] DataGridViewでコンボボッ...
-
フォームからのデータの受け渡...
-
C#でbyte配列から画像を表示さ...
-
【VB】コンボボックスにデータ...
-
2つ目のレコードの値を取得す...
-
C# DataTableに最後に追加した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
StrConvでUnicodeに変換出来な...
-
CString型 全角半角を意識せず...
-
一番右のスペース以降の文字列...
-
エンコード・デコードの仕方
-
「シフトJIS X 0213」形式の文...
-
文字列から、null値を除去する方法
-
TextFieldParserの固定長桁数を...
-
VB6のテキストボックスに入力し...
-
VBからID3タグをいじる方法
-
【Excel VBA】セル内テキストの...
-
C#文字コードについて
-
HEX
-
文字列の中に半角文字があるか...
-
ASC関数
-
機種依存文字と特殊文字について
-
Err.Number
-
chrをintに変換すると…
-
C言語とWin32APIで全角かなの...
おすすめ情報