- 締切済み
エクセルの名簿から、団体ごとに抽出して自動印刷したいのですが
毎回参加者が異なる名簿(エクセルデータ)があります。 B列には団体名が入っています。 なお、1行目はタイトル行で、名簿ごとに20行~150行くらいのボリュームになります。 このような状況下で、団体名ごとに抽出して自動で印刷したい(タイトル行も込みで)のですが、どのような関数またはマクロを作成すればよろしいのでしょうか。 マクロの使用経験は、標準モジュールの簡単な記述を修正してフォームのボタンに登録して使用したことがある程度です。 なお、これまでは、改ページを一つずつ設定するか、オートフィルターで一つずつ抽出して印刷していました。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
質問文で >これまでは、改ページを一つずつ設定するか… とありますので、 ・あらかじめ団体名別に並べ替えてある ・あらかじめ[行のタイトル]が設定されている ことを前提にします。 動作の概要 選択しているシートについて、 まず、すべての改ページを解除する。 3行目(2つ目のデータ)から最終行について B列の値が上の行と異なれば、改ページを挿入する。 (Excel2003で動作確認済) '-------------------↓ ココカラ ↓--------------------- Sub Sample071122() With ActiveSheet .ResetAllPageBreaks For i = 3 To .Range("b65536").End(xlUp).Row If .Cells(i, 2) <> .Cells(i - 1, 2) Then .HPageBreaks.Add Before:=.Cells(i, 2) End If Next i End With End Sub '-------------------↑ ココマデ ↑--------------------- もし必要があれば、下記のように ・シートをコピーする ・行のタイトルを設定する ・B列で並べ替える ・印刷する ・コピーしたシート(ブック)を閉じる といった処理を加えてもよいかと思います。 '-------------------↓ ココカラ ↓--------------------- Sub Sample0711222() ActiveSheet.Copy With ActiveSheet .PageSetup.PrintTitleRows = "$1:$1" .Range("B1").Sort Key1:=Range("B1"), Header:=xlGuess .ResetAllPageBreaks For i = 3 To .Range("b65536").End(xlUp).Row If .Cells(i, 2) <> .Cells(i - 1, 2) Then .HPageBreaks.Add Before:=.Cells(i, 2) End If Next i .PrintOut .Parent.Close savechanges:=False End With End Sub '-------------------↑ ココマデ ↑---------------------
- imogasi
- ベストアンサー率27% (4737/17070)
処理の手順は、私のお勧めは (1)質問のシートを、決まった名の別シートにコピーする。 (2)B列〔団体名)でソートする。 (3)第3行目から最数行までについて、B列の値が変化したかIF文で聞く。 変化したら、(前回変化行から)その前行までを見出し+項目見出しともに印刷する。 終わり行まで繰り返す。 (1)(2)はマクロの記録でコードがわかる。 しかし下記の方が、毎回同じシートを使うので、シートが増えず、この方が良いでしょう。 Sub test01() Sheets("コピーS").Cells.Clear Sheets(1).Range("a2").CurrentRegion.Copy Sheets("コピーS").Range("a2") End Sub -- メインの処理は 例データ A2:E7 ーー 団体名 x y z 1 a 12 21 31 2 a 13 22 32 3 a 14 23 33 4 c 15 24 34 5 c 16 25 35 として ーー Sub test02() d = Range("a65536").End(xlUp).Row s = 3 '同一団体のスタート行 m = Cells(3, "B") '前行の団体名 For i = 3 To d If Cells(i, "B") = m Then Else Range(Cells(s, "A"), Cells(i - 1, "C")).PrintOut s = i m = Cells(i, "B") End If Next i Range(Cells(s, "A"), Cells(d, "C")).PrintOut End Sub wo 実行して、団体ごと別ページに明細が印刷できます。 しかしA2:E2の見出しや、帳票見出しは PrintOutではできないようです。改ページしてしまうのです。 ーー そこで ページ設定 シート 印刷タイトルの 列のタイトル を設定する操作をして、マクロの記録をとり 印刷の前に、そのコードを付け加えてください。 この課題はVBAの相当経験が無いと苦労するかも知れない。
お礼
丁寧な回答ありがとうございました。 でも、私にはかなり困難な内容でした。
お礼
回答ありがとうございました。 内容はよく分かりませんが、シンプルな方を利用させていただきます。