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

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

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

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

Q&A

解決済

1回答

913閲覧

ExcelVBAにおいて、別ブックから検索条件のデータをコピーするには?

aminothan

総合スコア7

VBA

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

0グッド

2クリップ

投稿2020/03/24 06:12

編集2020/03/25 04:33

実現したいこと

データが格納されているBook1から、必要なデータのみをBook2へコピーしたい。

Book1のSheet0には、個別ID・測定日時・身長・体重・血圧が保存されている。
また、同一のIDで複数の測定データが保存され、それらはフィルタを用いて体重順に並んでいる。
Book2のSheet1には、データを名札の様にレイアウトするフォーマットがある。
また、個別ID入力欄と実行ボタンが設けられている。
Book2のSheet2は、何もない空シートである。

Book1は元データへの影響を避けるため読み取り専用で開き、プログラムを組むのはBook2とする。

実現したい動作としては、以下の様になると考えています。

1.[作業者] Sheet1の個別ID入力欄に任意のIDを入力する。
2.[作業者] Sheet1の実行ボタンをクリックする。
3.Book1を読み取り専用で開く。
4.入力された個別IDで絞り込む。
5.体重80kg以上(仮)で絞り込む。
6.測定日時順に並び替える。
7.データをコピーする。
8.Book2のSheet2へ貼り付ける。
9.Sheet2の1行目をコピーする。
10.Sheet1のフォーマット内に貼り付ける。
11.Sheet1を印刷する。
12.Sheet2の2行目をコピーする。(以降、最終行まで繰り返し)
13.メッセージボックスで「印刷完了」と表示する。

試したこと

2.[作業者] Sheet1の実行ボタンをクリックする。
⇒ テキストボックスにマクロを登録

3.Book1を読み取り専用で開く。

ExcelVBA

1Dim ex As New Excel.Application '処理用Excel 2Dim wb As Workbook 'ワークブック 3Dim Path As String 'ブックファイルパス 4 5Set wb = ex.Workbooks.Open(Filename:=Path, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 6 7Windows("Book1.xlsm").Activate

4.入力された個別IDで絞り込む。
5.体重80kg以上(仮)で絞り込む。
6.測定日時順に並び替える。
⇒ ("$A$1:$E$12632")や("$B$1:$B$12632")で最終行まで指定していると思いますが、随時データが追加されていくため行数は可変となります。この場合どうすれば良いでしょうか。

ExcelVBA

1ActiveSheet.Range("$A$1:$E$12632").AutoFilter Field:=1, Criteria1:="個別ID" 2 3ActiveSheet.Range("$A$1:$E$12632").AutoFilter Field:=4, Criteria1:=">=80", _ 4 5ActiveWorkbook.Worksheets("Sheet0").AutoFilter.Sort.SortFields.Clear 6ActiveWorkbook.Worksheets("Sheet0").AutoFilter.Sort.SortFields.Add _ 7 Key:=Range("$B$1:$B$12632"), _ 8 SortOn:=xlSortOnValues, _ 9 Order:=xlAscending, _ 10 DataOption:=xlSortNormal 11With ActiveWorkbook.Worksheets("Sheet0").AutoFilter.Sort 12 .Header = xlYes 13 .MatchCase = False 14 .Orientation = xlTopToBottom 15 .SortMethod = xlPinYin 16 .Apply 17End With

7.データをコピーする。
8.Book2のSheet2へ貼り付ける。

ExcelVBA

1ActiveSheet.Range("A2").CurrentRegion.Copy 2 3Windows("Book2.xlsm").Activate 4Sheets("Sheet2").Select 5ActiveSheet.Paste

9.Sheet2の1行目をコピーする。
10.Sheet1のフォーマット内に貼り付ける。
11.Sheet1を印刷する。

ExcelVBA

1Sheets("Sheet1").Select 2Range("A1") = Sheets("Sheet2").Range("C3") 3 4ActiveSheet.PrintOut

12.Sheet2の2行目をコピーする。(以降、最終行まで繰り返し)
⇒ 最終行までを判断して繰り返す方法が分かりません。

13.メッセージボックスで「印刷完了」と表示する。

ExcelVBA

1MsgBox "印刷完了"

解決したいこと

プログラム初心者のため、個々の命令は調べて出てきた方法で何とかなるのですが、
これらを組み合わせて実行することが出来ません。
どの命令を、どの様な手順で活用すれば良いでしょうか。

初投稿であり、質問内容が漠然としており申し訳ありません。
何卒、宜しくお願い致します。

[3/25追記]
皆様のおかげで少しずつ理解してきました。ありがとうございます。
手順4~6と12につきましてご教示の程、宜しくお願い致します。

補足情報

OS:windows 10
ツール:Microsoft Excel 2010

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

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

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

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

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

stdio

2020/03/24 08:56

そこまで分かっているなら、ネットで検索すれば全部出ます。
meg_

2020/03/24 10:33

現在、理解していることを掲載してみてください。 ブックを開くことは出来るでしょうか?
aminothan

2020/03/24 23:29

"試したこと"を追加致しました。主に手順4~6、12が理解出来ていません。 お手数をお掛けしますが、宜しくお願い致します。
Y.H.

2020/03/25 02:16

Excelなら「マクロの記録」で操作したことをVBAとして生成してくれる便利な機能があるので 4.入力された個別IDで絞り込む。 5.体重80kg以上(仮)で絞り込む。 6.測定日時順に並び替える。 はVBAのコードでどうやるのかすぐにわかると思いますよ。
aminothan

2020/03/25 04:34

マクロの記録についてご教示いただきありがとうございます。 手順4~6について見直しを行いました。
guest

回答1

0

ベストアンサー

⇒ ("$A$1:$E$12632")や("$B$1:$B$12632")で最終行まで指定していると思いますが、随時データが追加されていくため行数は可変となります。この場合どうすれば良いでしょうか。

セルA1を起点としてデータが埋まっている場合、使用しているセルの最大行は以下で取れます。

VBA

1dim maxRowIndex 2maxRowIndex = ActiveSheet.UsedRange.Rows.Count

そして
"$A$1:$E$12632""$A$1:$E$" & maxRowIndex
"$B$1:$B$12632""$B$1:$B$" & maxRowIndex

のようにすれば最大行は可変にできます。

投稿2020/03/25 05:33

Y.H.

総合スコア7914

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

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

aminothan

2020/03/26 02:22 編集

最大行までフィルタをかけてデータを絞り込むことが出来ました。 ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問