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

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

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

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

Access

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

Q&A

解決済

1回答

1017閲覧

Accessで煮詰まってしまいました。

sakam112

総合スコア1

VBA

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

Access

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

0グッド

0クリップ

投稿2021/06/03 13:44

編集2021/06/04 08:14

▼作成したいツール▼

①Microsoft Accessにデータを入力
②そのデータをexcelで作られたテンプレートの複数のセルに貼り付け
③テンプレートのExcelを印刷する

以上のツールを作成しておりました。
①の入力後、レコード1行ごとに1枚のテンプレートを作成し、1枚ずつ印刷する流れです。

▼現状▼

テンプレートには項目ごとに入力する欄と、請求書のような表になっている部分がありました。

クエリを作成し、レコードごとに各項目を対応するセルへ貼り付け、それを印刷という流れを単純にループさせるVBAを作成しました。

▼課題▼

無事にそこまでは成功したのですが、追加の依頼があり、同じ電話番号の案件については同じテンプレートの表に入力してほしいとのことでした。

例えばですが、
03-1111-2222 山田さん
03-1111-2222 高橋さん
03-2222-3333 布施さん
03-1111-2222 長谷川さん

とレコードが並んでいた時に、
1レコードずつであれば4枚のテンプレートが作成されますが、

作成したいのは2枚のテンプレートが印刷されるようにしたいと考えております。
ここでは、下4桁2222の山田さん、高橋さん、長谷川さんと入力された一枚と、下4桁3333の布施さんの書かれた2枚です。

本日急に依頼がありAccessを取り扱うのが久しぶりのため、困惑している状況です。
申し訳ございませんが、お力添え頂けたら嬉しいです。

質問頂きありがとうございます。
本日出先のため、すぐにコードを掲載出来ず申し訳ございません。

https://tsware.jp/tips/tips_689.htm

こちらのサイトのコードをベースに作成しておりました。
こちらで動作はしたのですが、このままでは電話番号が同じだとしても、1レコードごとに1枚用紙が印刷されてしまいます。
何かしらの方法を考えたのですが、思い付きませんでした。

クエリは日付、担当者名、電話番号、対応要否の簡単なもので、テーブルで対応要否にチェックが入っているものを抽出していました。

テンプレートの表でない部分に日付、表の部分には担当者名と電話番号が入ります。
同じ電話番号であれば、同じテンプレート内の表に担当者名、電話番号を入れたいと考えております。

分かりづらい文章で申し訳ないのですが、不明点がございましたら再度お知らせ頂けたらありがたいです。

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

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

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

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

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

hatena19

2021/06/04 07:25

現状のクエリやVBAのコードを提示してください。
sakam112

2021/06/04 08:14

ありがとうございます、追記致しました。
K_3578

2021/07/15 07:53 編集

どうでも良いんですけど「煮詰まる」は「論議が十分に行われて結論が出せるようになった状況」という 意味なので正しくは「行き詰まる」です
guest

回答1

0

ベストアンサー

まず、顧客台帳というテーブルにデータを入れます。
SQLで電話番号をグループ化すると電話番号が2つにまとめられます。
次のSQLで電話番号を基に検索すれば、03-1111-2222で3件、03-2222-3333で1件のデータを呼び出すことができます。
Excelを開く処理、Excelに書き込む処理は既にできていると思いましたので省きました。

VBA

1Dim DB As Database 2Dim TB1 As Recordset 3Dim TB2 As Recordset 4Dim SQL As String 5Dim Count As Integer 6 7 Set DB = CurrentDb 8 SQL = "" 9 SQL = SQL & "SELECT 顧客台帳.電話番号 " 10 SQL = SQL & "FROM 顧客台帳 " 11 SQL = SQL & "GROUP BY 顧客台帳.電話番号" 12 Set TB1 = DB.OpenRecordset(SQL, dbOpenDynaset) 13 If TB1.EOF = False Then 14 Do While TB1.EOF = False 15 'Excelを開く処理を追加する 16 Count = 1 17 SQL = "" 18 SQL = SQL & "SELECT 顧客台帳.* " 19 SQL = SQL & "FROM 顧客台帳 " 20 SQL = SQL & "WHERE (顧客台帳.電話番号 = '" & TB1!電話番号 & "')" 21 Set TB2 = DB.OpenRecordset(SQL, dbOpenDynaset) 22 If TB2.EOF = False Then 23 Do While TB2.EOF = False 24 'セルに書き込む処理を追加 25 Count = Count + 1 26 TB2.MoveNext 27 Loop 28 End If 29 TB2.Close 30 'Excelを名前を付けて保存する処理を追加する 31 TB1.MoveNext 32 Loop 33 End If 34 TB1.Close 35 DB.Close 36 Set TB1 = Nothing 37 Set TB2 = Nothing 38 Set DB = Nothing 39

投稿2021/07/15 07:50

sake

総合スコア52

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問