- ベストアンサー
大至急!Accessで一定範囲のテーブルを自動追加する
いつもお世話になっております。大至急教えてください。 Accessで、連番「101~150」と数値範囲を指定すれば、 101 102 103 104 ・ ・ とその範囲の数字が自動的に入力され、テーブルが追加されるようにしてください。この数値範囲は、変動します。 よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>最初/最後 >1001/1100 >2200/2300 最初と最後は別のフィールドにしてください 数字テーブルとこのテーブルをクエリデザインビューに取り込み 結合はしないでおいて 連番:[最初]+数字 抽出条件欄に <=[最後] このクエリを追加クエリに変えます
その他の回答 (5)
#1です。 今、気がつきましたが、 > 大至急! > テーブルが追加されるようにしてください。 から、「丸投げ」質問ととられて、管理者から削除対象とされてしまうかもしれません。 ご注意を...
#1です。 実装ということになると、データベース自体の設計に関わってくるので、部外者である私には何とも言えません。 要するに答えはないのです。 フォームとして実装することも有るでしょうし、コマンド的に使うこともあるでしょう。 まあ、とりあえずは標準モジュール上に、「Public Function」として書いておき、 マクロ(エクセルで言うところのマクロ=VBAではありません)として実行させるか、 VBAエディタのイミディエイト・ウインドから実行させることになるでしょう。 なお、実装に際しては、既存のデータとの重複をどうするのかとか、エラートラップ(スタート値>エンド値で入力された時の処理など)をどうするかとかを考慮したコードを追加する必要が有ります。 また、フォームによる実装時は、InputBoxの部分は不要で、パラメータとしての記述に変わります。 何にせよ、人に訊いたコードをそのままコピぺするのでなく、 「ああ、このように設定すればいいのか」とパターンとして取り込むクセをつけないと、普遍的な知識にはなりません。 老婆心ながら...
お礼
お手数おかけして本当に申し訳ありません。 コードはそのままコピーせず、きちんと勉強していこうと思っています。ぜひ実践します。 今回は、目的を達成するまでに非常に時間がなく、今はただ「目的が果たせればよい。そのための方法を誰か教えてください!」というスタンスですが、アドバスは真摯に受け止め、次回に備えてきちんと勉強しようと思っています。
- CHRONOS_0
- ベストアンサー率54% (457/838)
VBAを使わない方法です 数字だけのテーブルを用意します 数字 ----- 0 1 2 ・ ・ 100 ←一度に追加したいレコードの予想最大数+余裕まで このテーブルから下のようなクエリを作ります 連番:[最初の数字は?]+数字 抽出条件欄に <=[最後の数字は?] このクエリを目的のテーブルに対する追加クエリに変えます
お礼
本当にありがとうございます。 確かにこちらの目的通りに実施できました。 もう1つだけ教えていただいていいですか? 今回のやり方の場合、この[最初の文字は?]と[最後の文字は?]に指定する数値を、あるテーブルに入力してあるデータを参照できますか? つまり、数字テーブルに1~100を入力して、別のテーブルに 最初/最後 1001/1100 2200/2300 というような情報を蓄積しておいて、上記の追加テーブルを使って 1001 1002 ・ ・ 1100 2201 2202 ・ ・ 2300 というデータを生成することです。 本当にお手数おかけして申し訳ありません。 どうかよろしくお願い致します。
#1です。ごめんなさい、一部間違えました。 誤: lngStartNum = MsgBox("Start Number:") lngEndNum = MsgBox("End Number:") 正: lngStartNum = InputBox("Start Number:") lngEndNum = InputBox("End Number:")
テーブル名を「Table1」、フィールド名を「Field1」(Long属性) とすれば、 Dim Tbl As ADODB.RecordSet Dim lngCnt as Long Dim lngStartNum As Long Dim lngEndNum As Long Set Tbl = New ADODB.RecordSet lngStartNum = MsgBox("Start Number:") lngEndNum = MsgBox("End Number:") With Tbl .Open = "Table1",CurrentProject.Connection,adOpenForwardOnly, _ adLockOptimistic,adCmdTable For lngCnt = lngStartNum To lngEndNum .AddNew .Fields("Field1").Value = lngCnt .Update Next .Close End With Set Tbl = Noting で如何でしょう。 なお、エラートラップは一切行っていませんので、あしからず。
お礼
返答ありがとうございます。 すごく初心者です。しかし、VBAの概念、モジュールの概念、マクロの概念等は理解しております。 実際に、上記の記述を実行したいとき、どこにどのように記述し、実行すれば良いかを教えてください。 お手数おかけします。よろしくお願いします。
お礼
できました!!! 本当に本当に本当に助かりました!!! 本当にありがとうございました。