Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,561 から 2,600 までを表示しています。
1
りんご 2022/05/16 (月) 03:20:20 c564b@0e907

 素人考えです。過度な期待はしないで下さい。
支払一覧:🔑請求日,🔑支払先,支払期日,支払日,支払方法,支払金額,…
使用一覧:🔑エリア,🔑支店名,🔑使用年月,🔑支払先,🔑種別,🔑開始日,金額,請求日…
etc:…
etc:…

 結論、業者に依頼しましょう。

Excelに戻るべきか悩んでいます。

 Accessを使えばデータベースになるわけではありません。データベースは、複合主キーと参照整合性だと思います。兎にも角にも、関数従属性だけ考えましょう。
 データベース目的ならば、Excelでも出来る事があるはずです。

本を読んだりしていますが、

 兎にも角にも、関数従属性を考える癖が必要です。生活のいろんな場面で考えてみましょう。
 昔、Accessの使い方やVBAやSQLやER図や正規化三原則などをデータベースの勉強と思っていました。が、ぶっちゃけ、データベースのスキルは伸びません。データベースの勉強と思って勉強すればするほど、関数従属性だけ考える邪魔をするようになり大変苦労します。

14
onigiri 2022/05/13 (金) 23:11:32 67467@8c17a

りんご様

レコードソースで直接コードを指定すると最終列が表示されない件は治りました!ありがとうございます!!
For cnt = 2 To qd.Fields.Count - 1 ←これでした
まずは一歩進みました!

13
onigiri 2022/05/13 (金) 23:01:23 67467@8c17a

リンゴ様

返信ありがとうございます。
試しましたが、変化なしです。
ヘージヘッダー、ページフッターにコントロールソースをコードにしたテキストボックスを作成すると選択したコードが表示されていることから、レポートのレコードソースのwhere条件読み込む前にReport_Openのコードが実施されているとかあるのでしょうかね??でもそうするとRp名(この場合カルセド)が表示されてるのと矛盾するか。。

12
りんご 2022/05/13 (金) 00:28:47 c564b@0e907

For cnt = 2 To qd.Fields.Count - 2

For cnt = 2 To qd.Fields.Count - 1

DoCmd.OpenReport "R_レジメンワークシート", acViewPreview

DoCmd.OpenReport "R_レジメンワークシート", acViewReport

うまくいくかわからないけれど、とりあえず、どうでしょう。

3
りんご 2022/05/12 (木) 00:24:03 c564b@0e907

下記コードを追加すると、どんなメッセージが出ますか?

Private Sub B検索結果に戻る_Click()
    MsgBox Me.CurrentRecord
    MsgBox Me.Recordset.BOF
    MsgBox Me.Recordset.EOF 
    DoCmd.Close acForm, "F27 台帳"
End Sub

F27 台帳にコマンドボタンを追加、クリック時イベントで同様のメッセージを確認出来るように準備。
F27 台帳を開いた直後や何か操作した直後に、コマンドボタンを押すと、どんなメッセージが出ますか?

11
onigiri 2022/05/11 (水) 11:47:34 15c48@d7080

りんご様

ありがとうございます。
いくつか試したところ、複数列あるコードで表示してみたところ、最終列が表示されていないことがわかりました。昨日の[8]が表示されないのも、これが最終列なためと思われます。

一番最初に質問させていただいたところに記載したURLを参考に以下記載しています。というか、まるまるコピーです。
りんご様の方法で行けそうな気もしますが、どのような記載をすればよいかお分かりでしたらご教授願います。

Private Sub Report_Open(Cancel As Integer)

Dim db As DAO.Database
Dim qd As DAO.QueryDef
Dim cnt As Integer
Dim fld As DAO.Field

Set db = CurrentDb()
Set qd = db.QueryDefs(Me.RecordSource)

For cnt = 2 To qd.Fields.Count - 2
    Set fld = qd.Fields(cnt)
    Me("Label" & cnt).Caption = fld.Name
    Me("Field" & cnt).ControlSource = fld.Name
    Me("Total" & cnt).ControlSource = "=Sum([" & fld.Name & "])"
Next

End Sub

また、今後のこと考え、別途フォームにてコードを指定し、そこからレポートを表示する方法で検討してみました。
コードを指定し、トグルのイベントに以下記載しました。
DoCmd.OpenReport "R_レジメンワークシート", acViewPreview
レポートは指定したものが表示されたのですが、すべてのコードで列がすべて表示されなくなってしまいました。
access難しい。。

重ね重ね申し訳ございません。
よろしくお願いします。
画像1
画像2

2
nokonoko 2022/05/11 (水) 10:31:14 修正 3c8e6@54883

りんご様 ご回答ありがとうございます。

フォームはテーブルを使っています。

SELECT 
FROM [T1 組成規格マスタ];

だけのものです。

テーブルT1自体に、問題点は見当たりませんでした。

F27フォームは、F28というサブフォームを持っています。
F28を削除したところ、F27を閉じるときのエラーは一切発生しませんでした。
F28を単体で開いた場合、F28を閉じるときのエラーは一切発生しませんでした。

7
hiroton 2022/05/11 (水) 08:57:57 f4fc4@f966d >> 5

ちょっと訂正

T2T01部品マスタの代わりとして使える
「この部分のT01部品マスタを参照するときはT2を使う」

「あだ名」と言ってしまうと、T01部品マスタT2も同じモノを指すことになります(両方使えそう)が、エイリアスを指定した場合T01部品マスタは使えなくなり、代わりにT2だけが使えるようになります

2
りんご 2022/05/10 (火) 23:12:54 c564b@0e907

当該クエリを単独で実行すると、…

 単独でダメなら、いっぺんに全件更新せずに何件ずつかにわけるとか、不要なデータを分離するとか、そもそも更新でやりたい事が適切か第三者にアドバイスを求めるとか、素人考えですが。

1
りんご 2022/05/10 (火) 22:21:12 c564b@0e907

M_クエリに更新クエリを定義しており、MyNoの順に実行する単純なものですが、

 こういうイメージで合ってますか?

myNoクエリ名称
1UPDATE ほにゃらら
2UPDATE ほにゃらら
10
りんご 2022/05/10 (火) 22:00:39 c564b@0e907

 念の為、レポートの非連結テキストボックスに諸々を設定するコードを確認して頂けますか。For…Nextで、初期値から繰り返し回数まで、となっていると思いますが、この繰り返し回数がもう1回増えるように書き換えると、どうでなりますか?

9
onigiri 2022/05/10 (火) 21:26:40 ffd02@8c17a

りんご様

なんどもありがとうございます。
レポートのレコードソースのクエリにて抽出しました。データシートビューでは添付画像のように[8]が表示されています。他のコードを入力してもデータシートビューではすべて表示されるが、レポートになると一部表示されていないようです。これは別に問題ありそうですね。。

SQLです。
TRANSFORM Sum(Tレジメンリスト2.投与量) AS 投与量の合計
SELECT T_レジメン名.[レジメンコード], T_Rpリスト.Rp名
FROM (T_Rpリスト INNER JOIN Tレジメンリスト2 ON T_Rpリスト.Rpコード = Tレジメンリスト2.Rpコード) INNER JOIN T_レジメン名 ON Tレジメンリスト2.[レジメンコード] = T_レジメン名.[レジメンコード]
WHERE (((T_レジメン名.[レジメンコード])=11031))
GROUP BY T_レジメン名.[レジメンコード], Tレジメンリスト2.番号, T_Rpリスト.Rp名
ORDER BY T_レジメン名.[レジメンコード], Tレジメンリスト2.番号
PIVOT Format([投与day],"@@");

画像1
画像2

8
りんご 2022/05/10 (火) 16:47:33 c564b@0e907

レポートの抽出条件でコードを指定すると

フィルターで抽出したという事かな。レポート機能にあまり詳しくないのであれですが、メインレポートSQLにWHERE句を追加する方向でチャレンジするとどうなりますか?
WHERE T_レジメン名.レジメンコード=11031

1
りんご 2022/05/10 (火) 15:51:48 c564b@0e907

フォームの元になっているクエリを開いた時もエラーになる?
YESならば、クエリの元になるテーブルを開いて昨日までと今日で何か違うか?
特にあるべきレコードが消失していないか?
当て推量ですが、こんな流れで見直してみるとか。

7
onigiri 2022/05/10 (火) 15:19:05 15c48@8c17a

りんご様

返信ありがとうございます。
レポートの抽出条件でコードを指定すると、作成希望通り画像1
空白はなくなりました。しかし、数値のあるところも一部表示されず。
画像は上記画像の2/4のコードで指定してます。[8]のところの数値がない。

メインレポートのページヘッダにある、レジメンコードで各ページを抽出できるといいのですが。。
上記URLのvbaにそういうコードを追記?などとも思いましたが具体的な書き方わからず。
すみません。

レポートビュー「式が正しくないか、複雑すぎるため評価できません。たとえば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を簡単にしてください。」
↑これについてはサブレポートを再作成して解決しました。

6
えいじ 2022/05/10 (火) 11:17:50

ありがとうございました。
勉強になりました。

5
hiroton 2022/05/10 (火) 09:33:09 dc0f5@f966d

データ ソースの代替名を使用する

フィールドまたは式に代替名を使用する: AS キーワード

T01部品マスタ.部品登録ID⇒T2.部品登録IDに、なぜ変更できるのでしょうか?

SELECT T2.部品登録ID, T2.品名, T1.小分類名, T2.型式, T3.価格
 FROM (T00小分類マスタ AS T1 INNER JOIN T01部品マスタ AS T2 ON T1.小分類ID = T2.小分類ID)
 INNER JOIN T01価格マスタ AS T3 ON T2.部品登録ID = T3.部品登録ID;

変更後のクエリでT01部品マスタ AS T2という指定があるので、このクエリの中では「T2T01部品マスタの代わりとして使える」となります。

4
えいじ 2022/05/10 (火) 09:21:26

りんご様
https://hatenachips.blog.fc2.com/blog-entry-350.html

この内容スゴイです。
こんな方法もあるんですね。
ありがとうございました。

3
えいじ 2022/05/10 (火) 08:18:00

hiroton様 りんご様 回答ありがとうございました。

hiroton様 スペルミス申し訳ありませんでした。

https://sys-daddy.com/access_subquery/

上記のサイトを参考にして、自分なりにSQL文を記載したのですが、ダメでした。

再度、質問なのですが、エイリアスとは、T1のことをしめしているのでしょうか?

エイリアスを検索したら、エイリアスは、あだ名みたいなものと記載しているサイトがありました。

例えば下記のクエリです。

SELECT T01部品マスタ.部品登録ID, T01部品マスタ.品名, T00小分類マスタ.小分類名,
 T01部品マスタ.型式, T01価格マスタ.価格
 FROM (T00小分類マスタ INNER JOIN T01部品マスタ ON T00小分類マスタ.小分類ID = T01部品マスタ.小分類ID)
 INNER JOIN T01価格マスタ ON T01部品マスタ.部品登録ID = T01価格マスタ.部品登録ID;

SELECT T2.部品登録ID, T2.品名, T1.小分類名, T2.型式, T3.価格
 FROM (T00小分類マスタ AS T1 INNER JOIN T01部品マスタ AS T2 ON T1.小分類ID = T2.小分類ID)
 INNER JOIN T01価格マスタ AS T3 ON T2.部品登録ID = T3.部品登録ID;

T01部品マスタ.部品登録ID⇒T2.部品登録IDに、なぜ変更できるのでしょうか?

この手のコードを理解するにあたり、お勧めの書籍等があれば、教えていただきたいです。

2
りんご 2022/05/10 (火) 00:35:57 c564b@0e907

Q_売上合計

 サブクエリは苦手なので答えられないけど、あれこれやってみました。Dcountを追加してみるのは?
Dcount("指名", "MT_売上", "指名='本指名' AND 伝票ID=" & [伝票ID] & "AND テーブル番号=" & [テーブル番号] & "AND 日時=#" & [日時] "#") AS 本指名の合計
 以下、手打ちなのでエラーが出たらごめんなさい。

SELECT MT_売上.伝票ID, MT_売上.[テーブル番号], MT_売上.日時, Sum(MT_売上.[ドリンク代金]) AS ドリンク代金の合計,Dcount("指名", "MT_売上", "指名='本指名' AND 伝票ID=" & [伝票ID] & "AND テーブル番号=" & [テーブル番号] & "AND 日時=#" & [日時] "#") AS 本指名の合計
FROM MT_売上
GROUP BY MT_売上.伝票ID, MT_売上.[テーブル番号], MT_売上.日時;

 余談ですが、Hatenaさんのサイトを見ながらあれこれするのも楽しかった。
hatena-chips:更新クエリで定義域集計関数を使わずに集計する
 とりあえず、ほにゃららテーブルを作成してから遊んでみると。

SELECT MT_売上.伝票ID, MT_売上.テーブル番号, MT_売上.日時, 0 AS 本指名の合計, 0 AS ドリンク代金の合計 INTO ほにゃららテーブル
FROM MT_売上
GROUP BY MT_売上.伝票ID, MT_売上.[テーブル番号], MT_売上.日時;

 

6
りんご 2022/05/09 (月) 18:09:32 c564b@0e907
商品日付金額商品5/105/115/12
あああ5/10100あああ100120
いいい5/11110---→(クロス集計)いいい110
あああ5/12120

ちょっとよくわからないけれど、集計クエリの段階で
集計:Where条件、抽出条件:“あああ“みたいな感じに
絞り込む仕組みを検討してみるとか。

商品日付金額商品5/105/12
あああ5/10100---→(クロス集計)あああ100120
あああ5/12120
1
hiroton 2022/05/09 (月) 09:38:04 修正 41ab0@f966d

質問内の「Q_本指名カウント」が間違っている(コピペミス?)のでどこをどうすればとは言えませんが、基本的に後のクエリで呼び出している部分をそっくりそのまま置き換えればうまくいくと思います。置き換えた部分はSQL終了文字(;)を削除して、括弧(())で括ります

ex)
LEFT JOIN Q_バック代金 ON

LEFT JOIN (SELECT Q_売上合計.伝票ID,~(略)~) ON

また、自己結合をする場合、適宜エイリアスを使用し、その他、(サブクエリ関係なく)一般的なクエリの記述として、複雑なクエリになる場合には適切な括弧の運用が必要になります
具体的にはINNER JOINを連続させる場合、1回であれば必要のない括弧が必要になったりします。

あと、単純に必要な計算の見極めが必要ですね

SELECT
  T1.伝票ID
  ,T1.テーブル番号
  ,T1.日時
  ,T1.指名
  ,T1.名前
  ,T1.ドリンク
  ,T1.ドリンク代金
  ,IIf(T1.指名 = "本指名", T2.テーブル代金 / T3.本指名カウント) AS バック代金
FROM
  (
    MT_売上 AS T1
    INNER JOIN
      (
        SELECT
          伝票ID
          ,テーブル番号
          ,日時
          ,sum(ドリンク代金) AS テーブル代金
        FROM
          MT_売上
        GROUP BY
          伝票ID
          ,テーブル番号
          ,日時
      ) AS T2
    ON
      T1.伝票ID = T2.伝票ID
      AND T1.テーブル番号 = T2.テーブル番号
      AND T1.日時 = T2.日時
  )
  INNER JOIN
    (
      SELECT
        伝票ID
        ,テーブル番号
        ,日時
        ,count(*) AS 本指名カウント
      FROM
        MT_売上
      WHERE
        指名 = "本指名"
      GROUP BY
        伝票ID
        ,テーブル番号
        ,日時
    ) AS T3
  ON
    T1.伝票ID = T3.伝票ID
    AND T1.テーブル番号 = T3.テーブル番号
    AND T1.日時 = T3.日時
;

MT_売上の構造自体が若干怪しいですが、そちらは無視して回答しています

5
onigiri 2022/05/08 (日) 22:49:22 67467@8c17a

hatena様

お返事いただきありがとうございます。わかりにくくて申し訳ございません。
お手数おかけしますが、よろしくお願いします。

メインレポートSQL
TRANSFORM Sum(Tレジメンリスト2.投与量) AS 投与量の合計
SELECT T_レジメン名.[レジメンコード], T_Rpリスト.Rp名
FROM (T_Rpリスト INNER JOIN Tレジメンリスト2 ON T_Rpリスト.Rpコード = Tレジメンリスト2.Rpコード) INNER JOIN T_レジメン名 ON Tレジメンリスト2.[レジメンコード] = T_レジメン名.[レジメンコード]
GROUP BY T_レジメン名.[レジメンコード], Tレジメンリスト2.番号, T_Rpリスト.Rp名
ORDER BY T_レジメン名.[レジメンコード], Tレジメンリスト2.番号, Format([投与day],"@@")
PIVOT Format([投与day],"@@");

サブレポートSQL
SELECT T_レジメン名.[レジメンコード], T_レジメン名.[レジメ番号], T_レジメン名.[レジメン名], T_レジメン名.投与基準, T_レジメン名.投与基準2, T_レジメン名.[スケジュール2], T_レジメン名.全レジメ, T_レジメン名.[スケジュール], T_レジメン名.注意点, T_レジメン名.薬品名・投与量, T_レジメン名.減量方法, T_レジメン名.適応, T_レジメン名.適応2, T_レジメン名.適応3, T_レジメン名.血管外漏出リスク, T_レジメン名.嘔吐リスク, T_Rpリスト.Rp名, T_Rpリスト.閉鎖式使用, T_Rpリスト.[フィルターの有無], T_Rpリスト.制吐リスク, T_Rpリスト.一般名, Tレジメンリスト2.投与量, Tレジメンリスト2.投与単位, T_Rpリスト.確認事項, T_Rpリスト.副作用など, T_Rpリスト.[その他注意点], T_レジメン名.総コース
FROM (T_Rpリスト INNER JOIN Tレジメンリスト2 ON T_Rpリスト.[Rpコード] = Tレジメンリスト2.[Rpコード]) INNER JOIN T_レジメン名 ON Tレジメンリスト2.[レジメンコード] = T_レジメン名.[レジメンコード]
GROUP BY T_レジメン名.[レジメンコード], T_レジメン名.[レジメ番号], T_レジメン名.[レジメン名], T_レジメン名.投与基準, T_レジメン名.投与基準2, T_レジメン名.[スケジュール2], T_レジメン名.全レジメ, T_レジメン名.[スケジュール], T_レジメン名.注意点, T_レジメン名.薬品名・投与量, T_レジメン名.減量方法, T_レジメン名.適応, T_レジメン名.適応2, T_レジメン名.適応3, T_レジメン名.血管外漏出リスク, T_レジメン名.嘔吐リスク, T_Rpリスト.Rp名, T_Rpリスト.閉鎖式使用, T_Rpリスト.[フィルターの有無], T_Rpリスト.制吐リスク, T_Rpリスト.一般名, Tレジメンリスト2.投与量, Tレジメンリスト2.投与単位, T_Rpリスト.確認事項, T_Rpリスト.副作用など, T_Rpリスト.[その他注意点], T_レジメン名.総コース;

レポートビューは「式が正しくないか、複雑すぎるため評価できません。たとえば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を簡単にしてください。」と出てしまい表示できません。
印刷プレビューと、メインレポートのクエリも載せます。
画像1
画像2
画像3
画像4

4

情報が少なすぎて、概要が把握できません。

現状のメインレポートとサブレポートのレコードソースのSQLを提示してもらえますか。

それと、現状のレポートのデザインビュー画像、レポートプレビュー画像。

3
onigiri 2022/05/08 (日) 15:44:51 67467@8c17a

たびたびの質問で失礼します。

先の件はアドバイスに従い大本のレポートとし、プロジェクトの概要をサブレポートとして解決しました。ありがとうございました。
そこで新たな質問させていただきたいのですが、ご教授いただけたらと思います。

先のリンクを参考に以下のクロス集計クエリーを作成しています。
| 大分類    | 商品名    |売上年月:Format([日付]."mm/dd")    |売上数量:数量    |
| -------- | -------- | -------- | -------- |
| 商品分類      | 商品      |       | 売上      |
| グループ化      | グループ化      | グループ化      | 合計      |
| 行見出し      | 行見出し      | 列見出し      | 値      |

そしてサブレポートとは大分類でリンクフィールドを設定。
大分類でレポートのページを切り替えたく、大分類でグループ化しています。
すると、売上のない日付もすべて表示されてしまいます。希望としては、大分類で該当しない日付と数量のみを表示させたいのです。
レポートのページ毎に更新?とかできたらいいのかなと思い、レポートのイベントプロシージャなど考えてみましたがうまくいきません。なにか可能な方法ございますでしょうか。
文書でうまく表現することができなく申し訳ございません。よろしくお願いします。

3
名前なし 2022/05/02 (月) 09:49:15 7f390@642cb

りんご様 hiroton 様

ご回答いただきありがとうございます。
おかげ様で解決しました。

フィールド名を「団体コード」もしくは「c1_団体コード」にしたらうまくいきました。
調べてみましたが、フィールド名の頭の文字に数字を使用するのは全角・半角に関わらずNGなんですね

フィールドの列数自体は必要な情報なので「c1_団体コード」で運用しようと思います。

2
hiroton 2022/05/02 (月) 08:28:30 7c17f@f966d

数字のみ、または、数字から始まるフィールド名を使うのはやめましょう。クエリはそれをフィールド名と認識できません

フィールド名であることを明示するために[2_団体コード]のように記述することは可能ですが(質問のように)間違いのもとです

2 バイトのアラビア数字が原因で Microsoft Access でクエリを実行すると、エラー メッセージが表示される

2
onigiri 2022/05/02 (月) 06:21:24 6b95a@b56e4

hatena様

返信ありがとうございます。また、遅くなりすみません。
>>仕様
ありがとうございます。
またアイデアありがとうございました。検討してみます!

7

hatena 様

>まずは公式のヘルプで確認しましょう。
これによると引数はすべて文字列で指定することが分かります。

ありがとうございます。
文字列式とありました。
今後は公式のヘルプを何度も読み直し、しっかりと確認いたします。

>どこで調べたか分かりませんが、それはあきらかに間違いですね。

今回のエラーに関して様々な質問板等を見ているときに、DLookup (Expr, Domain, Criteria)ではExprの部分は""で囲まなくてOKです!と書いてあったので、お恥ずかしくも鵜吞みにしておりました。。。

また、きめ細やかなご解説本当に有難うございます。
リンクまで貼って下さり有難うございます。
拝見しました。
素人のわたくしにも理解できるように、詳しくご解説してくださっているので、
とても分かりやすく、勉強になりました。

重ね重ね御礼申し上げます。

6

まずは公式のヘルプで確認しましょう。

Application.DLookup メソッド (Access) | Microsoft Docs

これによると引数はすべて文字列で指定することが分かります。

>「"入数"」については「"」を付けなくてもよいという記述もあり、まだ理解できておりません。

どこで調べたか分かりませんが、それはあきらかに間違いですね。

第3引数は、抽出条件式を文字列として指定します。
具体的にはクエリのSQL文のWhere句に設定する条件式になります。
例えば 仕入先IDが 1、仕入商品IDが 2 のものを抽出するとき、SQLでは下記のようになります。
(SQLが分からなければ、デザインビューで条件を設定してからSQLビューにすれば確認できます。)

SELECT 入数 FROM UQ仕入商品一覧
WHERE 仕入先ID = 1 And 仕入商品ID = 2;

これをDLookupに変換すると、下記のようになります。

DLookup("入数", "UQ仕入商品一覧", "仕入先ID = 1 And 仕入商品ID = 2")

1 と 2 の部分は固定値ではなく、フォームのテキストボックスの値を参照することになるので、文字列の外に出して、

DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & 1 & " And 仕入商品ID = " & 2)

この固定値の部分をコントロール参照式に変更します。

DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & Forms![F仕入入力]![仕入先ID] & " And 仕入商品ID = " & [仕入商品ID])

ここで注意することは、DLookup関数の第3引数に設定するのはSQLの条件式ということです。
SQLとVBAは似ていますが、まったく別のものだということを意識してください。

VBAとSQLでも文字列の扱いの違いは、下記で詳しく解説していますので、ご参考に。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

5
AFA 2022/04/29 (金) 15:46:11 修正 9c318@fac4f >> 3

hatena 様

お忙しい中大変ご丁寧にありがとうございました。

お教え下さった通りに変更しましたところ、
無事、成功しました。
お教えくださった内容をもとに、何が間違えていたのかを調べました。
正解か分かりかねますが、変数を扱いたいにもかかわらず、お教え下さった下記のように
入数 = DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & Forms![F仕入入力]![仕入先ID] & " And 仕入商品ID = " & [仕入商品ID])

「"入数"」と「" & Forms![F仕入入力]![仕入先ID] & " 」としていなかったことについて調べました。

「"入数"」については「"」を付けなくてもよいという記述もあり、まだ理解できておりません。
継続して調べてまいります。
「" & Forms![F仕入入力]![仕入先ID] & " 」については、変数を扱うにおいては「"&変数&"」としなければならないとの結論に至りました。(正解か不明ですが…)

色々と調べていたものの、一週間ほど悩んでおりましたので、解決して一安心しております。
本当に有難うございました。

4

りんご 様

お忙しい中大変ご丁寧にありがとうございました。

>抽出条件無しでの動作確認、単独条件での動作確認、パラメータの代わりに適当な値を入れて動作確認はどうでしたか?

抽出条件無での動作確認は問題ございませんでした。
また、単独条件での動作確認ですが、仕入商品ID(オートナンバー型)を単独条件としたところ、本来導き出したい数値とは異なるものが代入されました。
わたくしの勝手な推測なのですが、仕入商品ID(オートナンバー型)は仕入先ID各社の仕入商品テーブルがあり、仕入商品ID(オートナンバー型)が重複するため、別のものを代入しているのではないかと考えます。
パラメータの代わりにダイレクトに仕入先IDを3仕入商品IDを3として動作してみたところ、
いずれも「エラー13 型が一致しません」となりました。
わたくしの式の書き方が悪いことが原因と思います。(恥ずかしながら、調べながら利用している素人です)
下記3通り試しました。
入数 = DLookup(入数, "UQ仕入商品一覧", "仕入先ID =  3" And "[仕入商品ID] =  3")
入数 = DLookup(入数, "UQ仕入商品一覧", "[仕入先ID] =  3" And "[仕入商品ID] =  3")
入数 = DLookup(入数, "UQ仕入商品一覧", "Forms![F仕入入力]!仕入先ID =  3" And "[仕入商品ID] =  3")

>念の為、コンボボックスについても確認です。仕入先IDや仕入商品IDですが、1列目ならば連結列は1、2列目ならば連結列は2となっていますか?

プロパティシートにて連結列確認いたしました。
連結列はコンボボックスすべてにおいて「1」でした。

>念の為、仕入先IDや仕入商品IDについても確認です。オートナンバー型との事ですか、0001、0002、0003みたいな感じではないですよね?実はNULLもあったり、なんてことはないですよね?

仕入先IDと仕入商品IDは頭に0等は入らず全て整数の「1.2.3…」となっております。
またNULLはございません。
全てのIDには必ず整数が入るようにしております。

hatena様から教えていただきました通りに変更したところ、入数には正しい数値が代入されました。

3

とりあえずエラーの行を下記のように変更してみてください。

入数 = DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & Forms![F仕入入力]![仕入先ID] & " And 仕入商品ID = " & [仕入商品ID])
1

「パススルークエリまたは非固定列のクロス集計クエリを、サブフォームまたはサブレポートのレコードソースとして使うことはできません。」

これはAccessの仕様なのでどうすることもできません。
これ以外の方法を考えることになると思います。

詳細は不明なのでアイデアだけになりますが、

列固定のクロス集計クエリならサブレポートに使えるので、VBAでクエリのSQLを修正するようにするとか。

サブレポートは使わずに、レポートのグループ化の機能でなんとかするとか。

など。

1
りんご 2022/04/29 (金) 01:50:28 c564b@0e907

 団体コードに戻してみたり、団体コード2に変更してみたりするとどうなりますか?

2
りんご 2022/04/29 (金) 01:44:26 c564b@0e907

 DLookup、正直苦手なのでしっかり回答出来ないのですが、追加情報があればいいかもと。
 抽出条件無しでの動作確認、単独条件での動作確認、パラメータの代わりに適当な値を入れて動作確認はどうでしたか?パラメータの参照は想定通り?(仕入商品IDが何処を参照する事になるのか誰か解説して欲しい。)
 念の為、コンボボックスについても確認です。仕入先IDや仕入商品IDですが、1列目ならば連結列は1、2列目ならば連結列は2となっていますか?
 念の為、仕入先IDや仕入商品IDについても確認です。オートナンバー型との事ですか、0001、0002、0003みたいな感じではないですよね?実はNULLもあったり、なんてことはないですよね?

1

投稿者です。
あまりにも拙い説明で、非常に分かりにくいかと存じます。
明日改めて、各種画像を添付致しますので、何卒、ご教授のほど、よろしくお願い申し上げます。

1

テキストボックスの高さをフォントに合わせたいということでしょうか。
デザインビューでテキストボックスを右クリックで[サイズ変更]→[自動調整]でどうでしょう。

1

良く見たらUTF-8(BOMなし)のASCIIのみのファイルでした。お騒がせしましてすみません。

3
MM 2022/04/20 (水) 18:35:10 a09a0@fd03f

零細寄りの中小だと取引先がOffice2010以前とかザラなので365の新関数とか使う気が起きないしPowerQueryのファイル集計すら使えないことがある
EmotetみたいなこともあるのでExcelはVBA一切使わずデータ加工を段階ごとに山盛りの非表示シート連鎖させてPivotテーブルまでの機能で似非アプリ化しても元々のデータモデルの認識が間違ってなければ何とかなってしまう
Accessはランタイムでちゃんと動くようエラー処理すれば非常にコスパの良いローコード開発環境(ただしDXとは真逆)