10月07日
Excel for mac(2011) QueryTableで文字化けを起こさない形式は、Unicode(BOMあり)
macのExcel2011でVBAを試す!では、
Excel:mac 2011のVBAでQueryTableを使ったウェブ経由のデータ読み込みを試しました。
この際、文字化けが発生し、残念ながら文字化けを解決することはできませんでした。
QueryTableの特性を理解するために、サンプルコード&ファイルで動作を確認していた
ところ、
文字化けを発生させない形式は、Unicode(BOMあり)のみという
衝撃的?な事実が判明しました。
Excel:mac 2011のVBAでQueryTableを使ったウェブ経由のデータ読み込みを試しました。
この際、文字化けが発生し、残念ながら文字化けを解決することはできませんでした。
QueryTableの特性を理解するために、サンプルコード&ファイルで動作を確認していた
ところ、
文字化けを発生させない形式は、Unicode(BOMあり)のみという
衝撃的?な事実が判明しました。
QueryTable TXTファイルの読み込み確認
文字化けしない読み込み方法を確認するために
UTF-8(BOMなし), UTF-8(BOMあり), EUC, SJIS, JIS, UTF-7, Unicode, UnicodeBE形式で
ファイルを作成します。
各ファイルのデータは、すべて「mac野郎なのか」としました。
Excel:mac 2011で以下のようなシートを作成します。
A列:テキストファイルへのファイルパス
B列:コメント
C列:QueryTable.TextFilePlatform=xlMacintosh時の結果
D列:QueryTable.TextFilePlatform=xlWindows時の結果
E列:QueryTable.TextFilePlatform=xlMSDOS時の結果
VBAの作成
開発タブからエディターボタンをクリックします。
プロジェクトウィンドウで、標準モジュールを追加します。
test()関数を追加します。
Sub test()
Dim targetRange As Range
Dim t As Range
Dim fileName As String
Dim destination As Range
Dim platForm As Integer
Set targetRange = Range("A2:A11")
For Each t In targetRange
fileName = t.Value
For platForm = 1 To 3
Set destination = t.Offset(0, 1 + platForm)
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fileName, _
destination:=destination)
.RefreshStyle = xlOverwriteCells
.TextFilePlatform = platForm
.SaveData = True
.Refresh
End With
Next platForm
Next t
End Sub
実行します。
実行メニュー→Sub/ユーザー フォームの実行を選択します。
QueryTable.TextFilePlatformは機能していない?
実行結果
この結果を見る限り、TextFilePlatformの指定は全く無意味に見えます。
(不具合なのかなぁ・・・)
文字化けしないで、読み込める方法は、唯一 UNICODE-BOMあり だけです。
結論、Excel:mac 2011のQueryTableで文字化けしないためは、
UNICODE-BOMあり形式にする必要がある。
データインポートウィザードを使った読み込みのトリックに注意!
ファイルメニュー → インポート...からインポートウィザード機能でファイルを
取り込むことができます。
実際のインポートを確認した結果、
文字化けが発生しないファイルは、SJIS, Unicode(BOMあり)だけです。
Unicode(BOMあり)のファイルは、元ファイルの切り替えコンボでいろいろ変更できますが
表示の変化がありません。(おそらく切り替えに意味がない状態)
SJISのファイルは、元ファイルの切り替えで「日本語(MacOS)」とすると文字化けしない状態でインポートできます。
SJISファイルも正しく読み込める!と喜びましたが・・・マクロに記録して、
実行すると、文字化けします。
記録されたSJISファイルインポートのマクロ
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;f$:macyarounanoka:textfile.sjis.txt", destination:=Range("E1"))
.Name = "textfile.sjis_12"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.Refresh BackgroundQuery:=False
.UseListObject = False
End With
どうやら、インポートウィザードでは、事前に「文字化けしない形にコンバートする」処理が
あるようで、この処理自体は、マクロに記録されないようです。
Excel:mac 2011 QueryTableを使う場合、
Unicode(BOMあり)ファイル形式に統一しておく事が、
文字化けの発生を防ぐ唯一の方法のようです。
SJIS、UTF-8は普通に読み込めると思っていました・・
どこかやり方間違ってる?
コメントシステムを利用したくない方はお問い合わせからお願いします。
2013.8.19 DISQUS(外部コメントサービス)の利用を開始しました。
Facebook, google, Twitter等のアカウントで投稿可能です。