Application.Dialogs(xlDialogOpen).Showを使って組み込みダイアログボックスを用いるさいに、
デフォルトではShift-JISで読み込んでしまうのですが、これをUTF-8など他のエンコード方式で読み込む
にはどのように記述すればよいのでしょうか。
(なお、Excelのマクロにはほとんど詳しくないため、
この質問や回答へのレスポンスで的外れな応答をしてしまうかもしれませんがご容赦ください。)
ファイル名が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
的外れな回答になるかも知れませんが、ご容赦を。
質問の内容は、次のうちのどれになりますか?
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エンコードのものがあり、そのまま開くと文字化けしてしまいます。
そこで読み込み時のエンコードを指定しながら開くマクロに変更する必要が発生した次第です。
ファイル名が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
返信が遅くなって申し訳ありません。
大変参考になりました。ありがとうございます。
返信が遅くなって申し訳ありません。
大変参考になりました。ありがとうございます。