• ベストアンサー

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

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

noname#118698
noname#118698

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7986/21351)
回答No.1

ここら辺が参考になるかな? いずれにせよ「要VBA」です。 http://www.nurs.or.jp/~ppoy/access/access/acM018.html http://www.ka-net.org/office.html Access2007にすると動かなくなることもあるので、コードの 組み方には注意が必要です。手動でやる方が正解なように 私は思いますけど・・・。

noname#118698
質問者

お礼

すっごい早い回答、ありがとうございます! うう~む・・・やっぱりマクロのみでは難しいですか・・・(^^;) VBAは勉強中なんですが、今ひとつ自信がなくて、マクロでなんとかしたかったのですが・・・ せっかくなので、これを機会にVBAを組み込んでみようと思います。 教えていただいたURL、難しそうですが参考にさせていただきます。 ありがとうございました!

その他の回答 (1)

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.2

マクロのみで、となると難しいです。 最適化とは一言で言っても、中身で複雑な処理をしていますから・・。 可能であれば、Accessを Shift + ダブルクリック(もしくはEnterキー) で開いて(ファイルが開くまでそのままShiftキーは押してください。) マクロ→自分の作ったマクロをダブルクリック そこに実行プログラムが書かれているので、それの最下部に http://www.accessclub.jp/samplefile/samplefile_74.htm このサイトを参考に(内容は適宜変更してください。)、最適化の処理を入れるのが手っ取り早いです。 それでないなら、直接的な解決策にはなりませんが、閉じる際に自動的に最適化することは可能です。 上記と同じく、Shift+ダブルクリック(Enter)でファイルを開き、 ツール→オプション→「閉じる時に最適化する」にチェック→適用 で閉じるときに最適化されますが・・・。(すでにしていたらすみません。) とりあえず実践してみて無理でしたら補足お願いします。 できる限りお手伝いします。

noname#118698
質問者

お礼

素晴らしく早い回答、感激です。ありがとうございます。 やはりマクロだけでは難しいのですね・・・ 最初の方のお礼にも書かせていただきましたが、VBAに取り組んでみようと思っています。 ちなみに閉じる際の自動最適化は既にやっているのですが、閉じるまでにすっごい大きさになってしまって・・・最後の最適化もすっごい時間がかかってしまって・・・(^^;) 途中になんとか一回最適化を入れられないかな?って思った次第です。 自分で使うDBならばいくらでも途中で最適化をかけられるのですが・・・パートのおば様数人に使っていただくので、出来る限りボタン一つで動くようなものを作りたいのです。 いくらマニュアルに「ここで最適化をして下さい。最適化の方法はツールバーの~」と詳細に書いても(というか詳細に書けば書くほど?)、馴染みない方には何のことやら訳わからず、となってしまいそうなので。 >とりあえず実践してみて無理でしたら補足お願いします。 >できる限りお手伝いします。 もうすっごい有難うございます!(>_<) ちょっと聞いてみたらこんなに親切なお言葉・・・なんか残業も辛くなくなりそうです。 とりあえずVBAは詳しい方が社内にいるので、彼女に聞きながら頑張ってみます。 本当にありがとうございました。

関連するQ&A

  • Access2002のマクロ条件について

    WindowsXPでAccess2002を使用しています。 このたび、過去の方が作成されたAccessを修正することとなりました。 VBAを使用したものではない簡易なファイルですが、マクロの条件を変更しようとしても なかなかうまくいきません。どのようにすれば宜しいでしょうか。 ---------------- ≪現在の仕様≫ テーブル名:T#ZIP フォーム名:F#Select クエリ名:Q#Delete、Q#Import マクロ名:M#Create_Table (1)Access起動時(の設定)は「F#Select」というフォームが開く (2)下記マクロ「M#Create_Table」が実行される  マクロ1行目:下記条件のとき、マクロを中止する          [Forms]![F#Select]![CRTDATE]=Date()  マクロ2行目:テーブル「T#ZIP」のデータを削除するクエリ「Q#Delete」を実行する  マクロ3行目:テーブル「T#ZIP」にデータを追加するクエリ「Q#Import」を実行する ≪動き≫ 前提:「F#Select」の[CRTDATE]というフィールドには「T#ZIP」が更新された日が設定される その日初めてそのAccessを開くと、マクロにより削除クエリ~追加クエリが順番に実行された後、 フォーム「F#Select」が表示される。その後Accessを終了し、同日中に再度Accessを開いても マクロは実行されない --------------- 現在、追加するデータが多い場合、時間がかかりインポートが途中で失敗することがあるのですが 再度Accessを開いても既にインポート済みと判定されてしまい、自動的にはマクロは実行されない という課題があります。 インポートが失敗するとき、削除は完了しているため、テーブルデータは0件なので、 「その日に既にテーブルを更新済み かつ テーブルデータ件数が1件以上ある場合」 マクロを中止する、という条件を設定したいと思います。 そこで、マクロ1行目の条件欄に [Forms]![F#Select]![CRTDATE]=Date() And DCount("[T#ZIP]","*")>0 と記載したところ、その日最初のインポートはうまく行っている様子ですが、 マクロ終了後に突然Accessが終了したり、再度Accessを開いても「F#Select」が 全く表示されなくなったりと、うまくいきません。 バグというよりは、私の設定が悪いのだと思われますので、 ・フォーム[F#Select]の[CRTDATE]フィールドが Date()   かつ ・テーブル[T#ZIP]に1件以上でもデータがある 場合はマクロを中止する としたい場合の条件設定方法(入力内容)につきまして、どなたかおわかりの方 ご教示いただけますでしょうか。 何卒よろしくお願いいたします。

  • Accessのマクロ

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

  • ACCESS2000 クエリをテーブル化するマクロ(VBA)おしえてください

    こんにちは。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1801262 の質問者です。コレの続きを教えてください。 まとめますと、クロス集計クエリや、ユニオンクエリをそのまま扱うと、データや計算式がからまってエラーになったり、処理が遅かったりするので、テーブル化してからいじりたいのです。 マクロは データベース変換 変換の種類…インポート データベースの種類…MS ACCESS データベース名…L:\パス\パス\ファイル名.MDB オブジェクトの種類…クエリ オブジェクト名…クエリ名 変換先名…テーブル名 テーブル構造のみ変換…いいえ としてみましたが、クエリとしてインポートされてしまいます。 いちどCSVか何かでエクスポートしてから、テキスト変換するという手もありますが、もっとスマートな方法がありましたら教えてください。 VBA も勉強中なので、VBAでお答えいただいてもけっこうです。 よろしくお願いします。

  • アクセス 自動インポートマクロで

    アクセス 自動インポートマクロで以下のようなものを作りました。 (1)テーブル「人事データ」をテーブル「人事データ(前回分)」としてコピー (2)エクセル「人事データ」をテーブル「人事データ」としてインポート (3)テーブル「人事データ」と「人事データ(前回分)」の不一致をクエリで抽出 (4)エクセルに出力 そこで、(2)の項目でインポートする際に、「人事データ040325」といったように後ろに日付をつけることはできますか? どこまでインポートしたか履歴を知りたいためです。

  • ACCESSのマクロに関しまして

    お願いします。 ACCESS97で追加クエリを作成し、その後自動起動にしようと思い、マクロで追加クエリを項目に入れマクロを作りました。 マクロを作成する際に、モジュールでレコード追加するテーブルを一度削除しようと思い、「DELETE文」でモジュールを作成し、マクロの追加クエリの前に「プロシージャの実行」でモジュールのプロシージャを実行するようマクロに記述しました。 <マクロ内容> (1)「プロシージャの実行」  (追加クエリで追加するテーブルの中身をDELする) (2)「クエリを開く」  (追加クエリでレコード追加) この用に記述し、マクロ名を「AutoExec」で記述して、ファイルを実行してもマクロが起動しません。 (1)の「プロシージャの実行」までは、実行されているようなのですが(テーブル内確認)、以降の追加クエリが実行されません。 何か他の設定があるのでしょうか? お願い致します。

  • accessマクログループの全マクロの実行方法

    お世話になります。 現在、顧客のデータベースを作成しております。DBは名前、住所等の連絡先を入力したテーブルを元に下記のクエリやマクロを作成しています。取引がない顧客等はメイン名簿テーブルから削除して、メインテーブルの構造をコピーした、削除テーブルに入れるようにしたいと考えています。 そこで下記のテーブル、クエリ、グループマクロを作成しました。グループマクロは作成したクエリ3つで構成されています。各アクションクエリは一個一個は正常に作動するのですが、グループマクロを実行しますと、1行目のクエリしか実行されません。実行方法はマクロの画面で更新ボタンを押しても、フォームに削除というボタンを作成してクリック時にグループマクロを実行させるよう設定した場合の両方で起きます。  グループマクロに登録されているマクロを全て実行するにはどうしたらいいのでしょうか。色々調べると、グループマクロは1行目しか実行できないようですが、全て実行する簡単な方法はありませんか?できればVBAではない方法を希望します。大変お手数ですがどうぞ、よろしくお願い致します。  ・(テーブル)メイン名簿(以下、名簿tblとします)    ⇒フィールド:名前、郵便番号、住所、電話、メモ欄、削除の有無、削除処理日  ・(テーブル)削除テーブル(以下、削除tblとします)    ⇒フィールドは上記と同じ  ・(更新クエリ)削除処理日追加    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除処理日」に処理日が     入力されるようにdate関数を設定しています。(date())  ・(追加クエリ)削除tblへ追加    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、「削除tbl」へそのレコードを、     追加する。    ・(削除クエリ)名簿tblからの削除    ⇒名簿tblの「削除の有無」フィールドにyesと入力されていれば、名簿tblからそのレコードを、     削除する。  ・(マクログループ)削除処理(上から順番に実行希望)     マクロ名           アクション     クエリ名     削除処理日追加     クエリを開く    (更新クエリ)削除処理日追加     削除tblへコピー      クエリを開く    (追加クエリ)削除tblへ追加   名簿tblからの削除    クエリを開く    (削除クエリ)名簿tblからの削除                                                        以上

  • EXCELのマクロ記録でMSアクセス操作は可能?

    EXCEL2003のDATA(SHEET1全体)をアクセス2003の指定されたテーブルに取り込む操作を マクロの記録で行いたいのですが可能でしょうか?。 VBA等難しく思えるので、マクロの記録だけでできるといいのですが....。 下記のような操作はVBAで簡単に組めますでしょうか?。 (1)アクセスのBBB.MDBのTTTというテーブル内のDATAを全削除してテーブル閉じる (2)AAA.XLSのsheet1全体をTTTのテーブルにインポート。 (3)データーベースの最適化を行い保存して閉じる。 以上初歩的かもしれませんが、どなたかお願いします。

  • Access のテーブル上で文字列の操作をしたい

    Excelからデータをインポートし、他のデータベースとリンクしているデータとの不一致データを抽出したいのですが、 Excelからインポートしたデータは ・全て大文字 ・文字の後に半角1スペース に対し、データベース側は ・全て小文字 ・文字の後ろにはスペースがない の為、全て不一致となってしまいます。 Excelからインポートしたデータをテーブル上で「文字を全て小文字に変換」し「不要なスペースの削除」をする事はできませんでしょうか? クエリ上で文字を小文字にする事はできましたが、変換した(テーブルにフィールドがない)データとクエリする事ができず煮詰まってしまいました。。 どなたか教えてください。。

  • Accessのマクロ

    Access2002で、「氏名(テーブル名:name)」と「日付<○月○日~○月○日>(テーブル名:date)」でレポート内容が検索できるのを作っています。 フォームに 氏名一覧、日付入力、検索ボタン、最新データの取り込みボタン を作っています。 「検索」の方は出来たのですが、「最新データ取り込み」をしようとすると、 『テーブル'name'は現在ほかのユーザまたはプロセスで使用されているので、ロックできませんでした』というエラーメッセージがでてきます。 「最新データ取り込み」ボタンに対してのマクロのアクションは、 オブジェクトの削除…テーブル/report テキスト変換…reportインポート定義 オブジェクトの削除…テーブル/name クエリを開く…name作成(テーブル作成クエリ) としています。 (「マクロの実行」で指定) フォームに表示されている氏名(name)を削除しようとしているために、このようなエラーメッセージが出ているのかとも思っていますが…。 フォームを閉じずに、「最新データ取り込み」ができないものでしょうか? ご教示の程、よろしくお願いします。

  • ACCESS2000 VBAを使用して最適化したい

    ACCESS2000を使用しています。 VBAでデータベースの最適化/修復を行いたいと思っています。 連番をリセットしたいのですが、可能でしょうか? ツールからオプションでチェック入れることはわかりますが・・・ たとえば、データを入力しクエリで他テーブルに追加し 新規でまたこのテーブルにデータを入力していく作業があります。 クエリで他テーブルに追加した時点で、テーブルのデータを作成し、最適化して全くの新しいデータを1番からの連番で入力したいです。 出来ますか?

専門家に質問してみよう