PR

Excel for mac(2011) QueryTableで文字化けを起こさない形式は、Unicode(BOMあり)

macのExcel2011でVBAを試す!では、
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時の結果
mac-excel-QueryTable-1

VBAの作成

開発タブからエディターボタンをクリックします。
mac-excel-QueryTable-2

プロジェクトウィンドウで、標準モジュールを追加します。
mac-excel-QueryTable-3

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/ユーザー フォームの実行を選択します。
mac-excel-QueryTable-4

QueryTable.TextFilePlatformは機能していない?

実行結果
mac-excel-QueryTable-5
この結果を見る限り、TextFilePlatformの指定は全く無意味に見えます。
(不具合なのかなぁ・・・)

文字化けしないで、読み込める方法は、唯一 UNICODE-BOMあり だけです。

結論、Excel:mac 2011のQueryTableで文字化けしないためは、

UNICODE-BOMあり形式にする必要がある。

データインポートウィザードを使った読み込みのトリックに注意!

ファイルメニュー → インポート…からインポートウィザード機能でファイルを
取り込むことができます。
mac-excel-QueryTable-6

実際のインポートを確認した結果、
文字化けが発生しないファイルは、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は普通に読み込めると思っていました・・
どこかやり方間違ってる?

タイトルとURLをコピーしました