• 締切済み

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

毎回参加者が異なる名簿(エクセルデータ)があります。 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/17068)
回答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

  • エクセルでの自動抽出がうまくいきません

    エクセル2000で自動抽出機能を使用しましたが最初の行の項目だけ重複して抽出されます。直す方法はありませんか?自動抽出の方法はデータセルを指定してデータ→フィルタ→フィルタオプションの設定→選択範囲内をデータのセルに指定、指定した範囲を抽出先のセル指定、重複するレコードは無視するにチェックをいれokです。なお上記のマクロは次のようになっています。Sub 商品名の集計() ' ' 商品名の集計 Macro ' マクロ記録日 : 2002/6/30 ユーザー名 : ky ' ' Range("D8:D22").Select Application.CutCopyMode = False Range("D8:D22").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _ "B26:B36"), Unique:=True Range("A26").Select End Sub 以上よろしくお願いいたします。

  • Excel表の名簿を印刷しようとしています。

    Excel表の名簿を印刷しようとしています。 Excel表は次のようになっています。 タイトル行 区分1 名簿 区分2 名簿 区分3 名簿 ここで、各名簿は数件から2ページに渡る物もあります。 これから、区分をタイトル行の上に次のように、印刷したいのです。 区分1 タイトル行 区分1 名簿 区分2 タイトル行 区分2 名簿 しかし、次のように印刷するのは、ページ設定でタイトル行を指定し、 名簿の中に、改行を指定すれば実現できます。 タイトル行 区分1 名簿 タイトル行 区分2 名簿 今は、sheetや別ファイルに分けて、実施しています。 しかし、区分が10ケあれば、タイトル行の変更や印刷設定等を10回別々に実施する必要があり大変面倒です。 ヘッダーを使っても実現できそうにありません・ 良い知恵が有れば教えて下さい。

  • Excelでオートフィルタしたシートを印刷実行すると白紙が1ページ目に挿入される

    Excel2003で約800行のデータを作り、オートフィルタ(日付データ)で出力対象レコードを絞り込み、それを印刷実行しています。 オートフィルタで例えば行番号500~550が抽出された場合、 印刷を実行すると、 1ページ目は行のタイトルと指定した行のみが出力 2ページ目以降、タイトル行とデータ行が出力 となり、1ページ目は無駄になってしまいます。 データ行は行番号2からあり、ページ設定の印刷範囲でも2行目からを設定しています。 正しくはオートフィルター抽出結果の500~550行目データが1ページ目から印刷されなければならないと思うのですが、 どこの設定を変更すれば正しく印刷できるようになるのか 教えてください。 (説明が不明な場合には補足させていただきたく思います。よろしくお願いします)

  • エクセルの横からのデータ抽出

    エクセルの データ → フィルター → オートフィルター を使用すると、行の一番先頭に▽マークが出てきて、列データの抽出をすることができますが、逆は可能なのでしょうか? すなわち、列の一番左部分に右横向き▽マークが出て、行のデータ抽出を行うということは、可能なのでしょうか?

  • エクセルのオートフィルタ機能を使った際の印刷

    エクセルでリスト形式のデータを作って、オートフィルタを使ったときの印刷なんですが、何ページもあるデータをフィルタで抽出したものだけ印刷したいのに、データが離れた行にあるので、1ページは10行、2ページ目は2行、3ページ目は5行…のように連続して印刷できません。 改プレかオートフィルタの設定かなあと思ったんですが、設定の場所がわかりません。 よろしくおねがいします。

  • エクセルのデータ抽出

    会社で注文のあった業者のリストをエクセルで 作ってて450行くらいあります。 各項目には会社名や内容や価格などありますが その中には空白のセルや行もあります。 そこからA列に自分が抽出したい行に印をいれて フィルタをかけたところ、空白があるためか すべてを抽出できません。1行1行抜き出すのもいいのですが 今後、データも増えることを考えると 何かいい方法で抽出したいのですが、 どうしたらいいでしょうか? やはりマクロをつかうのでしょうか? すみませんがよろしくお願いいたします。

    • ベストアンサー
    • Mac
  • エクセル抽出について

    初歩的な質問で大変恐縮です。 エクセルで10列×5行でひとまとまりの下に続く表があり、その中の1列目2行目に入力してある「支店」別にデータを抽出したいと思っています。オートフィルタを使うと1行づつなら抽出できるのですが、10列×5行のまとまりごと抽出する方法はありますでしょうか? つたない文章で申し訳ありませんが、ご教授ください。

  • VBAによる自動印刷について

    エクセル初心者です。VBAのことで教えていただきたいです。 VBAを使って項目ごとにオートフィルタ→抽出されたものを印刷というのを、したいのですがどういったコードを書けばよいか、調べてみましたがしっくりくるものがありませんでした。 イメージ的には名前毎にフィルターをかけて、 その結果を印刷したいのですが、どのようなコードになるのでしょうか。 全部で2000行くらいあるので、いちいちフィルターをかけて→印刷 を手でしていると時間がかかります。(名前も重複なしで1000以上あるので、、、) フィルター→印刷、次の名前でフィルター→印刷を自動化するには どうすればよいのでしょうか。 説明が下手ですみませんが、できれば実際のどういったコードになるのかを教えていただきたいです。

  • オートフィルターで抽出してコピー&印刷するマクロ

    いつもお世話になります。 エクセル2002です。 (1)オートフィルターでデータを抽出(部署ごと)する。(インプットボックスで) (2)抽出された行を1行ずつコピーし、【編集シート】のA1セルに貼り付け (3)【印刷シート】の印刷 (データが3行あれば3枚の印刷がしたいのです) 《データ》   A列  B列 1 (部署)(商品名) 2  01   商品1 3  01   商品2 4  02   商品1  5  02   商品3 ・・・・・・・・・・ ---------------- Sub Macro1() Dim 部署 部署 = InputBox("部署コードを入れてください") Selection.AutoFilter Field:=1, Criteria1:=部署 Range("A1").Select End Sub ------------------ ↑のマクロにどう追加すればよいのかわからないので、教えてください。 よろしくお願いします。

  • エクセル特定の文字を含む行の抽出方法

    すいません!至急で困っております。 何千という行の中から、例えばヨドバシカメラという文字を含む行を抽出したい場合はどうすればいいでしょうか? ヨドバシカメラ~店という行なので、単純にオートフィルタでは抽出できません。 オートフィルタのオプションからもうまくいかず。。 すいませんが、何卒よろしくお願いいたします。

専門家に質問してみよう