
エクセルの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)
-
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
-
4
VBAのstrConv関数のUNICODE変換について
Visual Basic(VBA)
-
5
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
6
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
7
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
8
EXCELのVBAでLenB関数について
Excel(エクセル)
-
9
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
Redimした動的配列はEraseする必要があるのか
Visual Basic(VBA)
-
12
VB6のAttribute VB_Nameの意味について
Visual Basic(VBA)
-
13
split関数で区切り文字がない場合
Visual Basic(VBA)
-
14
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
15
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
16
UNICODE文字が含まれているかのチェック
Visual Basic(VBA)
-
17
Accessで文字列のバイト数読み込み
Ruby
-
18
Excelの警告について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ワードのVBAで
-
C言語とWin32APIで全角かなの...
-
アクセス ステータスバーの文...
-
文字列から、null値を除去する方法
-
ファイル名の一部削除について
-
マルチバイト混在の文字列整形
-
StrConvでUnicodeに変換出来な...
-
一番右のスペース以降の文字列...
-
機種依存文字と特殊文字について
-
WSTRINGとは?
-
VB6.0 改行コードのないファイ...
-
ACCESSデータベースにV...
-
SQLを発行とは?クエリの作成と...
-
vba フィルター 複数条件 3つ以...
-
AccessからExcelへエクスポート...
-
『列名 '担当者CD' があいま...
-
C#でbyte配列から画像を表示さ...
-
VBA 変数名に変数を使用したい。
-
Dir関数で読み取り順を操作でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
CString型 全角半角を意識せず...
-
StrConvでUnicodeに変換出来な...
-
機種依存文字と特殊文字について
-
一番右のスペース以降の文字列...
-
TextFieldParserの固定長桁数を...
-
文字列から、null値を除去する方法
-
アクセス ステータスバーの文...
-
マルチバイト混在の文字列整形
-
Access VBAの参照設定(DAO)につ...
-
全角文字と半角文字を判別して...
-
VBからID3タグをいじる方法
-
VB6のテキストボックスに入力し...
-
ASC関数
-
【Excel VBA】セル内テキストの...
-
エンコード・デコードの仕方
-
「シフトJIS X 0213」形式の文...
-
バイナリデータの取り方
-
VB.NET ListBox内の前方一致で...
おすすめ情報