限定しりとり

アクセス(に限らないとは思うのですが)のVBEを今、一生懸命勉強しているのですが、初歩的なところで、つまずいています。

あああいいいうううえええ
11あいうえおかきくけこ
12あいうえおかきくけこ
13あいうえおかきくけこ
21あいうえおかきくけこ
22あいうえおかきくけこ
23あいうえおかきくけこ
31あいうえおかきくけこ
32あいうえおかきくけこ
33あいうえおかきくけこ

というような、データを自動で入力したいのです。多分、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

A 回答 (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 にチェックを入れてください。
 
    • good
    • 0
この回答へのお礼

ありがとうございました~!!

テーブルに入力するのに、こういう方法を使うのですね! ほんとうに初心者なもので、何も知らなくて。。おはずかしいです。

おかげさまで、やりたいと思っていたことができました。とってもとってもうれしいです。もう気分爽快。るんるん気分です。

さぁ、これから、どこかへ出かけようかな。。(^^)

ほんと、ありがとうございました。m(__)mm(__)m

お礼日時:2004/03/14 13:04

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=k …
参照
(4)後は質問のように対応するには
For i=1 to 3
(フィールドデータ処理)
Next i
For i=1 to 3
(フィールドデータ処理)
Next i
For i=1 to 3
(フィールドデータ処理)
Next i
を順に並べ、上記例から(フィールドデータ処理)の部分(私の例でのForNextの部分)をコピーペして、少し整えれば良いと思います。
上記例は、あとSQL関係を勉強すれば、自分で仕事に使うような場合なら(注)、相当広範囲に応用できるものと思います。印刷が残ってますが。
(注)他人に使ってもらうときは、フォームなどで整えないといけないですが。
    • good
    • 0
この回答へのお礼

アドバイス、ありがとうございます。m(__)m

アクセスのVBAの勉強、まだ始めたばかりで、テーブルに直接値を入力できなかったので(^^; フォームを作って、そこから入力させようとしていました。

Gin_Fさんの回答で、そっかぁ。直接テーブルに入力するのは、こうすればいいのか!! ていうことと、それから、for next を複数使ってやる方法を知ることができて、とっても喜んでいました。

今度はimogasiさんのアドバイスで、VBAを使って直接テーブルを作れることもわかりました。ほんとうに少ぉしずつではありますが、VBAがわかってきて、とってもうれしいです。どうもありがとうございました。

これからも、よろしくお願いいたします。m(__)m

お礼日時:2004/03/15 21:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!