エクセルの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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 以前シートを集めて1シートへ繋げる下記コードをご教授いただき作成しました。 今回すでに集めてある「ま 1 2022/08/29 20:38
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
- Excel(エクセル) エクセルでセルに何らかの文字が入力されたらそれを任意の数値として認識させる方法がしりたいです。 3 2023/03/16 20:19
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) エクセル文字列の日付を日付けに変える 2 2023/05/13 11:08
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
StrConvの使い方について教えてください。
Visual Basic(VBA)
-
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
Accessで文字列のバイト数読み込み
Ruby
-
-
4
EXCELのVBAでLenB関数について
Excel(エクセル)
-
5
マクロで半角を全角に
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
split関数で区切り文字がない場合
Visual Basic(VBA)
-
8
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
9
UNICODE文字が含まれているかのチェック
Visual Basic(VBA)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
12
SQLの速度をあげるには・・・
Visual Basic(VBA)
-
13
ListViewで複数選択された項目を一度に削除する方法
Visual Basic(VBA)
-
14
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
15
Line Inputで文字化け(助けて下さい)
Visual Basic(VBA)
-
16
エクセルでエラーが出て困っています。
Excel(エクセル)
-
17
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
18
VBAでブック保護非保護を判定するには?
Excel(エクセル)
-
19
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
20
Access サブフォームでの選択行の取得
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CString型 全角半角を意識せず...
-
アクセス ステータスバーの文...
-
機種依存文字と特殊文字について
-
StrConvでUnicodeに変換出来な...
-
VB6のテキストボックスに入力し...
-
VBからID3タグをいじる方法
-
一番右のスペース以降の文字列...
-
TextFieldParserの固定長桁数を...
-
ファイル名の一部削除について
-
エクセルで13,410円を数値の134...
-
C言語とWin32APIで全角かなの...
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
VB6.0の「vbFromUnicode」はVB....
-
配列の中の最大値とそのインデ...
-
エクセルでXY座標に並べられた...
-
『列名 '担当者CD' があいま...
-
INT64対応のprintf系関数はあり...
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名の一部削除について
-
EXCELのVBAでLenB関数について
-
CString型 全角半角を意識せず...
-
TextFieldParserの固定長桁数を...
-
文字列から、null値を除去する方法
-
一番右のスペース以降の文字列...
-
StrConvでUnicodeに変換出来な...
-
エクセルで13,410円を数値の134...
-
機種依存文字と特殊文字について
-
アクセス ステータスバーの文...
-
VB6.0 文字列のファイル書...
-
VB6のテキストボックスに入力し...
-
「シフトJIS X 0213」形式の文...
-
ワードのVBAで
-
【Excel VBA】セル内テキストの...
-
VB.NET ListBox内の前方一致で...
-
HEX
-
8進数文字、16進数文字とは
-
VBからID3タグをいじる方法
-
WSTRINGとは?
おすすめ情報