重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

テーブルにあるデータから値を取得し変数に入れたいのですが、一度に複数の値を取得することができません。
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件)

レコード数が取得できたなら


一例ですが標準モジュールに
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

として実行すればイミディエイトウィンドウに出力されるハズ?
※★ところの名前は書き換えてください。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

遅くなり申し訳ございません。
コードを実行したところ、無事に出力することができました。

お礼日時:2024/10/24 09:53

SQL Serverとのリンクテーブルだと出来たっけかな。


取りあえず
そのフォームで適当な見積もり番号を入れて
サブにその番号だけのが表示されている状態で
イミディエイトウィンドウに
?forms!メインフォーム名!サブフォーム名.form.RecordsetClone.recordcount
と打ち込んだら正しい件数が得られますか?
エラーで叱られたらそれの内容を教えてください。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

メインフォーム名、サブフォーム名を入力し試したところ次のエラーが発生しました。

実行時エラー'2467'
「指定した式で、閉じているかまたは存在しないオブジェクトを参照しています」と表示されます。

お礼日時:2024/10/17 09:26

>>上記のサイトのように格納自体はできそうですが、条件に対して出力させることができないです。



条件に対して出力したければ、その条件を渡して、IF文とか、Select Case文などでチェックして、必要なものだけ格納する、出力するなどすればいいだけですよ。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

IF、Select Case文を活用し試してみたいと思います。

お礼日時:2024/10/17 09:33

Dlookup自体があまり使い勝手の良いものではないですし、データベースなのですから、それに沿った作り方をした方が良いと思います。



見積テーブルの[見積番号] と 見積作業テーブルの[見積番号]を一対多でリレーションすればいいだけですよ。

メインとサブテーブルの関連性(リンク)がいまいちわからないのなら、リレーションを設定したのちに、新規でフォームを作成すれば多分お望みのフォームをつくってくれます。


或いは選択クエリを使うかです。
「access2021 テーブルから複数の」の回答画像2
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

リレーションシップにできない理由がありまして、データはSQLサーバーとリンクしており別のツールを使いaccessを起動しています。

その関係上、ローカルにテーブルを基本入れず毎度欲しいデータのみ出力している形になります。

その中で全てのデータを毎回SQLサーバーから持ってくるテーブルがあり、それを阻止するため変数を使い出力件数を減らそうとしています。

なので、今回は質問の通りあくまで変数にて複数の「作業名」のフィールド値を入れたいです。

お礼日時:2024/10/16 15:36

>>テーブルにあるデータから値を取得し変数に入れたいのですが、一度に複数の値を取得することができません。



これは、伝票入力画面などでよくある「親子データ」の処理になりますね。
親が見積番号をもって、子データがその見積に属する明細データって感じになるような処理ですよね。

私は、Accessを使っていませんが、たぶん、VBAなどをつかってプログラミングをすることになるのではないかと思います。
例えば、
Dim rst As Recordset
みたいなのを使って、ループ処理して、1件ずつ子データを読み込んで、配列に格納するような感じ?

たぶん、なにかの関数一発では処理できないのでは?
    • good
    • 0
この回答へのお礼

コメントありがとうございます。

やっぱり一つの関数で作るのは難しいですか......。

https://accessvba.pc-users.net/ado/move_record.h …

上記のサイトのように格納自体はできそうですが、条件に対して出力させることができないです。

お礼日時:2024/10/16 15:28

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A