🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

2003閲覧

エクセル 親子関係の関連付けと帳票作成

Mkasai

総合スコア19

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2019/11/26 07:00

編集2019/12/17 08:05

前提・実現したいこと

エクセルで作成した工事の台帳から指定した工事に関する提出書類(帳票)を作成したい

発生している問題・エラーメッセージ

エクセルで作成した工事台帳があり、現在テーブルにしてある。

|工事番号|工事件名|納期|金額|親工事番号
|:--|:--:|--:|
|1|AAAA|R1.11.15|368,000||
|2|BBBB|R1.11.15|261,900|1|
|3|CCCC|R1.11.15|260,000|1|
|4|DDDD|R1.12.25|47,000||
|5|EEEE|R2.1.18|368,000||
|6|FFFF|R2.1.18|266,000|5|
|7|GGGG|R2.3.12|300,000||
|8|HHHH|R1.12.25|266,000|4|

工事番号をクリックしたら、その番号の行の情報を拾い、別ファイルに準備してある雛型に情報を入れ込み、帳票作成を行いたい。
また、工事に対して子工事がある場合は、親工事の選択したら、子工事の行の情報も一緒に拾いたい。
工事番号1のセルをクリックしたら、工事番号2と3の行の情報も一緒に拾う。
親工事番号に番号が入力してある工事番号をクリックした場合は、そのクリックした工事の情報のみ拾う。工事番号2のセルをクリックした場合は2の行の情報のみ。

エクセルVBAを使って作りたいのですが、何からどのように作ったらよいのかわかりません。
よろしくお願いします。

該当のソースコード

Sub ?I???()
'
' ?I??? Macro
'

'
Range("A5,B5,C5,D5,E5,A9,B9,C9,D9,E9").Select
Range("E9").Activate
Selection.Copy
Sheets("?????").Select
Range("A1").Select
ActiveSheet.Paste
End Sub

試したこと

マクロの記録で指定したいセルをクリックしてみました。
記録の内容をヒントにしてみようと思いましたが、クリックしたセルがSelectになっているだけで、条件を付けたい場合、どのようにしたらいいのか悩んでいます。

ご回答いただきましたアドバイスにより、はじめのマクロAを作成しているのですが、今の自分のレベルでできたのが、ここまでです。
アドバイスいただけないでしょうか。

該当のソースコード

Sub マクロA()

' ファイルをひらく Macro
'
Workbooks.Open Filename:="U:???q????[???????.xlsm"

'?t?@?C????A?N?e?B?u Workbooks.Open "U:???q????[???_????.xlsm" Workbooks.Open "U:???q????[???????.xlsm" Workbooks("?????.xlsm").Activate '?w?b?_?[??O??? Rows("2:" & Rows.Count).ClearContents

'?t?@?C????A?N?e?B?u

Workbooks.Open "U:???q????[???_????.xlsm" Workbooks.Open "U:???q????[???????.xlsm" Workbooks("?_????.xlsm").Activate '?A?N?e?B?u?Z????s?S???I?? Rows(ActiveCell.Row).Select

' ?t?@?C????J?? Macro
'
Workbooks.Open Filename:="U:???q????[???????.xlsm"

'?t?@?C????A?N?e?B?u Workbooks.Open "U:???q????[???_????.xlsm" Workbooks.Open "U:???q????[???????.xlsm" Workbooks("?????.xlsm").Activate '?w?b?_?[??O??? Rows("2:" & Rows.Count).ClearContents

'?t?@?C????A?N?e?B?u

Workbooks.Open "U:???q????[???_????.xlsm" Workbooks.Open "U:???q????[???????.xlsm" Workbooks("?_????.xlsm").Activate '?A?N?e?B?u?Z????s?S???I?? Rows(ActiveCell.Row).Select

End Sub

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

んと、こういうものは、
人間がやりやすい方法(と思っていたり、既存の社内でのやり方)にプログラムを合わせるか、
パソコン(エクセル君)がやりやすい方法でプログラムを作るかなのですが、
エクセル君に合わせると比較的容易にアプリを開発出来ますが、
人間に合わせると開発の難易度がぐっと上がります。
多分、
ガッツリVBAと格闘できるなら1週間かからず出来ますが、
今のレベルで本業の合間に開発するなら1~3箇月かかるかもです。
下手したら完成しないってこともあります。
それくらいの覚悟がないとVBAを覚えれないと思います。
まぁ気長に取り組まれることをお勧めします。
VBAの本とかみてると、やりたいことが一瞬で終わるみたいなことが書いてありますが、
「手作業で3日かかるなー。VBAなら一瞬で終わるのに」と思っても、
そのプログラムを作るのに3日かかるなんてことはしょっちゅうですから。
2回目からは楽できると思っても、少し仕様が変わったりして結局一から作ったり^^;
まぁ、今Mkasaiさんが作りたいようなツールを、
今ぱっと仕様を聞いて30分で作れるようになるまで、僕は1年くらいかかったかなぁ。。。
それでも、普通の人よりVBAをガッツリやった方だと思いますが。。。

とりあえず、まずやりたいこと(前提条件と欲しい結果)をちゃんと他人に説明できるように
なるところから始めてください。
あ、あと、やりたいことと並行してVBAを基礎から勉強されることをお勧めします。
僕は本を何万円分も買い漁りましたが、ネットでも多数情報があるので、
そちらでも十分かと思います。

で、本題。
エクセル的な作業の流れとしては、

1)選ぶ(そしてマクロ起動)
2)作業用のシートにデータベースから選択したものに該当したデータを抽出(オートフィルター等)
3)見せるよう(印刷用?)シートにデータを差し込む

となると思います。
こういうものは、作業の中間段階をメモする作業用のシートや、
作業用の列などを使うようにすると、ぐっと考え方が楽になります。

とりあえず、雛型?のイメージを提示してみてください。
そのイメージでどうやればいいか考えてみます。

あ、ぼくはいつも、ここの掲示板に張付いているわけではないので、
3日とか1週間とか回答出来ない時もありますので、ご了承ねがいます。

投稿2019/12/17 14:29

mattuwan

総合スコア2163

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

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

Mkasai

2020/01/30 05:22

アドバイスありがとうございました。 今の自分のレベルではまずやりたい事を伝える事もできておらず、実際に作成するにはちょっと難しのかなと思いました。 もう少し単純にできるよう作り方の考えを変えて、再度ご質問させていただきます。 ご丁寧にありがとうございました。
guest

0

  1. 追加されたマクロAは文字化けで読めず、アドバイスのしようがありません。
  2. やるべきことは、作成したい帳票に必要な個別データ(日付等、システムから入手できるデータを除く)をこのexcel上に用意し、雛型上の必要な位置に埋めこんでいくことです。

現状で都合が悪ければexcelシートも雛型も変更してやり易くすると少し楽になります。
例えば個別データを挿入すべき位置に固有の記号[@@01@@等、最終的に帳票に現れない記号を使う]を入れておいて置換しやすくする。

投稿2019/12/17 08:54

sage

総合スコア1240

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

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

0

このレベルしかブレークダウンできないのならば、プログラムを作成してくれる業者へ発注したほうがいいと思います。
自分で作るのならば、
0. 番号を入力とし、その番号の行の情報を拾い、別ファイルに準備してある雛型に情報を入れ込み、帳票作成を行うマクロを作成する(→マクロAとする)
0. 番号を入力とし、その番号を親工事番号として持つ工事番号のリストを作成するマクロを作成する(→マクロBとする)
0. 指定された番号を親工事番号としてマクロBを起動して子工事番号の一覧を作成し、親工事番号をふくめ、マクロAを順次呼び出すマクロを作成する(→マクロCとする)
※必要ならば孫工事の配慮を追加する。
0. そのボタンを押せばその工事番号を指定してマクロCを起動するようなボタンを登録するマクロを作成する(→マクロDとする)

新しい工事を受注したらデータを入力し、マクロDを呼び出す。

といったところでしょうか。

投稿2019/11/28 08:06

sage

総合スコア1240

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

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

Mkasai

2019/11/29 00:53

ありがとうございました。 マクロのレベルが質問に書いているレベルですので、お恥ずかしいのですが、まずは教えていただいた手順のとおりに、マクロAから作成してみたいと思います。 また、お尋ねすることもあるかと思いますが、宜しくお願い致します。
Mkasai

2019/12/17 08:06

ご回答いただきました内容で、マクロAを作成しているのですが、それすらまだ完成できない状態です。試した事を追記させていただきました。アドバイスいただけないでしょうか。よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問