実現したいこと
データが格納されている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
回答1件
あなたの回答
tips
プレビュー