Microsoft Access 掲示板

views
4 フォロー
6,470 件中 2,721 から 2,760 までを表示しています。
5
りんご 2022/05/25 (水) 07:37:43 c564b@0e907

 素人考えです。過度な期待はしないで下さい。
元請と仕事と受注日のテーブル:🔑元請の名前,🔑受注した仕事,🔑受注日,金額,グループの名前,…
グループのテーブル:🔑グループの名前,…
グループと下請のテーブル:🔑グループの名前,🔑下請の名前,発注日,金額,…
etc:…
もしくは

4
たいちゃ 2022/05/24 (火) 17:07:39 58219@933a5

元請けAからの複数の仕事を一つにまとめて金額を設定し複数の仕事をつくり、それを複数の下請けにだす、といった具合です
めちゃくちゃ複合的にまざったりはしません

2
りんご 2022/05/24 (火) 16:11:23 c564b@0e907

出来る方法があり、支障がないなら、それでいいんじゃないかと思います。
ググッてみましたら、こんな情報もありました。
横持ちデータを縦持ちデータに変換する - もう一度学ぶMS-Access

3
りんご 2022/05/24 (火) 15:57:11 c564b@0e907

 

元請けから2つの仕事が来た場合、双方の一部をまぜて下請けにだすことが多いので

 仕事を組み合わせ、金額を決めて下請けに出すという事でしょうか?それとも、こんな場合もあり得ますか?仕事Aと仕事Bがある。仕事Aのその1、仕事Aのその2、仕事Bのその1、仕事Bのその2、仕事Bのその3と分ける。仕事Aその1と仕事Bその1を下請会社あああ、仕事Aその2と仕事Bその2を下請会社いいい、仕事Bその3を下請会社ううう。
 

2
たいちゃ 2022/05/24 (火) 11:45:57 0dbf4@99905

なるほど。双方に必要なフィールドを作っておいて、使わない部分は空欄にしとけばいいと思ってましたがそういうものでもないのですね
視認性や管理の問題でわけたほうがいいということでしょうか?
フィールドをが多いとごちゃごちゃしますしね

1
hiroton 2022/05/24 (火) 08:37:04 47d6b@f966d

下請けデータも、仕事のもととなる元請けごとに集計して、

「仕事のもととなる元請け」この情報は「下請けデータ」には必要ですが、「元請けから受注した売上」には不要な(存在しない)情報ですよね?

データ構造の異なるデータは一つのテーブルにまとめるべきではありません。つまり別々のテーブルにしましょう

1
hiroton 2022/05/24 (火) 08:23:26 47d6b@f966d

わざわざテーブルを作成する必要はないですね

ユニオン クエリを使って複数のクエリを 1 つの結果に結合する

または、くだもののマスタテーブルがあるならDcount関数を使って、それを合計してもいいでしょう

2
wazawaza 2022/05/22 (日) 15:26:57

ありがとうございます!
解決しました!本当にありがとうございました!

1
りんご 2022/05/22 (日) 14:25:48 c564b@0e907

取り敢えず、下記に変更すると何か変わりますか?
"[補足説明] = '" & Me.txt補足説明.Value & "' " &

21
onigiri 2022/05/21 (土) 16:51:10 67467@8c17a

りんご様

できました!!!!
本当に本当にありがとうございます!!
レコードソースのクエリwhere条件とパラメーターは設定したままで、教えていただいたコードを修正したところできました。

画像1

本当に本当にありがとうございました!

20
りんご 2022/05/20 (金) 23:42:35 c564b@0e907

何度もすみません。試してみてください。

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
Dim rs As DAO.Recordset
 Set db = CurrentDb()
 Set qd = db.QueryDefs(Me.RecordSource)
 qd.Parameters([Forms]![フォームの名前]![絞り込みの名前])=[Forms]![フォームの名前]![絞り込みの名前]
 Set rs = qd.OpenRecordset
 For cnt = 2 To rs.Fields.Count - 1
  Set fld = rs.Fields(cnt)
  Me("Label" & cnt).Caption = fld.Name
  Me("Field" & cnt).ControlSource = fld.Name
  Me("Total" & cnt).ControlSource = "=Sum([" & fld.Name & "])"
 Next
End Sub

下記を追加。フォームの名前と絞り込みの名前は適宜変更して下さい。
Dim rs As DAO.Recordset
qd.Parameters(“[Forms]![フォームの名前]![絞り込みの名前]”)=[Forms]![フォームの名前]![絞り込みの名前]
Set rs = qd.OpenRecordset
下記を変更。
For cnt = 2 To rs.Fields.Count - 1
Set fld = rs.Fields(cnt)

19
onigiri 2022/05/20 (金) 17:06:45 15c48@d7080

りんご様

ありがとうございます。
Debug.Print Me.レジメン
で確認したところ、レジメンコードが表示されています。また、レポートをデザインビューにし、レコードソースのデータシートビューでもきちんと表示されています。

画像1

また、Tレジメンリスト2.番号を削除してもダメでした。
2のカルセドについても数値が入っているのを確認しています。レジメンコードを指定しないで、すべてのレポートを表示さると表示されるので。。

おっしゃる通り、
クロス集計の前に仕組みを入れないと無理だと思います。
だと思うのですが、どういう順番でデータを読み込んでレコードが作成されているのかですかね。

3
名前なし 2022/05/20 (金) 13:09:26 07313@0e907

 もし、サブフォームのテキストボックスにセットフォーカスする場合、注意点があるようです。グクってみるといいかも。
 そうでない場合、VBAコードを提示すると、回答がつきやすくなるかも。

2
名前なし 2022/05/20 (金) 12:50:24 e48ae@6eb0c

ありがとうございます。
早速やってみましたが、エラーになりました。フォーカスを移動させることができません。と出ます。
その他のテキストボックスにセットフォーカスするとエラーになりませんでしたので、フォーカスできないことが原因なのでしょうか?
となるとなぜフォーカスできないのか?となるんですが、その理由がわかりません…

なにかヒントあればお願いいたします。

1
りんご 2022/05/20 (金) 12:23:48 c564b@0e907

マクロ完了後にそのテキストボックスをマウスでクリックすると、代入された値が突如現れます。

正直よくわかりません。テキストボックスにセットフォーカスすると、代入値が見えるのであれば、代入するコードの前に、セットフォーカスするコードを入れてみたら?フォームAにセットフォーカスしてからテキストボックスにセットフォーカスする感じ。

18
りんご 2022/05/19 (木) 05:55:07 c564b@0e907

>> 17

あとは、添付画像の場合4以降を表示させないようにできれば。。

クロス集計の前に仕組みを入れないと無理だと思います。where条件パラメータの問題解決に戻りましょう。"レジメンコード=" & Me.レジメンを削除するのを忘れずに。

>> 16

where条件で直接コードを入れた結果は…希望の数値が出ました。

 [Forms]![F_レジメンワークシート]![レジメン]の参照値が直接コードと違う値になっていませんか?意図せずにという事もあります。念の為、もう1度確認してみて下さい。例えば、コマンドボタンを作って、メッセージボックスやデバッグプリントで[Forms]![F_レジメンワークシート]![レジメン]の中身を見てみると何かわかるかもしれません。パラメータ参照値が駄目なら直接コードも駄目になるはず。
 
>> 5

メインレポートSQL
TRANSFORM … SELECT … FROM …
GROUP BY T_レジメン名.[レジメンコード], Tレジメンリスト2.番号, T_Rpリスト.Rp名
ORDER BY T_レジメン名.[レジメンコード], Tレジメンリスト2.番号, Format([投与day],"@@")
PIVOT Format([投与day],"@@"

 データがどのように登録されているかわからないので、何とも言えませんが、Tレジメンリスト2.番号を削除してみるのも。クロス集計に必要不可欠、これがないと投与dayがおかしくなるという事であれば無理ですが。
 その他に、番号その1のカルセドと番号その2のカルセドがある場合、片方の投与dayと投与量が未入力になっていないか見直してみるのも。

 試行錯誤の結果が期待通りか否かは、クロス集計クエリを直接開いたり、選択クエリに戻して確認すると良いと思います。

 

4
りんご 2022/05/19 (木) 00:40:12 c564b@0e907

>> 3

…種別(1.家賃 2.電気料金などリストから選択)…このような表になっていました。
これを別シートで、エリア、支店ごとに売り上げと支払いの対比表を作っていました。

 水道光熱費並びに家賃を支払月毎や使用月毎に分類し、売上と対比する、という事に意味があるのかよくわかりませんが、頑張って下さい。
 慣れないうちは、名称そのものに主キーを設定し敢えてIDを使わない、とした方が分かり易いと思います。

3
みんみん 2022/05/17 (火) 11:10:03 e1017@76e7c

ありがとうございます。今まではエクセルで支払い月ごとに作っていたものが、今後は経理上は支払い月ごと、営業管理として該当月(使用月)ごとに分類する必要が出てきたため、Accessを…と思いました。
時々過去に作ったものを加工したりする程度で、一から作る方法がわからなかったのですが、とりあえず入力用のテーブルと、ルックアップでリストから選択できるフォームを作り、入力していく事が出来ました。
(そのデータをどのように活用していくかはゆっくり勉強しながら進めていきます。)
データを入れるテーブルをシンプルにしなければ、と考えて混乱していました。
どうもありがとうございました。

17

りんご様

11で作成したフォームのトグルに以下を設定
 DoCmd.OpenReport "R_レジメンワークシート", acViewPreview, , "レジメンコード=" & Me.レジメン

これでひとまず表示させることができました。
レコードソースのクエリwhere条件とパラメータは削除してます。
あとは、添付画像の場合4以降を表示させないようにできれば。。

このときのDebug.Print fld.Nameの結果は





・・・とすべての数値が出ていました。

画像1

16

りんご様

ありがとうございます。
上段のDebug.Print Me.RecordSource と Debug.Print qd.Nameではレコードソースとなったクエリが表示されましたが。
下段のDebug.Print fld.Nameではなにも表示されませんでした。

レコードソースのクエリwhere条件で直接コードを入れた結果は






15
といった希望の数値が出ました。

3

基本的にこの回答の通りでいいと思いますが、

 取り敢えず、同じ構造のテーブルを用意して振り分けずにそのままインポート

ここは、インポートでなくリンクでいいかと思います。
そうすればテーブルは不要ですし、インポート前にテーブルからデータ削除とかの操作も不要になります。

2
りんご 2022/05/17 (火) 05:35:12 c564b@0e907

>> 1
 売上なのか、受注したのか、出荷したのか?伝票テーブルに締め日と請求日を持たせるべきか?という点が気になります。

1
りんご 2022/05/17 (火) 05:22:09 c564b@0e907

 セオリーはわかりませんが、こんな感じで出来るのかもしれません。
 取り敢えず、同じ構造のテーブルを用意して振り分けずにそのままインポート
テーブル1: 日付,取引先,商品ID,個数,締め日,請求日
 テーブル1の選択クエリを作る。伝票テーブルに関係するフィールドを選ぶ。
クエリ1:日付,取引先,締め日,請求日
 集計ボタンを押してグループ化したら、追加ボタンを押して追加クエリに変更し、実行ボタンを押して伝票テーブルに追加。
伝票テーブル:🔑伝票ID,日付,取引先,締め日,請求日
 クエリ2を作る。テーブルの追加ボタンを押して伝票テーブルとテーブル1を表示。共通するフィールドを結合。詳細テーブルに関係するフィールドを選ぶ。
クエリ2:伝票ID,商品ID,個数
 追加ボタンを押して追加クエリに変更し、実行ボタンを押して詳細テーブルに追加。
詳細テーブル:🔑詳細ID,伝票ID,商品ID,個数

2
hiroton 2022/05/16 (月) 11:08:44 22735@f966d

EXCELでの運用の問題点はリスト化されていますか?
ACCESS(データベース化)で問題点が解決される見込みは立っていますか?

数年後、そのままACCESSを使っていける環境(特に人員の入れ替え・教育など)ですか?

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

という段階であればACCESSに移行してもメリットを感じないと思います(データベース化自体にはメリットはあります)


「支払い一覧」というテーブルはどのように作ればいいのか

簡単なのは「ID名称も登録する」です
入力フォームではコンボボックスで、登録(連結列)をIDにして表示は名称にします。さらに、コンボボックスの更新後処理イベントで名称を登録するようにします

5
nokonoko 2022/05/16 (月) 10:50:29 3c8e6@54883

りんご様

今までご回答ありがとうございました。
とりあえず、本質問は終了させていただきます。

15
りんご 2022/05/16 (月) 10:49:18 c564b@0e907 >> 13

ちょっとよくわからないです。念の為、Debug.Printの結果をイミディエイトウィンドウで確認してみるとか。

Set qd = db.QueryDefs(Me.RecordSource)
 この後に、Debug.Print Me.RecordSourceを追加。Debug.Print qd.Nameを追加。

 Set fld = qd.Fields(cnt)
 この後に、Debug.Print fld.Name を追加。

4
nokonoko 2022/05/16 (月) 10:48:49 修正 3c8e6@54883

ご返答が遅くなりまして、失礼いたしました。
ご回答いただいた内容を基に対処を行おうと、本日ファイルを開いたところ、
今まで発生したエラーが(何もしていないのに)発生しなくなりました。
私の端末以外からも同様でした。
よって、何らかの365関連のトラブルにかかっていたのかもしれません。

そのような、状況ではありますが、いただいたコードを試しましたので
ご確認願います。

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

>F27 台帳を開いた直後や何か操作した直後に、コマンドボタンを押すと、どんなメッセージが出ますか?
どのような作業をした場合も、同様の結果でした。

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