• 締切済み

エクセルの名簿から、団体ごとに抽出して自動印刷したいのですが

毎回参加者が異なる名簿(エクセルデータ)があります。 B列には団体名が入っています。 なお、1行目はタイトル行で、名簿ごとに20行~150行くらいのボリュームになります。 このような状況下で、団体名ごとに抽出して自動で印刷したい(タイトル行も込みで)のですが、どのような関数またはマクロを作成すればよろしいのでしょうか。 マクロの使用経験は、標準モジュールの簡単な記述を修正してフォームのボタンに登録して使用したことがある程度です。 なお、これまでは、改ページを一つずつ設定するか、オートフィルターで一つずつ抽出して印刷していました。 よろしくお願いします。

みんなの回答

noname#52504
noname#52504
回答No.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 '-------------------↑ ココマデ ↑---------------------

rv200zrv
質問者

お礼

回答ありがとうございました。 内容はよく分かりませんが、シンプルな方を利用させていただきます。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

処理の手順は、私のお勧めは (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の相当経験が無いと苦労するかも知れない。

rv200zrv
質問者

お礼

丁寧な回答ありがとうございました。 でも、私にはかなり困難な内容でした。

関連するQ&A