• ベストアンサー

アクセスエクセルのマクロについて

社内システムから 毎日 夜間バッチで更新される access のデータベースを、加工したいと思います 。 1、access上の過去10年分の無駄なデータを削除し 本年分だけを残す 2、新たに1列挿入し計算式を入れる 3、カテゴリ毎の合計を出す 以上の手順をルーティン化したいと考えています。 この場合、accessで全てを行うのと、access→Excelへ データを落とし込みマクロを組むのとどちらが スムーズでしょうか? 因みにaccessのみで作業するとデータが重いのか エラーが出てしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (254/607)
回答No.5

>大元のデータは全てそのまま保存しておきたいです。 そこから年単位で一部抽出したうえで、新たに項目を列として追加したかったのですが ------------------------------------------------------------------------------------------------------------ うっかり手を付けると思わぬトラブルが発生する恐れがあります。 「大元のデータ」ではなく、「大元のファイル」をコピペすると 「大元のファイル名&”のコピー”」のファイルが出来ます。 こちらでお試しなさるとよいでしょう 例えば、 消費税を仕組みに組み込むとき「金額」は「税込み金額」、「税抜き金額」、「消費税」、「税率」と増やします。 増やした項目は旧レコードにも適用されますが値は空白(Null値)です。 テーブルの数値項目に1つでもNull値のレコードがあると計算エラーとなります (エクセルでは0と解釈しますね) そのため数値項目の規定値を0と定義しておきます。

happyskip
質問者

お礼

早速ありがとうございます! Accessデータを壊してしまいそうで 冒険出来なかったのですが、コピーなら 安心ですね!思い付きませんでした… 更に具体的な項目の追加方法まで ありがとうございます! アクセス講座も受講し、何とかご回答の意図も 理解出来るようになりました。 わかりやすくご教示頂きありがとうございます!

その他の回答 (4)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

社内システムから 毎日 夜間バッチで更新される access のデータベースを、加工したいと思います 。 ---------------------------------------------------------------------- システムの仕組みが判明しないので何とも言えませんが 「夜間バッチ」の必要は無いと思われます。 ※仕組みとは、テーブルの数、各テーブルのレコード数、 顧客マスタのような固定的のものと 売上テーブルのように日々追加されるもの、 リレーションシップがどのようなものか 1、access上の過去10年分の無駄なデータを削除し、本年分だけを残す ----------------------------------------------------------------------- 月報、年報のため、ある年数は残しておきましょう レコード数が肥大化して、古いレコードを削除するときは日付が5年以上前のレコードを削除するには VBAまたは抽出クエリで一括削除が可能です。 2、新たに1列挿入し計算式を入れる ------------------------------------------------------------------------- エクセルでは、計算式ですがAccessのフィールドに計算式を入れることはできません 3、カテゴリ毎の合計を出す -------------------------------------------------------------------------- レポート、集計クエリで可能です 以上の手順をルーティン化したいと考えています。 ----------------------------------------------------------------------------- 古いレコードの年1回、月1回の削除をルーチンと言えますか カテゴリ毎の合計は日報ですか、月報ですか、年報ですか この場合、accessで全てを行うのと、access→Excelへ データを落とし込みマクロを組むのとどちらが スムーズでしょうか? ---------------------------------------------------------------------------- access→Excelはできても、ExcelのデータによりAccessのレコードを削除することはできません

happyskip
質問者

お礼

もやっとした質問に筋道を つけてくださってありがとうございます!

happyskip
質問者

補足

ありがとうございます! 大元のデータは全てそのまま保存しておきたいです。 そこから年単位で一部抽出したうえで、新たに項目を列として追加したかったのですが…

回答No.3

サンプルデータの開示・データ量・処理量、 クライアント端末の能力などなどがわからないと見積もりすらできません。 どちらにしても、全てアクセスのクエリで充分に対応可能だと思いますが・・ とりあえず、 1.クエリで本年分だけ取り出すことが可能です。   重いのはクエリの組み方の問題だろうと思います。 2.アクセスのテーブルに列を挿入するのは   無駄にデータを大きくするだけです。   もともとテーブルに保持している値を基に演算させるのであれば   通常はクエリ上で演算・表示します。 3.集計クエリを使います。   というか、アクセスの強みの一つです。 というわけで、アクセスで持っているならアクセスで完結するのが早いです。 ルーティンも何もクエリを組んで実行、 必要ならクエリを関連付けたレポートを用意しておいて印刷するだけ。 ここまでの作業ならマクロ・VBAは必要が無いです。 まぁ・・ 具体的なサンプルもテストデータもここでは開示できないでしょうから、 回答もどうしてもあいまいになってしまいます。 1番さんもおっしゃる通り、 > 夜間バッチで更新される access のデータベース とのことですから、社内にSEさんがいらっしゃるでしょう。 まずはそちらに相談なさってはいかがでしょうか。 というか、そのバッチ処理にそれら機能を追加してもらうくらいなら 造作無いと思うのですが、どうなのでしょう? バッチで「accessのデータベース」を作ってくれるシステムなのだから 容易いことだと思いますよ。 良くてもCSVファイル、というシステムが多いですからね。

happyskip
質問者

お礼

もやっとした質問にご回答ありがとうございます! seさんに依頼は大事になりそうで避けていたのですが そんなに難しくないのですね。 アドバイス通り、アクセスだけで何とか出来るか まずは試してみます!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

データの数のオーダーはいくらぐらいですか。参考までに書くべきでしょう。 10万、100万、数百万レコードとか。 また1か月分に絞ると、データ数はいくらぐらいか。 ーー エクセルに持ってくるのは簡単です。ADOを使って、CopyFromRecordset でできるし、同時に前処理として、SQL文でデータの日付を1か月に絞ることはできる。 その後エクセルのピボットテーブルでカテゴリ別の表を出すのは簡単。 他にアクセス内で、クロス集計クエリ(VBAでも)もあり、またピボットテーブルもあります。 1か月のレコードに絞る部分と集約表を作る部分を分けて(量的に処理時間的にどのようか把握して)考えては。 参考 http://excelwork.info/excel/adocopyfromrecordset/ https://okwave.jp/answer/new?qid=9386201 日付で絞る http://accessvba.blog.so-net.ne.jp/2011-11-21 VBAといっていながら、質問は初心者らしく、(>新たに1列挿入し計算式を入れるなどと、アクセスの話題で出すのはよくわかっているのかな)聞く意味がつかめない。 WEBでキーワードで照会すれば、コード例は出てくる程度の内容だと思う。 >スムーズでしょうか VBAでやれば、本件では、処理に人手は加わらないのだから、聞いてもしょうがない。 コンピュター処理時間を短くしたいなら、簡単ではなく、小生程度の力では、答えにくい。いまの質問者の状態では、言える技量ではないのでは。 本件アクセスVBAの中級者以上なら、違った質問になるだろう。 社内に、教えてもらう専門家はいないのかな。

happyskip
質問者

お礼

ありがとうございました 参考にさせて頂きます

  • gkrsnama
  • ベストアンサー率25% (3/12)
回答No.1

>新たに1列挿入し計算式を入れる というところがよくわかりません。アクセスのテーブルに計算式は入りません(文字列として入れることはできるが、当然に計算しない) >データが重いのかエラーが出てしまいます。 400万レコードとか、あるフィールドにタグ付きテキスト1MB程度を入れて、コードを書いてデータを取り出すとか、そういうこともできますが? エクセルの機能を直接に使わない限り、アクセスの方が安定していて能力が高いです。 一般的に言ってエクセルのマクロはアクセスと別物です。アクセスはデータベースという目的に向かって整理されているので、コードは簡単。エクセルはどんな使い方もできるので、コードは多様でややこしくなります。

happyskip
質問者

お礼

ご回答ありがとうございます。 アクセス初心者で質問も手探りです… テキストを入れてコードを取り出す? そんなことも出来るのですか! 質問するレベルにすらないことを痛感したので、 せっかく頂いた回答を生かすためにも 明日アクセス講座に行くことにしました! どうもありがとうございました!

happyskip
質問者

補足

ご回答ありがとうございます。 アクセス初心者で質問も手探りです… 一列挿入し計算式を入れたかったのは、アクセスの価格表示が 税込だけなので新たに税抜表示を加える必要がありまして… そしてデータ個別に別途名前の列も加えたくて。

関連するQ&A

  • Access2000 マクロでデータベースの最適化

    お世話になります。 Accessのマクロのコマンドで データベースの最適化をしたいのですが、 「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化されません。 マクロの一連の流れの「最後」で、データベースの最適化をしたいと 思っていますが、具体的にどのようにすれば、 データベースの最適化を実行できるのでしょうか? 条件としては、最適化をVBAなどでするのではなく、  マクロのコマンド:データベースの最適化 でしたいと思っております。 また、過去に何度か質問したのですが、 私の質問文が悪く、希望する回答を えれませんでした。 勝手で申し訳ございませんが A.mdbファイルを「マクロコマンド:データベースの最適化」で 最適化する具体的手順を教えて頂けないでしょうか? ※最適化の手前で、データベースを閉じたり等 具体的手順以外の回答は結構ですので、 宜しくお願いします。 ※具体的手順を記載できない場合は、この質問は 無視して下さい。 宜しくお願いします。

  • Accessのマクロ

    オラクルからアクセスへテーブルをエクスポートする際ですが、メニューバーから外部データー取り込みではなくマクロを使用してアクセスへインポートしたいと思います。この場合マクロのデーターベース変換でインポートするのが良い方法でしょうか?それとも他に何か良い方法があるでしょうか?オラクルとはリンクせず、テーブルのみアクセスのデーターベースへインポートしたいと思っています。 よろしくお願いします。

  • Accessのマクロの最適化

    Accessでマクロを1つ新規作成します。 作成したマクロのアクションに、「コマンドの実行」を選択し、 画面下のコマンドには、「データべースの最適化」を選択します。 しかし、「マクロまたは、VisualBasicコード実行中に開いているデータベースを最適化することはできません。」とメッセージが出ます。 メッセージの意味はわかりますが、そもそも、なぜ、マクロに、 「データベースの最適化」を選択することができるのでしょうか? できないんじゃ意味ないんじゃないですか?

  • Access、マクロの最後に最適化を入れられる?

    Access2003を使用しています。 マクロの最後に最適化を組み込むことは可能でしょうか? マクロの内容は、 1、昨日のデータ抽出に使用した作業用テーブル内のデータを削除する 2、本日のデータをインポートしてくる 3、1で空にしたテーブルに、2のデータを追加クエリで流し込む 4、2でインポートしてきたデータ(テーブル)を削除する です。 この後、「5、データベースを最適化する」を入れてマクロを終わらせたいのです。 インポートしてくるテーブルは8個あり、1テーブルに20万を超すデータが入っているため、インポート、追加をやっているうちに、データベースの大きさが1,126,528KBにもなってしまいます。 この後、この大容量のテーブルを使って、大容量のテーブルを作成しているうちに・・・・データベースは更に大きくなってしまい困っています。 マクロの最後に「ここで一旦最適化」を入れられないでしょうか? このデータベースを使用するのは自分で使用するものでないため、「マクロ終了後ツールボタンで最適化する」ということが出来ません。 また、VBAはわからないので・・・出来ればマクロなどで対応できると助かります。 どなたか詳しい方、教えてください!

  • Access データベースの最適化をマクロでしたい

    お世話になります。 Access2000のマクロコマンドで データベース最適化をしたいのですが、 「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化できませんでした。 マクロの一連の流れの「最後」で、データベース最適化をしたいと 思っていますが、具体的にどのようにすればよいのでしょうか? 最適化をVBAなどでするのではなく、  マクロのコマンド:データベースの最適化 でしたいと思っております。 過去の質問で、mdb自身が開いているので絶対に無理!! と言われたのですが、いまいち信じられません。 ・私が求める回答は、VBA・プロシージャは使用しない ・マクロコマンドのデータベースの最適化を使用 ・マクロの流れの一部で実行 ・具体的手順を記載できる人のみ回答をお願いします。 何度か同様の投稿をしましたので、ユーザーから迷惑!と言われていますので  もうこれ以上同様の投稿はしたくありません。 この質問が迷惑と思われている方は、回答しなければ  これ以上質問はしませんので、無視お願いします。 ひつこいですが、 ・マクロコマンド:最適化を使用した具体的手順を記載できる人のみ回答をお願いします。 宜しくお願いします。

  • ExcelからAccessデータを検索するマクロ

    ExcelのA1セルにある値をAccessのデータベース (ファイル名:abc.mdb、テーブル名:Tbl_a)の フィールド1から検索し、対応するレコードの フィールド2の値をExcelのB1セルに書き込む というマクロはどのように書けばよいのでしょうか? Excel, Accessともに2000です。 よろしくご教授お願いします。

  • Access起動中にExcelで参照

    AccessのVBAで、インターネットを検索してデータを収集中に、Excelでそのデータベースを参照するようなことってできるのですか? 別の言い方をすると、Accessであるデータベースのデータを絶えず更新しながら、別のソフトでそのデータベースのデータを利用することってできるのでしょうか? よろしくお願いします。

  • マクロ Excelデータ Accessへ

    マクロでExcelのデータでAccessにテーブルを作成する方法を教えていただけないでしょうか? Accessに接続して加工したテーブルのデータをExcelにコピーすることはできたのですがExcelのデータをAccessにコピーするマクロがわかりません。 どなたかお知恵を拝借できないでしょうか。 よろしくお願いいたします。

  • エクセルのマクロやアクセスについて

    よろしくお願いします。 アクセスや、エクセルのマクロやVBAについて勉強しようと思っています。 (転職活動の時、上記のものを使えますか、とよく質問されたため) 今は本を読んで自分でやっているのですが、いまいち実際にどのように使うのかがイメージがわきません。 エクセルのマクロやVBAは、単純作業を自動化するものだと勉強しましたが、関数式でも作れるものもあり、どのような場面で使うのかイメージがわきません。 アクセスに関して、エクセルでもできることもあり、データベースとしてアクセスを使ったほうが良い時というのはどのような時なのかがわかりません。 アクセスであれば本を見ながら、顧客伝票などを作ったりしました。しかし、顧客伝票とか作らない部署では必要ないツールなのか?と言われればたぶんそうではないと思うのですが。。。 データの解析とかでもアクセスは使うと思うのですが。 実際上記のものはどのような場面で使うのでしょうか? また、独学で勉強し、一通り学ぶのにはどれくらい時間がかかるでしょうか? 3か月必死で勉強すればある程度こなせるでしょうか? お金の問題上、スクールに通うのではなく本で勉強したいです。 アドバイスをお願いします。

  • Excel マクロでアクセスQueryを操作

    現在エクセル マクロでADO.Connectionを使いアクセスのデータベースからデータを取り込み、そしてエクセル側で条件に合う検索やマッチングをしているのですが、その検索やマッチングをアクセスのクエリ等を利用してアクセス側で自動的に検索及びマッチング結果を用いたテーブルを作り、それからエクセル側にインポートする方法はないのでしょうか? 

専門家に質問してみよう