質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

792閲覧

Access フラグが「継続」のレコードのみ、自動でレコードをコピー&1部変更を加えて新規追加したい

ryoya_access

総合スコア34

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/08/13 07:43

概要

Access(2007-2016)で契約管理DBを作成しています。

顧客と契約している業務ごとに「継続」「休眠」「終了」の3つのフラグのうちどれか1つを割り当てているデータがあります。ここでフラグが「継続」だった場合、ボタンを押したときに来月分の契約情報を更新するVBAを書きたい(Accessに備わっている機能で解決できるならそうしたい)のですが、検索でなかなかヒットせず、こちらに質問させていただくことにしました。

以下、詳細になります。

テーブルとリレーション

〇使用テーブルは3つで、以下のようにリレーションを組んでいます。

イメージ説明

1.T_クライアント---------------
クライアントID:オートナンバー
クライアント名:短いテキスト

顧客ID 顧客名
1 ○○商事
2 ○○電気
3 ○○通信

2.T_受注---------------
受注No:オートナンバー
受注日:日付
クライアントID:数値

受注No 受注日 クライアントID
1 2020/06/01 1
2 2020/06/01 2
3 2020/07/01 3

3.T_受注明細-------------
受注No:数値
業務内容:短いテキスト
契約月:日付
継続フラグ:短いテキスト(継続,休眠,終了の3択のコンボボックス)

受注No 業務内容 契約月 継続フラグ
1 クレーム処理 2020/06/01 休眠
1 営業代行 2020/06/01 継続
1 営業代行 2020/07/01 継続
1 営業代行 2020/08/01 継続
2 クレーム処理 2020/06/01 終了
3 定期清掃 2020/07/01 継続
3 定期清掃 2020/08/01 継続

###クエリ
以上のテーブルから、次のようなクエリを作成しました。
イメージとしては、1カ月単位の契約が、1クライアントに対して複数個生じている状態です。

例)○○商事は、6月は「クレーム処理」「営業代行」の2業務を契約していた
➡「クレーム処理」はフラグが「休眠」のため7月にもちこさない
➡「営業代行」はフラグが「継続」のため7月も契約継続
イメージ説明

**ここで、フラグが「継続」になっているレコードのみ、ボタンを押すと「契約月」だけ+1したレコードを新しく追加したいと考えています。**ボタンはフォーム等に設置して、「継続」から「休眠,終了」になるレコードのフラグを毎月手作業で更新し、ボタンを押すような形式を考えています。

例)契約月 クライアント名 業務内容 継続フラグ
2020/08/01 ○○商事 営業代行 継続

2020/09/01 ○○商事 営業代行 継続

初歩的な質問かもしれませんが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/08/13 07:51 編集

>来月分の契約情報を更新するVBAを書きたいのですが、検索でなかなかヒットせず どのような処理を想定して検索したのですか? >フラグが「継続」になっているレコードのみ、ボタンを押すと「契約月」だけ+1したレコードを新しく追加したいと考えています それが分かっていて、何が出来ていないのしょう? 試したコードも載せないのは、段々丸投げになっているように感じます。
dodox86

2020/08/13 08:14

クライアントごとに直近の契約月で継続になっているレコードをSELECTして、契約月を+1したものをINSERTすれば良いだけでは。WEBを検索してピッタリなものを見付けるものではなく、自分で業務に適合するように考え、実装を考えるものだと思います。
ryoya_access

2020/08/14 01:11

段々丸投げになっているように感じます>おっしゃる通りです。「この部分のここが、~理由で分からない,うまく動かない」といったレベルの具体的な質問に落とし込んでから、投稿させていただくべきでした。回答していただいている皆様にも失礼でした、気を付けます。
guest

回答2

0

一括で処理するなら、

SQL

1INSERT INTO 2 T_受注明細 3SELECT 4 T1.受注No AS 受注No, 5 T1.業務内容 AS 業務内容, 6 DateAdd("m",1,T1.契約月) AS 契約月, 7 T1.継続フラグ AS 継続フラグ 8FROM 9 T_受注明細 AS T1 10INNER JOIN ( 11SELECT 12 T2.受注No, 13 T2.業務内容, 14 Max(T2.契約月) AS Max_契約月 15FROM 16 T_受注明細 AS T2 17GROUP BY 18 T2.受注No, 19 T2.業務内容 20 ) AS Q1 21ON 22 T1.受注No = Q1.受注No 23AND 24 T1.業務内容 = Q1.業務内容 25AND 26 T1.契約月 = Q1.Max_契約月 27WHERE 28 T1.継続フラグ = "継続"

でしょうか。ある1明細だけ処理するなら、WHERE条件に加えれば良いのでは。

投稿2020/08/15 09:16

kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

いったん自己解決とし、回答受付を止めさせていただきます。実際に解決し次第、こちらに記載します。

投稿2020/08/14 01:13

ryoya_access

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問