
テーブルにあるデータから値を取得し変数に入れたいのですが、一度に複数の値を取得することができません。
dlookupを使いデータを取得していましたが、複数行結果が返される場合一つしか返されません。
変数にて複数の「作業名」のフィールド値を入れたいです。
どのように記入すれば、テーブルにある複数の値を取得できるでしょうか?
コード
Dim a As String
a = DLookup("作業名", "見積作業", "見積番号= Forms![見積]![見積番号]")
テーブル
メインフォーム
名前 見積
フィールド名(データ型) 見積番号(int)
サブフォーム
名前 見積作業
フィールド名(データ型) 見積作業ID(int),見積番号(int),作業名(String)
メインフォームにある「見積」テーブルと同じ見積会員IDを出力しています。
(例)見積テーブルに入力されている見積番号が2の場合、サブフォームに登録されている見積番号2のレコードがフォームにて表示されている。
サブフォームの見積作業にて見積番号が2のレコードが複数あり、作業名が「作業1」「作業2」という複数の結果が出ているためその内容を変数に入れたいです。
<備考>
・Microsoft access2021
・windows11 home、64ビット
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
レコード数が取得できたなら
一例ですが標準モジュールに
Sub てすと()
Dim RS As Recordset, i As Integer, myAry() As String
Set RS = Forms!主フォーム名!サブフォーム名.Form.RecordsetClone '★
RS.MoveFirst
Do
i = i + 1
ReDim Preserve myAry(i)
myAry(i) = RS!フィールド名 '★
RS.MoveNext
Loop Until RS.EOF
For i = 1 To UBound(myAry)
Debug.Print i, myAry(i)
Next
End Sub
として実行すればイミディエイトウィンドウに出力されるハズ?
※★ところの名前は書き換えてください。
No.4
- 回答日時:
SQL Serverとのリンクテーブルだと出来たっけかな。
取りあえず
そのフォームで適当な見積もり番号を入れて
サブにその番号だけのが表示されている状態で
イミディエイトウィンドウに
?forms!メインフォーム名!サブフォーム名.form.RecordsetClone.recordcount
と打ち込んだら正しい件数が得られますか?
エラーで叱られたらそれの内容を教えてください。
コメントありがとうございます。
メインフォーム名、サブフォーム名を入力し試したところ次のエラーが発生しました。
実行時エラー'2467'
「指定した式で、閉じているかまたは存在しないオブジェクトを参照しています」と表示されます。
No.3
- 回答日時:
>>上記のサイトのように格納自体はできそうですが、条件に対して出力させることができないです。
条件に対して出力したければ、その条件を渡して、IF文とか、Select Case文などでチェックして、必要なものだけ格納する、出力するなどすればいいだけですよ。
No.2
- 回答日時:
Dlookup自体があまり使い勝手の良いものではないですし、データベースなのですから、それに沿った作り方をした方が良いと思います。
見積テーブルの[見積番号] と 見積作業テーブルの[見積番号]を一対多でリレーションすればいいだけですよ。
メインとサブテーブルの関連性(リンク)がいまいちわからないのなら、リレーションを設定したのちに、新規でフォームを作成すれば多分お望みのフォームをつくってくれます。
或いは選択クエリを使うかです。

コメントありがとうございます。
リレーションシップにできない理由がありまして、データはSQLサーバーとリンクしており別のツールを使いaccessを起動しています。
その関係上、ローカルにテーブルを基本入れず毎度欲しいデータのみ出力している形になります。
その中で全てのデータを毎回SQLサーバーから持ってくるテーブルがあり、それを阻止するため変数を使い出力件数を減らそうとしています。
なので、今回は質問の通りあくまで変数にて複数の「作業名」のフィールド値を入れたいです。
No.1
- 回答日時:
>>テーブルにあるデータから値を取得し変数に入れたいのですが、一度に複数の値を取得することができません。
これは、伝票入力画面などでよくある「親子データ」の処理になりますね。
親が見積番号をもって、子データがその見積に属する明細データって感じになるような処理ですよね。
私は、Accessを使っていませんが、たぶん、VBAなどをつかってプログラミングをすることになるのではないかと思います。
例えば、
Dim rst As Recordset
みたいなのを使って、ループ処理して、1件ずつ子データを読み込んで、配列に格納するような感じ?
たぶん、なにかの関数一発では処理できないのでは?
コメントありがとうございます。
やっぱり一つの関数で作るのは難しいですか......。
https://accessvba.pc-users.net/ado/move_record.h …
上記のサイトのように格納自体はできそうですが、条件に対して出力させることができないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
2つ目のレコードの値を取得するには?
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
select文の戻り値を変数に格納したい。
Visual Basic(VBA)
-
-
4
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
7
「パラメータが少なすぎます。3を指定してください。」って???
Access(アクセス)
-
8
アクセスでサブフォームのレコードを取得したい。
Access(アクセス)
-
9
Accessの桁区切りについて教えてください。
Access(アクセス)
-
10
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
11
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
12
アクセス:フォーム入力で、最後の入力が終わっても次のレコードに移動しないようにするには?
Access(アクセス)
-
13
ACCESSでコンボボックスにSQLで抽出した値を表示したい
その他(データベース)
-
14
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
15
Accessのクエリの値を変換(代入)する方法について
Visual Basic(VBA)
-
16
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
-
17
ACCESS2010のVBAでフォーム内クエリのフィールド値を取得したい
Visual Basic(VBA)
-
18
Access 複数条件検索の設定が上手く行きません
Access(アクセス)
-
19
access2021 VBA メソッドまたはデータメンバーが見つかりません エラー発生
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS VBA でのエラー解決の根...
-
Microsoft365にAccessってあり...
-
Accessのクエリの結果を、既存...
-
Access Error3061 パラメータが...
-
access2021 強制終了してしまう
-
access2021 VBA メソッドまたは...
-
Accessのクエリで、replace関数...
-
access vbaでフォームを開くと...
-
access2019の起動が遅い
-
Access VBA [リモートサーバー...
-
Microsoft 365 Basic サブスク...
-
列が255以上のCSVファイルをAcc...
-
access2021 メッセージボックス...
-
「テキストデータで送ってくだ...
-
レポートの印刷を一括ではなく...
-
Vba Userformを前面に出すについて
-
access2019 チェックボックスと...
-
【アクセス】DSumで複数の条件
-
アクセスで、実行時エラー3075 ...
-
Accessのルックアップ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
「テキストデータで送ってくだ...
-
access vbaでフォームを開くと...
-
ACCESS VBA でのエラー解決の根...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
Access Error3061 パラメータが...
-
access2021 VBA メソッドまたは...
-
Accessのクエリの結果を、既存...
-
Accessでレポートを印刷する時...
-
Microsoft365にAccessってあり...
-
列が255以上のCSVファイルをAcc...
-
Access の SetFocus について教...
-
Access 複数条件検索の設定が上...
-
accessでlaccdbファイルが削除...
-
Accessでフォームに自動入力し...
-
Access VBA [リモートサーバー...
-
Excelを開く時と閉じる時に一度...
-
access2019の起動が遅い
-
Accessのリンクテーブルのパス...
おすすめ情報