人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelのマクロに関する質問です。
Application.Dialogs(xlDialogOpen).Showを使って組み込みダイアログボックスを用いるさいに、
デフォルトではShift-JISで読み込んでしまうのですが、これをUTF-8など他のエンコード方式で読み込む
にはどのように記述すればよいのでしょうか。

(なお、Excelのマクロにはほとんど詳しくないため、
この質問や回答へのレスポンスで的外れな応答をしてしまうかもしれませんがご容赦ください。)

●質問者: firstheaven
●カテゴリ:コンピュータ
✍キーワード:application Excel JIS UTF-8 ほと
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● airplant
●10ポイント

的外れな回答になるかも知れませんが、ご容赦を。


質問の内容は、次のうちのどれになりますか?

  1. テキストファイルウィザードでのデフォルトをUTF-8にしたい
  2. htmlファイル読み込み時のデフォルトをUTF-8とみなしたい
  3. Excelの中身がUTF-8のファイルを読みたい
  4. ファイル名がUTF-8のものを読みたい

No.3とNo.4は多分ないと思われます。

No.2は何も意識しなくても、自動的にUTF-8を解釈して正しい内容を表示します。

残るは、No.1という想定で回答します。


先ず、Excelのバージョンは2003以上ですよね?

2003以上であれば、テキストファイルウィザードが出て、「元のファイル」という欄でUTF-8や他のエンコード方式が選べます。これを選ばずに自動で行いたいものという想定で進めます。

(Excel2000以下だと、エンコード方法が選べないと思いました。もし2000なら、バージョンアップするしかなさそうです)

No.1 テキストファイルウィザードでのデフォルトをUTF-8にしたい

これは、「Application.Dialogs(xlDialogOpen).Show」では実現できないので、次のように自前でファイル選択後のオープン処理を書く必要があります。

Workbooks.OpenTextのところは、マクロを記録で実際に動作させる内容を記録してみて、適宜書き換えてください(普通のUTF-8テキストは、これで読み込みできました)。

Sub OpenUTF8textFile()
 Dim strFilter As String
 Dim vFileName As Variant
 
 strFilter = "txtファイル (*.txt), *.txt,すべてのファイル (*.*),*.*"
 vFileName = Application.GetOpenFilename(filefilter:=strFilter, _
 MultiSelect:=False, Title:="ファイル選択")
 If vFileName = False Then
 MsgBox "ファイル選択がキャンセルされました"
 Else
 MsgBox vFileName & "を開きます"
 Workbooks.OpenText Filename:=vFileName, Origin:=-535, StartRow:= _
 1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
 ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
 , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
 TrailingMinusNumbers:=True
 End If
 
End Sub

http://www.google.co.jp (ダミーです)

◎質問者からの返答

ご回答ありがとうございます。

ご説明が不足していて申し訳ないのですが、実現したい内容はNo.3になります。

以前はApplication.Dialogs(xlDialogOpen).Showを使用してShift-JisエンコードのCSVファイルを開いていました。

しかし、中にはUTF-8エンコードのものがあり、そのまま開くと文字化けしてしまいます。

そこで読み込み時のエンコードを指定しながら開くマクロに変更する必要が発生した次第です。


2 ● airplant
●100ポイント ベストアンサー

ファイル名がxxx.csvで、中身がUTF-8の場合、エンコードの種類は指定できないようです。

仕方ないので、xxx.csvをxxx.txtのように名前を変えればエンコードの種類を指定できます。

サンプルを掲載しておきます。

要は、Dialogs(xlDialogOpen).Showでも、Workbooks.OpenTextでも、ファイル名が.csvだとエンコードはシステム任せになってしまうようです。

エンコードの種類は、OpenTextの「Origin:=-535」で指定しています。

各項目に数字タイプや文字タイプが混在している場合は、「新しいマクロを記録」でWorkbooks.OpenTextの一部を記録された内容に置き換えてください。

Sub OpenUTF8csvFile()
 Dim strFilter As String
 Dim vFileName As Variant
 Dim strNewName As String
 
 strFilter = "csvファイル (*.csv), *.csv,すべてのファイル (*.*),*.*"
 vFileName = Application.GetOpenFilename(filefilter:=strFilter, _
 MultiSelect:=False, Title:="ファイル選択")
 If vFileName = False Then
 MsgBox "ファイル選択されませんでした"
 Else
 MsgBox vFileName & "をリネームしてから開きます"
 strNewName = Left(vFileName, InStrRev(vFileName, ".", -1, vbTextCompare)) & "txt"
 Name vFileName As strNewName

 Workbooks.OpenText Filename:=strNewName, Origin:=-535, StartRow:= _
 1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
 ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
 , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
 TrailingMinusNumbers:=True
 
' ここに本来の処理を記載

 ActiveWorkbook.Close
 Name strNewName As vFileName
 
 End If
 
End Sub
◎質問者からの返答

返信が遅くなって申し訳ありません。

大変参考になりました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ