エクセルの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も見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
高校三年生の合唱祭で何を歌いましたか?
大人になると大人数で合唱する機会ってないですよね。 思い出すと、高校三年生の合唱祭が最後でした。 そこで、みんなの思い出の合唱曲を知りたい!
-
StrConvの使い方について教えてください。
Visual Basic(VBA)
-
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
Accessで文字列のバイト数読み込み
Ruby
-
-
4
EXCELのVBAでLenB関数について
Excel(エクセル)
-
5
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
6
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
7
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
8
エクセルVBAのエディターが上書きモード?に・・・・。
Excel(エクセル)
-
9
他のフォームから別のフォームのサブルーチンを呼び出す
Visual Basic(VBA)
-
10
EXCEL/VBA 変数の値をクリップボードにコピーする方法
Visual Basic(VBA)
-
11
VBAのstrConv関数のUNICODE変換について
Visual Basic(VBA)
-
12
split関数で区切り文字がない場合
Visual Basic(VBA)
-
13
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
14
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
15
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
16
VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。
Android
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス ステータスバーの文...
-
文字列から、null値を除去する方法
-
指定バイト目を取り出すにはど...
-
XMLでデータとして画像を指定す...
-
VBA 変数名に変数を使用したい。
-
C#でテキストボックスに入力し...
-
VB2005でACCESSの処理
-
Access2007でアプリケーション...
-
VBSでADOを使ってaccessのテー...
-
VBA(メモリ展開)
-
グラフの「項目軸ラベルに使用...
-
ACCESSで日別集計をする場合
-
RGBとHSLを相互変換する際の端...
-
構造体配列の安定なソート
-
アクセスでウェブ上のデータを...
-
コンボボックスのインデックス...
-
VB.NETでのAccessテーブルリンク
-
Access 2010で実行時エラー3061
-
VC++ std::stringからLPCWSTRに...
-
配列をランダムに並び替えても...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
StrConvでUnicodeに変換出来な...
-
TextFieldParserの固定長桁数を...
-
CString型 全角半角を意識せず...
-
文字列から、null値を除去する方法
-
一番右のスペース以降の文字列...
-
機種依存文字と特殊文字について
-
VBからID3タグをいじる方法
-
ASC関数
-
アクセス ステータスバーの文...
-
エクセルで13,410円を数値の134...
-
WSTRINGとは?
-
VB6のテキストボックスに入力し...
-
「シフトJIS X 0213」形式の文...
-
VB6.0 文字列のファイル書...
-
マルチバイト混在の文字列整形
-
C言語とWin32APIで全角かなの...
-
ワードのVBAで
-
Access VBAの参照設定(DAO)につ...
おすすめ情報