![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
アクセス(に限らないとは思うのですが)の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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
郵便番号の-(ハイフン)等をま...
-
EXCEL→ACCESSインポートでセル...
-
Access2003でフィールドのデー...
-
Accessチェックボックス 一度で...
-
ACCESSのカスタマーバーコード...
-
ACCESSのテーブルのデータで、...
-
アクセス2000で固定長フィール...
-
アクセスのVBEの初歩的な質問
-
日付型のフィールドに空白を入...
-
差込印刷での全角表示について...
-
SQL文で パラメータが少なすぎ...
-
ACCESSにEXCELからインポートし...
-
エクセルにおける「フィールド...
-
アクセスのエラー「クエリには...
-
フィールドの更新がない
-
アクセス・テーブルの改行につ...
-
ACCESSユニオンクエリから新テ...
-
ACCESS クエリの抽出条件に他の...
-
EXCELの外部データ取得ができない
-
実行時エラー '3464': 抽出条件...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのデータをアクセスに...
-
EXCEL→ACCESSインポートでセル...
-
ACCESSのテーブルのデータで、...
-
Accessチェックボックス 一度で...
-
ACCESSで改行コードを削除する方法
-
アクセスのオートナンバーが飛...
-
ACCESS フォームに入力できる文...
-
郵便番号の-(ハイフン)等をま...
-
ACCESSで行数を増やすには?
-
Access2003でフィールドのデー...
-
【Win】ファイルメーカー⇔エ...
-
ACCESSのカスタマーバーコード...
-
アクセス2000で固定長フィール...
-
ACCESS 検索置換 にデ...
-
エクセルのデータをアクセスへ...
-
Access2000 テキストデータの...
-
ACCESS2003でテーブルに入力し...
-
accessクエリで文字を結合とCSV...
-
URL #が付いてるレコードと...
-
空き番検索でオーバーフロー
おすすめ情報