- ベストアンサー
アクセスのVBEの初歩的な質問
アクセス(に限らないとは思うのですが)のVBEを今、一生懸命勉強しているのですが、初歩的なところで、つまずいています。 あああ いいい ううう えええ 1 1 あいうえお かきくけこ 1 2 あいうえお かきくけこ 1 3 あいうえお かきくけこ 2 1 あいうえお かきくけこ 2 2 あいうえお かきくけこ 2 3 あいうえお かきくけこ 3 1 あいうえお かきくけこ 3 2 あいうえお かきくけこ 3 3 あいうえお かきくけこ というような、データを自動で入力したいのです。多分、for next と、do until あたりを組み合わせるとできると思うのですが、どうしてもうまくいきません。 とりあえず、以下のような、めちゃめちゃ効率の悪いコードを書いたのですが、もっと効率よくするには、どうしたらいいでしょうか? ………………………………………………… Private Sub コマンド6_Click() Dim Aaa As Integer Dim Bbb As Integer Dim Ccc As String Dim Ddd As String DoCmd.GoToRecord , , acFirst Aaa = 1 Bbb = 0 Ccc = "あいうえお" Ddd = "かきくけこ" For i = 1 To 3 Bbb = Bbb + 1 あああ = Aaa いいい = Bbb ううう = Ccc えええ = Ddd DoCmd.GoToRecord , , acNext Next i Aaa = 2 Bbb = 0 For i = 1 To 3 Bbb = Bbb + 1 あああ = Aaa いいい = Bbb ううう = Ccc えええ = Ddd DoCmd.GoToRecord , , acNext Next i Aaa = 3 Bbb = 0 For i = 1 To 3 Bbb = Bbb + 1 あああ = Aaa いいい = Bbb ううう = Ccc えええ = Ddd DoCmd.GoToRecord , , acNext Next i End Sub …………………………………… ほんとうに、おはずかしいのですが、どうかご指導くださいませ。m(__)mm(__)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Dim dbs As DAO.Database Dim rst As DAO.Recordset Dim lngIdx1 As Long Dim lngIdx2 As Long Set dbs = Currentdb Set rst = dbs.OpenRecordset("テーブル名") For lngIdx1 = 1 To 10 For lngIdx2 = 1 To 3 rst.AddNew rst!あああ = lngIdx1 rst!いいい = lngIdx2 rst!ううう = "あいうえお" rst!えええ = "かきくけこ" rst.Update Next lngIdx2 Next lngIdx1 Set rst = Nothing Set dbs = Nothing でどうでしょうか? #「ツール」→「参照設定」で、 Microsoft DAO 3.x Object Library にチェックを入れてください。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
DoCmd.GoToRecord , , acFirst が気になって、質問のような場合、通常下記になるのではないかと思い、参考までに、解説本などにのって入るレベルで記して見ます。 ご参考にして下さい。 質問の例と少し違いますが、ポイントは、ずれてないと思います。 '------ エクセルでは、心の中でこの列は何の項目を入れようと決心し、そのデータをその列の各行に入れて行けばそれで良い。まあ項目名ぐらいは第1行目に入れるでしょうか、入れなくてもエラーではない。 しかしアクセスは、まず「テーブル」の定義で、フィールド(=項目、列に当たる)の定義が必要です。この点面倒とか、判り難い点かもしれませんが、昔のコンピュター初期のパンチカードシステムのビジネス・プログラム時代からずっと、これがフィールド定義をすることが、先行するのは当然でした。 (1)ツール-参照設定-Microsoft DAO 3.6 Libraly (2)テーブル定義をプログムで行う。 普通は操作で、(A)デザインビューから(B)ウイザードを使って(C)データを入力してのどれかで行うのがアクセスの既定路線です。 しかしVBAを使うなら、私はプログムで行うのをお勧めします。いつか役立ちます。 Sub test02() Dim dbs As Database Dim tdf As TableDef Dim fld As Field Set dbs = CurrentDb Set tdf = dbs.CreateTableDef("会員名簿T") With tdf .Fields.Append .CreateField("番号", dbText, 5) .Fields.Append .CreateField("姓名", dbText, 10) .Fields.Append .CreateField("名前", dbText, 10) .Fields.Append .CreateField("カナ名", dbText, 20) .Fields.Append .CreateField("住所", dbText, 20) End With dbs.TableDefs.Append tdf End Sub 項目の数、フィールド名、データの型、長さなどを変えて上記を実行するだけでテーブルは瞬時に完成します。 (3)さてテーブルにデータをプログラムでセットします。普通は(A)画面入力操作によるか(B)インポートしてきます。 データは各行(レコード)で変化しますので、プログラムでセットするには限りがありますが(少数なら配列にデータをもってやれないことは無い)、下記では「番号」など規則的に変えれば良いところは、プログラムで変化させてセットし、変化する名前などはマニュアルインプットする方式もあり得ますよね。 下記例では名前等は第2レコード以下同じで現実的でありませんが、その点判ってください。 Sub test01() Dim dbs As Database Dim tdf As TableDef Dim rs As DAO.Recordset Set dbs = CurrentDb Set tdf = dbs.CreateTableDef("会員名簿T") Set rs = dbs.OpenRecordset("会員名簿T", dbOpenTable) '------ For i = 1 To 5 rs.AddNew n = Format(i, "00000") rs("番号") = n rs("姓名") = "山田" rs("名前") = "三郎" rs("カナ名") = "ヤマダ サブロウ" rs("住所") = "京都市" rs.Update Next i rs.Close dbs.Close End Sub (注)Dim rs As DAO.RecordsetのDAOが必要な理由 http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B181542 参照 (4)後は質問のように対応するには For i=1 to 3 (フィールドデータ処理) Next i For i=1 to 3 (フィールドデータ処理) Next i For i=1 to 3 (フィールドデータ処理) Next i を順に並べ、上記例から(フィールドデータ処理)の部分(私の例でのForNextの部分)をコピーペして、少し整えれば良いと思います。 上記例は、あとSQL関係を勉強すれば、自分で仕事に使うような場合なら(注)、相当広範囲に応用できるものと思います。印刷が残ってますが。 (注)他人に使ってもらうときは、フォームなどで整えないといけないですが。
お礼
アドバイス、ありがとうございます。m(__)m アクセスのVBAの勉強、まだ始めたばかりで、テーブルに直接値を入力できなかったので(^^; フォームを作って、そこから入力させようとしていました。 Gin_Fさんの回答で、そっかぁ。直接テーブルに入力するのは、こうすればいいのか!! ていうことと、それから、for next を複数使ってやる方法を知ることができて、とっても喜んでいました。 今度はimogasiさんのアドバイスで、VBAを使って直接テーブルを作れることもわかりました。ほんとうに少ぉしずつではありますが、VBAがわかってきて、とってもうれしいです。どうもありがとうございました。 これからも、よろしくお願いいたします。m(__)m
お礼
ありがとうございました~!! テーブルに入力するのに、こういう方法を使うのですね! ほんとうに初心者なもので、何も知らなくて。。おはずかしいです。 おかげさまで、やりたいと思っていたことができました。とってもとってもうれしいです。もう気分爽快。るんるん気分です。 さぁ、これから、どこかへ出かけようかな。。(^^) ほんと、ありがとうございました。m(__)mm(__)m