〜Excelインポート時の型変換エラーを回避する方法〜#533Excelインポート時の型変換エラーを回避する方法VBAExcelのワークシートをAccessのテーブルとしてインポートする際は、ワークシートの先頭から8行分に保存されているデータが事前にチェックされ、各列のAccessテーブル上でのフィールドのデータ型が決定されます。そのため、数値や文字の両方を含んでいる列(Access上では「テキスト型」にすべきフィールド)であっても、ワークシートの前の方に数値データしか格納されていないと、Access上では「数値型」フィールドと定義され、文字データを含む行をインポートする際にデータ型変換のエラーが発生してしまいテーブルには取り込まれません。CSVファイルのインポートでは各例をどのようなデータ型として取り込むかをユーザーが設定できますが、Excelのファイル(.xls等)の場合はそのような設定ができないため、何らかの工夫をする必要があります。Excel側で事前に先頭8行にあえてデータ型が混在するようにしておくなどの手段があります。一回限りのインポート操作ならそれが一番簡単なのですが、システム運用でしばしばインポート処理する場合、たとえば何らかの業務実績データを毎日毎日Excelから取り込むような処理をフォームのコマンドボタンに割り付けてあるような場合、毎回Excelのワークシートを確認したり編集したりするのは困難です。そこで、そのような問題を回避するひとつの方法として、VBAを使って次のような考え方で処理を行ってみます。インポートする際は、ワークシート1行目の見出し行をデータとして扱いインポートするふつう見出し行は漢字等の表記が多いはずなので、それによってすべての列が「テキスト型」とみなされます。なかった場合にはあらかじめ文字列表記に変えておきますが、1行目は固定化されているはずなので、業務上の不都合は少ないはずです。・・・」のようになっています。それを「F1→社員ID」のように変更していきます。このとき、見出し行は1レコード目としてインポートされていそうですが、必ずしもそうなりません。よって見出し行のレコードを見つける際はその点を配慮してプログラミングします。最後に、見出し行のレコードを削除するこれをVBAで実際に表現すると次のようなコードになります。Withなおここではインポート先テーブル名と主キーフィールド名を固定としてプログラミングしていますが、ケースによって異なると思いますので、その都度書き換えるか、上記全体をプロシージャ化してそれら2つを引数に設定してもよいかもしれません。|この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。