Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
任意のレコードをユーザーが塗りつぶす方法
投稿日時: 21/04/14 15:01:05
投稿者: だいふくもち

いつもこちらのコミュニティには大変お世話になっております。現在Accessを勉強中の者です。
ご経験者様のご意見を伺えればと思い、相談させていただきました。
さっそくですが、質問内容に入らせていただきます。
 
現在、入金管理システムをAccessで作成しようとしております。
客先の振り込みが完了した月を視覚的に判断するために、
下記のような機能を実装できたらと思っております。
 
*入金確認フォーム
【フィールド】 契約番号 | 契約内容 | 2021年4月 | 2021年5月 | 2021年6月 | 2021年7月 |
【レコード】 1001001 | 〇〇〇案件 | \3,000 | \3,000 | \3,000 | \3,000 |
【レコード】 1001002 | △△△案件 | ------- | \5,000 | \5,000 | \5,000 |
【レコード】 1001003 | ●●●案件 | ------- | ------- | ------- | \1,000 |
(太字 = レコードの塗りつぶし)
 
|塗りつぶしボタン|
 
【塗りつぶしの方法】
@任意のレコードを選択
A「塗りつぶしボタン」を押す
B選択したレコードが塗りつぶされる
 
そこで疑問が生じたのですが、帳票フォームで任意のレコード(単一)を
フォームを閲覧するユーザーが塗りつぶすような機能を実装することは可能でしょうか?
 
ネットで調べてみたのですが、カレント行を塗りつぶすもしくは
条件書式で条件に当てはまったレコードの色を変える等の方法は
確認できたのですが、どうしても単体のレコードを塗りつぶす方法だけは発見できず
こちらでご相談させていただきました。
(もし簡単に見つかるような内容でしたら調べが足りず申し訳ありません…)
 
ちなみに、「テーブル_月額マスタ」の「入金済」をユーザーがさわれるような
別のフォームを用意し、ユーザーがチェックボックスをチェックした場合に
入金確認フォームに表示される「金額」レコードが塗りつぶされる…
というような方法も考えたのですが、クロス集計クエリということもあり
うまく実装できる力量がなく、上記の考えに至りました。
 
(以下、使用しているテーブルです)
 
*テーブル_契約マスタ
【フィールド】契約番号 | 契約内容 |
【レコード】 1001001 | 〇〇〇案件 |
【レコード】 1001002 | △△△案件 |
【レコード】 1001003 | ●●●案件 |
.
.
.
 
*テーブル_月額マスタ
【フィールド】契約番号 | 月 | 金額 | 入金済 |
【レコード】 1001001 | 2021/4 | \3,000 | ☑ |
【レコード】 1001001 | 2021/5 | \3,000 | ☑ |
【レコード】 1001001 | 2021/6 | \3,000 | □ |
【レコード】 1001001 | 2021/7 | \3,000 | □ |
【レコード】 1001002 | 2021/5 | \5,000 | ☑ |
【レコード】 1001002 | 2021/6 | \5,000 | □ |
【レコード】 1001002 | 2021/7 | \5,000 | □ |
【レコード】 1001003 | 2021/7 | \1,000 | □ |
.
.
.
 
解決策をご存じの方がいらっしゃいましたら、お手数をお掛けしますが
ご教授いただけますと大変幸いです。
考え方に対するアドバイス等も大変有難いです。
抽象的な質問で申し訳ありません…どうぞよろしくお願いいたします。

回答
投稿日時: 21/04/14 16:16:52
投稿者: Suzu

「塗りつぶし」と言うのが、どのような状態を指しているのかが不明確です。
Ex)
 ・詳細セクションの背景色を変える
 ・特定コントロールの背景色を変える(全レコード変わります)
 ・特定レコード、特定フィールドの背景色を変える
 
   それとも、フォント色を変えるのでしょうか?
 
 
コントロールは、フィールド数分しか用意していませんよね。
帳票フォームの場合、
連結コントロールの値は、コントロールソースにより、レコード毎に変わっている様に見えます。
でもそれ以外のプロパティーは、全レコード共通となります。
 
なので、条件付書式を使うしかありません。
 
 
でも、クロス集計クエリがソースの現状では不可です。
(元クエリに、2021年4月、2021年4月背景コントロール用フィールド、
 2021年5月、2021年5月背景コントロール用フィールド の様に 複数を持たせる必要があり
 かつ、クロス集計クエリでは、レコードの編集ができない)
 
契約番号、契約内容、2021年4月、2021年4月_チェック、2021年5月、2021年4月_チェック・・・
の様なテーブルを別に用意し、そのフォームをレコードソースにしないと駄目です。
(フィールド名は、汎用的に Fld1、Fld1_Chk、Fld2、Fld2_Chk・・の様にして、
 フォーム上のラベルを変える事で対応できますよね)
 
 
或いは、非連結の単票フォームで、表示件数×フィールド数 分のコントロールを配置すれば
個々のコントロールの背景やフォントを変える事が可能。
(件数が多い場合には、スクロールをしている様に見せる為、各コントロールの値を変える処理で
  スクロールしている様に見せかける事は可能)
ただし、非連結ですので、 入力・編集・削除の為の仕組みをVBAで処理する必要があります。
 
どちらにしても、開発工数が多く掛かる事は請け合いです。

回答
投稿日時: 21/04/15 11:29:33
投稿者: sk

引用:
現在、入金管理システムをAccessで作成しようとしております。
客先の振り込みが完了した月を視覚的に判断するために、
下記のような機能を実装できたらと思っております。

引用:
「テーブル_月額マスタ」の「入金済」をユーザーがさわれるような別のフォームを用意

まず以下の点を意識(というか業務分析)した上で、
こっちを検討される方が順序としては先ではないかと。
 
・業務フロー上におけるどのようなイベントやアクションによって
 「入金が完了した」と判断されるのか。
 
・それらのイベント/アクションはどのタイミングや
 どのような周期/頻度で発生するのか。
 
例えば「領収書が届いたらその都度その内容を入力する」
といった形になるのであれば、その入力作業に際して
[テーブル_月額マスタ]のレコードを全て表示したり、
クロス集計を実行したりする必要はありません。
 
「一覧表をスクロールしながら、編集対象となるレコード/フィールドを
目視で探し当てる」ような作業を強いるレイアウトにするのではなく、
「任意の契約と請求月を指定して編集対象となる[月額マスタ]のレコードを
絞り込み、そのレコードの[入金済]の値を更新する」
「既に入金済みだった場合は(念のため)警告メッセージを表示する」
といった形にした方が入力ミスも起こしにくくなるはず。
 
また「口座振替サービスによって自動引き落としが行なわれた結果が
決済データ( csv ファイル等)として毎月作成される」といった場合、
[月額マスタ]と決済データのレコードが 1 対 1 で紐づけできる状態である
(決済データ上で「どの契約に関する」「何年何月分の請求に対して」
「いくら(何円)」振り込まれたかを明確に判別することができる)なら、
決済データをそのままデータベースに取り込み、それぞれの入金に当てはまる
[月額マスタ]のレコードの[入金済]を True に更新する仕組みを
月次処理として構築するのが一般的です。
 
塗りつぶし云々は、本質的に「現在の入金状況の確認」のための
視覚的効果(アウトプット要素)に過ぎません。
「入金されたか否か」を表すフィールド(インプット/アウトプット要素)として
[入金済]が定義されているのですから、各レコードの[入金済]の値を
より簡単に、より正確に更新するにはどのようなレイアウトの
フォームを作成するべきかを再度検討されてみてはいかがでしょうか。

投稿日時: 21/04/15 13:31:44
投稿者: だいふくもち

>Suzu様
ご回答いただきありがとうございます!
そして回答が遅れてしまい大変申し訳ありません…
 
「塗りつぶし」の定義があいまいで申し訳ありませんでした…
ここで想定していたのは、背景色です。
 
できないことはないかもしれませんが、かなり大変そうなのと
色々盛り込むと途中で予期せぬエラーが発生した時に
今の私の力量では対応が厳しそうだと感じました…
 
現在はこの管理表をExcelで運用しており、入金済のチェックを
セルの塗りつぶしで処理しているのですが、
少しでも今までの方法に寄せた方が、社内に浸透するかなぁ…と思っての考えでした。
しかし、Accessでは厳しそうだという判断ができて良かったです。
この際に運用を見直し、もっとDBに合った方法を考えてみます!
 
この度はご回答いただきありがとうございました!

投稿日時: 21/04/15 14:20:07
投稿者: だいふくもち

>sk様
前回は集計クエリの件で助けていただき本当にありがとうございました!
今回も拙い内容にも関わらず、ご丁寧にご教授いただきありがとうございます…!
 
sk様のご指摘に、はっとしました。
現在この管理表をExcelで運用しているのですが、同じ様式にこだわりすぎていたようです。
塗りつぶしで全体像を俯瞰して見れることで安心感?を得たかったのかもしれません。
 
sk様のアドバイスを元に、新たな入金管理フォーム(案)を考えてみました。
 
[更新されるタイミング]
毎朝チェックする銀行の振り込み履歴で入金を確認できたら
 
----------------------------------------------------------------------
*テーブル_月額マスタ
 
【フィールド】契約番号 | 月 | 金額 | 入金済 |
【レコード】 1001001 | 2021/4 | \3,000 | ☑ |
【レコード】 1001001 | 2021/5 | \3,000 | ☑ |
【レコード】 1001001 | 2021/6 | \3,000 | □ |
【レコード】 1001001 | 2021/7 | \3,000 | □ |
【レコード】 1001001 | 2021/5 | \5,000 | □ |
【レコード】 1001002 | 2021/6 | \5,000 | □ |
【レコード】 1001002 | 2021/7 | \5,000 | □ |
【レコード】 1001003 | 2021/7 | \1,000 | □ |
----------------------------------------------------------------------
 
↓オプションボタン「未入金」を選択した場合
----------------------------------------------------------------------
*フォーム_入金管理
 
契約番号:[1001001]
期間:[2021/6]月〜[2021/7]月
☑未入金のみ表示(デフォルト) / □入金済のみ表示
≪検索ボタン≫
 
【フィールド】契約番号 | 契約内容 | 月 | 金額 | 入金済(編集可) |
【レコード】 1001001 | 〇〇〇案件 | 2021/6 | \3,000 | □ |
【レコード】 1001001 | 〇〇〇案件 | 2021/7 | \3,000 | □ |
【レコード】 1001001 | △△△案件 | 2021/6 | \5,000 | □ |
 
≪Excel出力ボタン≫
----------------------------------------------------------------------
 
↓オプションボタン「入金済」を選択した場合
----------------------------------------------------------------------
*フォーム_入金管理
 
契約番号:[1001001]
期間:[2021/6]月〜[2021/7]月
□未入金のみ表示(デフォルト) / ☑入金済のみ表示
≪検索ボタン≫
 
【フィールド】契約番号 | 契約内容 | 月 | 金額 | 入金済(編集可) |
【レコード】 1001001 | 2021/6 | \3,000 | ☑ |
【レコード】 1001001 | 2021/7 | \3,000 | ☑ |
 
≪Excel出力ボタン≫
 
※入金チェックが間違っていた時に修正するための抽出条件
 チェックを外そうとすると、警告メッセージボックスのワンクッションがある
----------------------------------------------------------------------
 
もし、ご意見等ございましたら、重ね重ね申し訳ありませんが
ご指摘いただけましたら大変ありがたいです…!
 
Accessに移行する前にそもそもの運用や在り方を見直すべきでした。
クロス集計クエリは売掛金確認用の別のフォームで使用しようと思います。
重ねてになりますが、ご指摘いただき本当にありがとうございました!

回答
投稿日時: 21/04/15 15:06:01
投稿者: Suzu

引用:
テーブル_月額マスタ
【フィールド】契約番号 | 月 | 金額 | 入金済 |
【レコード】 1001001 | 2021/4 | \3,000 | ☑ |

 
Yes/No でも良いでしょうし、
入金日や、入金確認日 等の 日付データとして管理し Null であれば入金が無い と判定する方法もあります。
 
更に言うなら
引用:
毎朝チェックする銀行の振り込み履歴

引用:
Accessに移行する前にそもそもの運用や在り方を見直すべきでした。
クロス集計クエリは売掛金確認用の別のフォームで使用しようと思います。

があるのであれば、
振込み履歴自体を Accessのデータに取り込後、契約番号、月 と紐付け、
請求額と入金額との差額確認を行い、「テーブル_月額マスタ」から入金済みを外した
入金確認が必要な一覧の出力に繋げる事が可能と思います。
 
どこまで取り込むかは、悩みどころではありますね。

投稿日時: 21/04/16 14:54:36
投稿者: だいふくもち

<Suzu様
 
ご回答いただきありがとうございます!
 

Yes/No でも良いでしょうし、
入金日や、入金確認日 等の 日付データとして管理し Null であれば入金が無い と判定する方法もあります。

確かにそのアイデアもありますね!
入金日で管理した方が、後々の確認が必要になった場合に重宝しそうです。
 
振込み履歴自体を Accessのデータに取り込後、契約番号、月 と紐付け、
請求額と入金額との差額確認を行い、「テーブル_月額マスタ」から入金済みを外した
入金確認が必要な一覧の出力に繋げる事が可能と思います。

これができたらかなり楽になりますね…!
現状、振込履歴で紐づけられそうなデータが整えられていなかったり
私自陣、CSVの取り込みをマクロ化で実装したことがなかったりと
課題はたくさんありますが、目標となる部分が明確化できてよかったです。
また、大変勉強になりました。
 
この度は拙い内容にも関わらず、ご丁寧にご指導くださり本当にありがとうございました![/code]