
テーブルにあるデータから値を取得し変数に入れたいのですが、一度に複数の値を取得することができません。
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 サブフォームでの選択行の取得
その他(データベース)
-
Excel上から、Accessのマクロビルダーにより作成した複数クエリをワンクリック実行
Access(アクセス)
-
-
4
Access2021で在庫管理
Access(アクセス)
-
5
Accessフォームにマクロを組み込むには
Access(アクセス)
-
6
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
7
excelVBAについて。
Excel(エクセル)
-
8
excelVBAについて。
Excel(エクセル)
-
9
今までは、 「CSVの出力先を選択してください。」 という画面から、CSVファイルをデスクトップに引
Excel(エクセル)
-
10
AccessM365を利用しています。更新クエリで、レコードの更新欄に、フィールド同士の足し算したも
Access(アクセス)
-
11
【関数】データベースから2つの条件を満たす場合に「一致」と表示したい
Excel(エクセル)
-
12
Accessデータベースを開くと同時に、フォームを表示するには
Access(アクセス)
-
13
Accessデータベースの保存形式について
Access(アクセス)
-
14
AccessからExcelを開いて閉じても、タスクマネージャーにExcelが残ってしまう。
Access(アクセス)
-
15
提供されるデータの形式が変わったら…
Access(アクセス)
-
16
AccessのクエリをSQL文に変換するには
Access(アクセス)
-
17
エクセルで同じブックを開くについて
Excel(エクセル)
-
18
【マクロ】WEBシステムから保存ではなく、開いたExcelデータを変数に入れる事が出来る?
Excel(エクセル)
-
19
アクセスでサブフォームのレコードを取得したい。
Access(アクセス)
-
20
select文の戻り値を変数に格納したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
access2021 強制終了してしまう
-
Access VBA [リモートサーバー...
-
ACCESS VBA でのエラー解決の根...
-
「テキストデータで送ってくだ...
-
Accessのクエリで、replace関数...
-
実行時エラー3131 FROM 句の構...
-
Arduinoで温湿度と時刻を1分ご...
-
Accessのスプレッドシートエク...
-
Accessのクエリの結果を、既存...
-
access2021 VBA メソッドまたは...
-
Accessでフォームに自動入力し...
-
Access Error3061 パラメータが...
-
Access DAOのExecuteメソッドの...
-
access2021 メッセージボックス...
-
Accessのリンクテーブルのパス...
-
Microsoft365にAccessってあり...
-
Accessのフォーム上のテキスト...
-
accessのフォームに設置したボ...
-
列が255以上のCSVファイルをAcc...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
ACCESS VBA でのエラー解決の根...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
Arduinoで温湿度と時刻を1分ご...
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
Accessのクエリの結果を、既存...
-
Accessのスプレッドシートエク...
-
Microsoft365にAccessってあり...
-
列が255以上のCSVファイルをAcc...
-
Access VBA を利用して、フォル...
-
実行時エラー3131 FROM 句の構...
-
CSVファイルの「0落ち」にVBA
-
Accessのレポートについて
-
Accessでレポートを印刷する時...
-
Accessでフォームに自動入力し...
-
accessデータを指定したExcel、...
-
Accessのリンクテーブルのパス...
おすすめ情報