質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

11786閲覧

VBAの中のSJIS文字列をUTF8に変換したい

akihiro0117

総合スコア32

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2019/06/04 05:06

VBAの中からDBにSQLを発行する際にテーブル名等がUTF8である必要があるので、変換しようとしています。
ADODB.Streamを使用するのが一般的なようなので、以下のコードを書いたのですが、うまくいきません。

現象としては、下記コード中の2か所のMsgBoxの出力が空であるとうことです。
WriteText がうまくいってないのか、ReadTextの使い方が間違っているのかと悩んています。

詳しい方にアドバイスをいただけますと幸いです。

VBA

1Public Sub test() 2 Dim adoStreamSJIS As ADODB.Stream 3 Dim adoStreamUTF8 As ADODB.Stream 4 Dim bufSJIS As String 5 Dim bufUTF8 As String 6 7 bufSJIS = "あいうえお" 8 9 Set adoStreamSJIS = New ADODB.Stream 10 With adoStreamSJIS 11 .Charset = "SJIS" 12 .Open 13 .Type = adTypeText 14 '.Type = adTypeBinary 15 End With 16 17 Set adoStreamUTF8 = New ADODB.Stream 18 With adoStreamUTF8 19 .Charset = "UTF-8" 20 .Open 21 .Type = adTypeText 22 '.Type = adTypeBinary 23 End With 24 25 adoStreamSJIS.WriteText bufSJIS, 1 26 MsgBox adoStreamSJIS.ReadText 27 adoStreamSJIS.CopyTo adoStreamUTF8 28 bufUTF8 = adoStreamUTF8.ReadText 29 MsgBox bufUTF8 30 31 adoStreamSJIS.Close 32 adoStreamUTF8.Close 33 34 Set adoStreamSJIS = Nothing 35 Set adoStreamUTF8 = Nothing 36 37End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/06/04 05:15

> VBAの中からDBにSQLを発行する際にテーブル名等がUTF8である必要がある どのようにSQLを発行しているのですか? DAOで行う分にはそんな縛りはなかったと思うのですが。
sazi

2019/06/04 05:52

ODBC経由ならsjis→utf8変換はコードページの指定をすればやってくれますし
hatena19

2019/06/04 06:10

ひょっとして、 VBAコード内でSQL文を生成しようとしているが、テーブル名にSJISにない文字が含まれているので、VBAエディター上では入力できない、ということかな。 だとしたら、そのテーブル名を提示してもらえますか。 上記の推測が外れているなら、スルーしてください。
hatena19

2019/06/04 08:19

「VBAの中からDBにSQLを発行する際」のコードを提示された方がいいかも。で、どこでうまくいかないのか説明された方がいいですね。 saziさんが言われるようにDAOでもADODBでもそのような縛りはないので。
guest

回答3

0

ODBC経由と勘違いしていましたが、ネイティブのドライバで接続していました。
ODBC経由の接続に変更したところ、文字化けせずに実行できました。

投稿2019/06/09 12:35

akihiro0117

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Shift_JISをUTF-8に変換することが本当の目的であれば、以下サイトのコードが参考になると思います。

エクセルの神髄|鵜原パソコンソフト研究所
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集

投稿2019/06/09 08:29

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

vba

1 Dim bufSJIS As String 2 3 bufSJIS = "あいうえお"

上記の部分の変数名から推測するに、
bufSJISには、シフトJISで格納されていると勘違いされているように思われます。
実際は、Unicodeです。VBAにおいて、文字列(String型)は Unicodeで扱われます。

Unicodeを無理矢理シフトJISとして読み込んで、UTF-8 に変換というまったく無意味な処理をしていることになります。

そもそも、VBA上て「DBにSQLを発行する」のはDAOかADODBを介することになりますが、
DAOかADODBに渡すSQL文はUnicode、つまりString型の文字列でいいわけで、UTF-8 に変換する必要性はありません。

ここからは、推測ですか、現状の問題点は、
テーブル名等に、シフトJISにはない Unicode文字が含まれている。
それを、VBAエディタ上で入力すると文字化けする、ということではないですか。

もし、この推測があっているなら、問題点は下記になります。

VBAにおいて、文字列(String型)は Unicode である。(Office2000 から Shift-JISから Unicode に変わった。)
ところが、VBAエディターは未だにShift-JISのままで、Unicode対応になっていない。よって、Shift-JISに存在しない文字を入力すると文字化けする。

対処法の提示は、この推測があっているか、どうかの返答が質問者さんから出てからにします。

また、推測が外れているなら、「DBにSQLを発行する」コードを提示して、どこでどうまくいかないのが具体的に説明してください。

投稿2019/06/04 13:02

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問