静粛に、只今統計勉強中

仕事でデータ分析をすることになったバリバリ文系アラフィフのおっさんが、独学で統計の勉強を始めました。

【備忘録】MS AccessのテーブルにUTF-8のCSVをインポートするときに生じる不具合コンボの切り抜け方2

前回は、MS AccessCSVのインポート時に、自動判別してくれるはずの「長いテキスト」を判別してくれず、インポートエラーになった。というお話をしました。

自動判別してくれないのなら、しかたがないから自分でフィールドのデータ型を設定しましょう。 

 

テキストインポートウィザードで文字化けを解消するところまでは、前回と同じです。

以下の画面に遷移したら、スクロールバーで右にスクロールさせていき、データ型を変更するフィールドが表示されたら、フィールド名をクリックして選択します。

f:id:cyclo-commuter:20201117140700p:plain

 

[データ型]のコンボボックスで「長いテキスト」を選択します。→さらに右にスクロールさせます。

f:id:cyclo-commuter:20201117140917p:plain

 

数字や金額のフィールドが表示されたので、このフィールドも選択します。

f:id:cyclo-commuter:20201117141228p:plain

というのも、Accessはダブルクォーテーションで囲まれたデータを、数値であっても全て「テキスト」と認識してしまうからです。

f:id:cyclo-commuter:20201117141621p:plain

 

[データ型]のコンボボックスで「長整数型」を選択します。→以下、右スクロールしながら、上述の作業を繰り返します。

f:id:cyclo-commuter:20201117141746p:plain

 

「研究開始時の研究の概要」フィールドを「長いテキスト」に変更して、さらに右へ・・・・・ あれっ!?

f:id:cyclo-commuter:20201117142014p:plain

なんと、これより右に行くことができません!

f:id:cyclo-commuter:20201117142523p:plain

CSVの項目はまだまだ続いているのに、ですよ?

そう、これが第2の謎なんです。

テキストインポートウィザードでCSVの項目全てが表示されないという。

ちなみに、メモ帳で開いたCSVをむりやりANSI規格で保存しなおしてから、

f:id:cyclo-commuter:20201119093700p:plain

インポートしてみると、以下のようにきっちり最後まで表示されますので、

f:id:cyclo-commuter:20201117160226p:plain

UTF-8に特有の現象である可能性が高いです。*1

 

しかしここで解決策が一つ見つかりましたね。すなわち、CSVANSI規格で保存しなおしてからインポート、です。

ただし、このやり方はひとつ難点があります。メモ帳でANSI規格で保存する際に、以下のメッセージが表示されるのです。

f:id:cyclo-commuter:20201117155835p:plain

フィールドのデータ型は正しく、文字列の切り捨てもなくインポートできますが、もしかしたらどこかで文字化けしているかもしれない。これはちょっといただけません。

 

じゃあ、一度Excelで開いて、Excelブックとして保存してからインポートしてみたら?

手順としては、

  1. CSVファイルをダブルクリックして、Excelで開く*2
  2. [名前を付けて保存]で[ファイルの種類]を「Excel ブック」に変更
  3. 適当なフォルダに適当なファイル名を付けて保存

しておいて、Accessで[外部データ]→インポートのほうの[Excel]をクリック。

f:id:cyclo-commuter:20201118113520p:plain


保存したExcelファイルを選択して、【OK】をクリック。

f:id:cyclo-commuter:20201118114026p:plain

 

[先頭行をフィールド名として使う]にチェックを入れ、【次へ】をクリック。

f:id:cyclo-commuter:20201118114314p:plain


右へスクロールしながら、255文字以上のフィールドについてデータ型を「長いテキスト」に変更していきます。

f:id:cyclo-commuter:20201118130143p:plain


ANSICSVと同様に、最後のフィールドまで表示されました。→【完了】をクリック。

f:id:cyclo-commuter:20201118130248p:plain

 

インポート成功です。データ型は正しく、フィールドの切り捨てもされていません。

f:id:cyclo-commuter:20201118130524p:plain

 

この第2の解決策:UTF-8(ボム付)のCSVExcelで開いてExcel形式で保存してからインポートは、お手軽ですしインポートエラーもないので、これでOKのようにも思えます。

しかし、2つ気がかりがあります。

ひとつは、上述の手順でCSVExcelで開くと、文字列扱いの数値も強制的に数値に変換されてしまうので、001とか011などのレフトゼロが消去されてしまうことです。こういう文字列扱いの数値はたいていコードだったりするので、インポート後、コード表とリレーションするときに面倒なことになります。*3

もうひとつは、Excelの動作が重いことです。今回はCSVのファイルサイズが16.2MB程でしたから(ちょっと遅いな)くらいで済みましたが、ファイルサイズが大きくなると我慢できないほど待たされるかもしれません。

この第2の解決策は、これでバッチリ!とまでは言えないのです。

とういわけで、あと1回続けます。 

*1:ちなみに、BOMを外しても再現しました。

*2:BOM付きUTF-8でないと、文字化けします。

*3:この問題を回避する手段として「外部データの取り込み」を試みましたが、以下のエラー(というか警告)が表示されてしまいました。f:id:cyclo-commuter:20201118132356p:plain