
アクセス(に限らないとは思うのですが)の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
No.1ベストアンサー
- 回答日時:
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 にチェックを入れてください。
ありがとうございました~!!
テーブルに入力するのに、こういう方法を使うのですね! ほんとうに初心者なもので、何も知らなくて。。おはずかしいです。
おかげさまで、やりたいと思っていたことができました。とってもとってもうれしいです。もう気分爽快。るんるん気分です。
さぁ、これから、どこかへ出かけようかな。。(^^)
ほんと、ありがとうございました。m(__)mm(__)m
No.2
- 回答日時:
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関係を勉強すれば、自分で仕事に使うような場合なら(注)、相当広範囲に応用できるものと思います。印刷が残ってますが。
(注)他人に使ってもらうときは、フォームなどで整えないといけないですが。
アドバイス、ありがとうございます。m(__)m
アクセスのVBAの勉強、まだ始めたばかりで、テーブルに直接値を入力できなかったので(^^; フォームを作って、そこから入力させようとしていました。
Gin_Fさんの回答で、そっかぁ。直接テーブルに入力するのは、こうすればいいのか!! ていうことと、それから、for next を複数使ってやる方法を知ることができて、とっても喜んでいました。
今度はimogasiさんのアドバイスで、VBAを使って直接テーブルを作れることもわかりました。ほんとうに少ぉしずつではありますが、VBAがわかってきて、とってもうれしいです。どうもありがとうございました。
これからも、よろしくお願いいたします。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのテーブルのデータで、...
-
Accessチェックボックス 一度で...
-
ACCESS フォームに入力できる文...
-
差込印刷での全角表示について...
-
日付型のフィールドに空白を入...
-
Excleピボットでデータのない部...
-
ACCESSでの文字数カウント
-
Accessのテーブルで、リンク?...
-
SQL文で パラメータが少なすぎ...
-
アクセスのクエリでSplit関数は...
-
access テーブル作成クエリでテ...
-
指定日付を起点にして最新日付...
-
Acsess アクセス のクエリで...
-
アクセスのエラー「クエリには...
-
アクセスのクエリー作成
-
Access 「主キーにはnull値を...
-
年度ごとの最大値
-
ファイルメーカーのCase関数で
-
VBA 別シートの同じ日付の欄に...
-
エクセル-過去6カ月分の合計を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのデータをアクセスに...
-
ACCESSのテーブルのデータで、...
-
ACCESSで改行コードを削除する方法
-
アクセスのオートナンバーが飛...
-
EXCEL→ACCESSインポートでセル...
-
Accessチェックボックス 一度で...
-
Access2003でフィールドのデー...
-
郵便番号の-(ハイフン)等をま...
-
ACCESS フォームに入力できる文...
-
Access2000 テキストデータの...
-
ACCESS 検索置換 にデ...
-
ACCESSのカスタマーバーコード...
-
エクセルの重複データについて...
-
Accessのコピー&ペースト
-
ACCESSで行数を増やすには?
-
差込印刷での全角表示について...
-
日付型のフィールドに空白を入...
-
アクセスのエラー「クエリには...
-
SQL文で パラメータが少なすぎ...
-
アクセスで追加した項目に全て...
おすすめ情報