- ベストアンサー
データ加工で困っています!
- WebでダウンロードしたデータをEXCELでカテゴリー別に分けたい。
- データの内容が異なるため、EXCELでのフィルタリングが難しい。
- Accessにデータをリンクするための初心者向けの方法を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>そうです。本当の目的は、Access上でそれぞれの進捗状況と >たまに集計する程度。それだけなんです。 了解しました。となるとExcelを介せずに、Accessだけで処理した方がいいですね。となりますと「全てのレコードをインポートして...」と先ほどは言いましたが、テキストファイルの時にカテゴリ毎に3つのファイルに分け、別々にインポートして3つのテーブルを作成した方がいいですね。 毎回、各カテゴリの中ではフィールドの数・名前が変わらないのであれば、最初にフィールド名を設定しておき、2回目からは追加で大丈夫だと思います。 >この先データが変動してもフィールド名がちゃんと残る方法は >ありますか? もとの読み込むテキストデータが変動した場合は、フィールド名はめちゃくちゃになりますね。これはどうしようもないです。 どんなデータでも自動的にフィールドを振り分けるには、VBAで1行ずつデータを読み込んで処理するしかないですが、この場合もフィールド毎に何かキーワードが付いているとか、パタンを調べて該当するフィールドに保存するようなことをしなければいけません。
その他の回答 (6)
- SAKUJOU
- ベストアンサー率26% (93/354)
確認ですが「Excelを使うのはカテゴリごとに分ける作業のためであって、最終的にはAccessのデータベースにしたい」ということでよろしいのでしょうか? >私も皆さんの意見を聞いて、このままAccessにリンクさせて クエリで分けようかと思ったんですが、その時最初のフィールド名を どのようにしたら良いのでしょうか…。 10、20、30のカテゴリはフィールド数が違うので1つのデータベースにするのは無理ですね。 手作業でするのならば、まず全てのレコードをインポートして(テキスト形式で読む)、最初のカテゴリで並び替え、カテゴリ毎にまとめてテーブル10、テーブル20、テーブル30と分けて保存します。 次にテーブル10と20とは「会社番号」でリレーションをとり、20と30とでは「会社+個人番号」でリレーションをとります。 後はクエリで表示させればいいです。 データが2レコードだとちょっと寂しいので、増やして実験してみましたが、できたような(?)気がします。
お礼
回答ありがとうございます! >確認ですが「Excelを使うのはカテゴリごとに分ける作業のためであって、最終的にはAccessのデータベースにしたい」ということでよろしいのでしょうか? そうです。本当の目的は、Access上でそれぞれの進捗状況と たまに集計する程度。それだけなんです。 今テキストファイルでそのままインポートして、クエリでそれぞれの カテゴリに分けたんですが、フィールド名が…。(ToT) アクションクエリでテーブル作成しても、更新すればフィールド名は 消えますよね。 この先データが変動してもフィールド名がちゃんと残る方法はありますか? ホント初心者ですみません。
- gatt_mk
- ベストアンサー率29% (356/1220)
>でも1行目と2行目だけじゃなく、カテゴリーごとに項目が違うんです。 そうなるとかなり高度なVBAで処理するしかないと思います。 1.Excelでテキストデータを読み込む。 2.最終データ行を判断し、最大行を取得する 3.項目"10"用の配列を確保する。 4.一番左のセルを移動しながら、値が"10"の場合配列に格納する。 5.最終行まで終了したら別のシート("10"用)にその配列内容を書き出す。 6.項目"20"用の配列を確保する。 7.一番左のセルを移動しながら、値が"20"の場合配列に格納する。 8.最終行まで終了したら別のシート("20"用)にその配列内容を書き出す。 9.項目"30"用の配列を確保する。 10.一番左のセルを移動しながら、値が"30"の場合配列に格納する。 11.最終行まで終了したら別のシート("30"用)にその配列内容を書き出す。 というような感じでできると思いますが、VBAの知識がかなり必要でしょう。
お礼
こちらも何度も回答ありがとうございます! やはりVBA勉強しないと駄目そうですか…。 出来れば避けたかった(笑) 本当は私がやるなら地道でも良かったんですが、今後メンテを するであろう人は、きっとそれすら無理そうだったので 何かあればなぁと思ってたんですけど。 しょうがないです。 でもこれを機会に、ちょっとだけ(無理しない程度に) VBA勉強してみます。(^^ゞ ありがとうございました。
- SAKUJOU
- ベストアンサー率26% (93/354)
これは元々1レコードで3種類のカテゴリが全て含まれていたデータだった訳ですよね? Web上に表示するために3ページに分けた、でそれを読み取って元のデータのようにしたい? となると、10と20は会社番号で、20と30とは会社+個人番号でリレーションがとれますので、まとめて1つでも3つのままでもAccessで元データのようにできますね。
お礼
何度も回答ありがとうございます。 そうなんです。Web上はなんともないデータなのに、ダウンロード すると、こんな形でしか出せないんです。 私も皆さんの意見を聞いて、このままAccessにリンクさせて クエリで分けようかと思ったんですが、その時最初のフィールド名を どのようにしたら良いのでしょうか…。 なにせ、カテゴリによって1レコードの情報の数も違うんです。 クエリで分けた後で、フィールド名って作れるんでしょうか?
- gatt_mk
- ベストアンサー率29% (356/1220)
たぶんご質問者は一行目の項目と2行目以降の項目レイアウトが違うので困っているのではないでしょうか? Excelではテキストデータを開く際に取込開始行を指定して開くことができます。2行目から開く形にして再度テキスト形式で保存すれば1行目を除いた形で保存できます。このあたりを自動化したかったらマクロの記録でも使ってマクロを作成してみてください(最低限のVBA知識は必要でしょう)。 後はACCEESSで1行目を除いたテキストデータをリンクテーブルにすれば自由に利用できるはずです。リンクテーブルを元にし1列目の項目の10,20,30の各値を条件にしてクエリを作成すれば、必要なデータだけ抜き出せるはずです。ACCESSの勉強はご自身でやってみてください。
お礼
回答ありがとうございます。 そうなんです!項目が違うんです。 でも1行目と2行目だけじゃなく、カテゴリーごとに項目が違うんです。 10番は会社の情報 会社番号、支店名、支店コード… 20番は個人の情報 会社番号、会社+個人番号、性別、生年月日… 30番は取引回数 会社番号、会社+個人番号、面談回数… という感じで、違う項目がずらっと並ぶんです。 カテゴリーごとに項目が違うので、それぞれをシートに分けて 既にフィールドが記入されているテーブルにリンクさせようと 思ったのですが…。 説明が足りなくてすみません。
- legacy_bp5_20r
- ベストアンサー率23% (400/1688)
エクセル2007だと100万行までいけますよ。(古いのは約6万5000行) これなら今までの知識で出来るでしょ。
お礼
回答ありがとうございます。 2007って100万までいけるんですか?ビックリです。 でも残念ながら、うちの会社が2007になるまで いる自身ないです。 まだ2002ですので…。
- SAKUJOU
- ベストアンサー率26% (93/354)
Accessの「外部データの取り込み」の「インポート」でこのTXTファイルを直接指定してカンマ区切りデータとして取り込み、10,20,30のフィールドをインデックスにします。あとはこのフィールドで並び替えすればよろしいかと。 もっと詳しくします?
お礼
回答ありがとうございます! 実はデータの区切りは知っているんです。 ダウンロードするファイルをCSVにすれば、データもちゃんと 区切って落とせるんです。 ただ、その後カテゴリーナンバーごとにシート別にするのが ちょっと面倒かなと思いまして…。 やはり地道にやった方が良いのでしょうかね…(v_v)。
お礼
回答ありがとうございます! やっぱりAccessにインポートする時に3つに分けるしかないですよね。 でもWebのデータはダウンロードする時は、全部落ちてしまうんです。 追加が何処に入るかは分かりません。 どっちにしろ、取りあえずVBAで振り分ける方法を考えることにしました。 簡単にはいかないとは思いますが、これも良い機会なので 明日本屋に行って来ます。(^O^)/ 初心者の私に何度もありがとうございました!