TIL

Today I Learned. 知ったこと、学んだことを書いていく

ADOでExcelファイルを読み込んだ時に文字列がNullになってしまうときの対処法 - VBA

結論

Extended PropertiesIMEX=1を追加する!

解説

Excelファイルを読み込むとき、1行目がヘッダーで2行目以降がデータである場合、そのままデータベースとして読み込むことができるため、すごい便利。

でも、仕様バグでしっかりとデータが存在するにもかかわらず、Nullとして読み込まれてしまうことがあるらしい。

これは、Excelの上位8行を読み込んでその列の一番多い型でデータを読み込むようになっているため、おこってしまうらしい。例えば、数値が5行、文字列が3行であれば、その列は数値型として読み込まれる。

対処法

まず、すべての列を文字列として読み込むようにする。もし、数値として使いたい場合は読み込んだ後に必要に応じて変換をする。

すべて文字列で読み込むにはRecordSet生成時に指定する"Extended Properties"パラメータのIMEX1を指定する。こうすることでインポートモードとなり、すべて文字列で読み込んでくれる。

※指定した列がすべて数値の場合には数値型として読み込んでしまうため注意が必要。一つでも文字列があれば文字列型として読み込んでくれる。

必ず文字列として読み込む工夫としては、Excelの1行目にすべて文字列を入力しておくことで、必ず文字列として読み込むようになる。

参考文献