ちょっと途方にくれていますので力を貸してください。
エクセルで作られたデータベースもどきのモノがあります。
中身は、さすがエクセルで作られていただけあって整合性はかなりめっちゃくちゃです。
重複もしまくってますし、数値とテキストが入り混じっています。
ひとまずテーブルとして取り込んではみたものの、フィールドはほとんどテキストで取り込まざるを得ませんでした。
さて、具体的に聞くのも難しいのですが、いったい何をしたらいいのでしょうか。
まずは、フィールドのデータ型の設定をしないことにはどうにもならんのですが、
この作業は今後も継続して行われるため、全てクエリで作成してしまいたい。
エクセル上で「毎回正しいデータ型に加工してから取り込む」というのはかなり難しい、(というか不可能)です。
経験上、こんな場合はみなさんどういう手順で何をどうされてますか???
用語の使い方がところどころ怪しいかもしれませんが、おおよそざっくりアドバイスをください。
koriki-kozou さんと逆のやり方になってしまうんですが、
1 テキストでインポート。
2 クエリ作成。ここで型を決めたテーブルに入れてみる。
3 インポートエラーが出るので、その部分だけ改めて確認。
4 変換用クエリ作成。もう一度さっきのテーブルへ入れてみる。
これの繰り返しですべてを格納しました。
EXCELでの作業が多くなると、
確認のために並び替えを行うことでズレが出ることもあります。もちろん操作ミスしたらですけど。
なので早めにAccessに入れるようにしてます。
データ量が多いときや集中してないときはそうするようにしてます。
あと、テーブルにコピペする形でも入れることできますから、順序に縛られずに
EXCEL、Accessどちらがやりやすいかを考えて作業すると楽ですよ。
キーの重複を整理するには、テーブルにインポート後、キー項目だけでグループ化、重複のないテーブルを新規作成。
その後に、不一致クエリをするとか。
今後も同様の作業があるとした場合は参考になるかもしれませんので、経験談。
他社のシステムとの連携でCSVで渡されるものがあるんですが、
そのCSVからAccessで帳票を作成し、SQLserverに突っ込む必要がありました。
一番最初にインポートするのはテキストのままにしてます。
その後に続く変換のためのクエリなどの修正でこちら側のDBの構造を変える必要はなくなります。
いらない部分は切れるし、足りない部分は問題ないように補うなりできますし。
すべてテキストで処理したら駄目なんですか?
データの重複も許せばよいのではないですか?
何が駄目なんでしょう?
整合性のないまま、そもまま処理すればよいだけでは?
>フィールドはほとんどテキストで取り込まざるを得ませんでした
そこは鬼になって、最初から数値型であるべきところは数値型、テキストであるべきところはテキストとして読み込まなければならない
読み込みに失敗したレコードについては別途で吐き出されるので、吐き出されたレコードの状況に応じて対応していくことになる
吐き出されたレコードに法則性が見受けられれば自動処理化への希望も見えてくる
見えてきても、おおよそ基本的にクエリだけでの対応は不可能に近いだろう
Access側で対処できそうなものであればAccessVBAで処理することになる
AccessVBAよりはExcelVBAのほうが扱いやすいため、インポートエラーとなる法則性みたいなものを把握できたならば
おおよそはExcelVBA側で変換しておいてからAccess側でインポートという手を使うと楽
(csv出力したものをテキスト処理してからAccessにインポートとか、他にもいろいろと手はあるが、その辺はスキル次第)
今回限りの作業であれば、以上のような感じ
今後も定期的に発生するならばExcelのほうで入力規則を設定してしまう/フォームを作って対応/ExcelVBAで入力チェックするなど、状況に応じて対応を考えなければならないです
インポートエラーの画像を探して以下が引っかかった。参考になりそうなので書き加えておきます
第 2 回 「インポート方法の選択とエラー対処」 ‐ Access へ既存データをインポートする
http://www.microsoft.com/japan/technet/archive/columns/suo/acces...
第 1 回 「はじめにルールありき」 ‐ Excel 関数を使ってみましょう ‐
http://www.microsoft.com/japan/technet/archive/columns/suo/excel...
全角数値と半角数値が混じっている場合があるならば 半角数値に変換して取り込ませればいいです。
ロジックはどのような全角数値があるかによっても変わってきますので、それに応じたロジックを作らなければいけません。
たとえば
1000という値だったら 1000 に変換するとか
千を 無条件に 000するなど。
2千 だったら 2000 にするとか。
で、手順としては 普通に取り込んで、取り込めたデータには ○をつけ だめだったやつは ×をつける。
で、×のついたデータだけ目で確認して データを手動で変換 もしくは 共通性があれば
変換用のロジックを作成して 取り込むとなります。
そのデータが、123,456,りんご,日本,789,DOG,TRUE,,,なんていう完全にはちゃめちゃな場合を除き
1番の人に同じです。すべてテキストとして処理することに私も何ら違和感を持ちません。
何をどのように処理しているかデータを見ないことには解りませんが、
たとえば"00123"と"123"は違う。として処理したい場合とか
"6/8"とか"3/8"←日付でも分数でもなくそういったモノ、たとえば管や工具のサイズ等を扱う場合は
テキストでなければならない場合もありますし、ソートや抽出もやり方如何でいくらでも可能だからです。
正規化(フォーマットの特定)は日頃良く行われる処理で必ず何か不都合が生じる等、
不都合そのものが特定出来てからでよいのではないでしょうか?
そのほうがより明確に何をどうしたらよいのかの指針が解ります。
エクセルのデータがぐちゃぐちゃでお困りで、アクセスにしたい。
で、今後もエクセルでデータを取り込まなければいけない。
ですか?
とりあえずは、
エクセル上で各フィールドの型を整理
数字は数字
テキストはテキスト
その他の型はきちんと決めて整理
で、データ型をちゃんときめたアクセスにインポート
で、この先はアクセスで作ったビューから入力してもらう。
じゃ、まずいでしょか。
自分だったらどうするか? という回答になってしまいますが
データの整合性うんぬんはExcelだAccessだという問題じゃないので
まずWYSIWYGなExcel上で
(1)列などの構造を揃える(同じ意味のデータは同じカラムになるように)
(2)列ごとの属性を判断して、文字列や整数,小数,通貨などの書式を設定する
(3)オートフィルタなどを使いできる限り重複データを削除
(4)このExcelファイルを雛形にして、Accessのテーブル構造定義を行い
以後も雛型にしたExcelファイルと互換性のあるようにExcelを作らせる
(5)同じ雛型を元にしてクエリーの呼び出しなども共通で簡単になるようにする。
とかかな。
漠然としててすいません。
koriki-kozou さんと逆のやり方になってしまうんですが、
1 テキストでインポート。
2 クエリ作成。ここで型を決めたテーブルに入れてみる。
3 インポートエラーが出るので、その部分だけ改めて確認。
4 変換用クエリ作成。もう一度さっきのテーブルへ入れてみる。
これの繰り返しですべてを格納しました。
EXCELでの作業が多くなると、
確認のために並び替えを行うことでズレが出ることもあります。もちろん操作ミスしたらですけど。
なので早めにAccessに入れるようにしてます。
データ量が多いときや集中してないときはそうするようにしてます。
あと、テーブルにコピペする形でも入れることできますから、順序に縛られずに
EXCEL、Accessどちらがやりやすいかを考えて作業すると楽ですよ。
キーの重複を整理するには、テーブルにインポート後、キー項目だけでグループ化、重複のないテーブルを新規作成。
その後に、不一致クエリをするとか。
今後も同様の作業があるとした場合は参考になるかもしれませんので、経験談。
他社のシステムとの連携でCSVで渡されるものがあるんですが、
そのCSVからAccessで帳票を作成し、SQLserverに突っ込む必要がありました。
一番最初にインポートするのはテキストのままにしてます。
その後に続く変換のためのクエリなどの修正でこちら側のDBの構造を変える必要はなくなります。
いらない部分は切れるし、足りない部分は問題ないように補うなりできますし。
コメント(0件)