Excelマクロで抽出印刷をする方法について教えてください

このQ&Aのポイント
  • Excelで抽出印刷をするマクロの記述方法を教えてください。
  • 「シート1」と「シート2」があり、「シート1」には氏名と金額の表があります。
  • 「シート2」のA1に氏名を印刷し、一つの金額しかない人はA2に該当の項目名、B2に金額を印刷し、3つの金額がある人はそれぞれの項目名と金額を印刷する方法です。
回答を見る
  • ベストアンサー

抽出印刷マクロ

sheet1に一行目は項目欄で A1氏名、B1山、C1川、D1谷、E1空、・・・L1合計 があり、A列に各人の氏名があり各項目欄に金額があったりなかったりする表があります。 sheet2には封筒サイズを設定してこれを印刷します。 ここで、sheet2のA1に氏名を印刷します。sheet1の項目中に1つの金額しかない人の分はA1に氏名、A2に該当の項目名、B2に金額、A3に合計の文字、B3に合計金額、罫線をA1:B3に引き印刷。 金額が3項目にある人(山、谷、空)は、A1に氏名、A2に山、B2に金額、A3に谷、B3に金額、A4に空、B4に金額、A5に合計、B5に合計金額、罫線をA1:B5に引き印刷。このように順次印刷するマクロの記述方を教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> 質問の中で ここでsheet2のA1に氏名を印刷しますは、ここでsheet2のA2に氏名を印刷しますです。そのためA3から項目名が始まります。 > 教えていただきました手直しの分で項目名が表示されません。 質問に書いた配置に誤りがあったということですね? ただ、Sheet2のA1に名前を表示しようがA2に表示しようが、そのすぐ下から項目名が表示されるはずです。 それが表示されないということは、Sheet1の方の配置説明も違っているのではないですか? 前回の回答ではhoshi7777さんが書いた通り、Sheet1の1行目が項目欄で A1が氏名~以下各項目としてコードを書きましたが、これも1行ずれてるんじゃないですか? そうであれば、以下のマクロをお試しください。 Sub test02() Dim s2 As Worksheet, x As Long, y As Long, i As Long, n As Integer, c As Range '変数宣言 Set s2 = Sheets("Sheet2") 'Sheet2をs2とする With Sheets("Sheet1") 'Sheet1において x = .Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行を取得しxに代入 y = s2.Cells(Rows.Count, "A").End(xlUp).Row 's2,A列最終行を取得しyに代入 For i = 3 To x '3~xまでをiに代入 With s2 's2において .Range("A2:B" & y).ClearContents 'データクリア .Range("A2:B" & y).Borders.LineStyle = xlNone '罫線クリア End With s2.Cells(2, "A").Value = .Cells(i, "A").Value '氏名転記 n = 2 'nに2を代入 For Each c In .Range(.Cells(i, "B"), .Cells(i, "L")) 'B~L列のi行各セル If TypeName(c.Value) = "Double" Then '数値であれば n = n + 1 'nに1を加算 s2.Cells(n, "A").Value = .Cells(2, c.Column).Value '項目名転記 s2.Cells(n, "B").Value = c.Value '数値転記 End If Next c '次セルへ進み繰り返し With s2 's2において .Cells(n + 1, "A").Value = "合計" '文字入力 .Cells(n + 1, "B").Formula = "=SUM(" & .Range(.Cells(3, "B"), .Cells(n, "B")).Address & ")" '合計計算式入力 .Range(.Cells(2, "A"), .Cells(n + 1, "B")).Borders.LineStyle = xlContinuous '罫線作成 .PrintPreview '印刷プレビュー End With Next i '次行に進み繰り返し End With End Sub

hoshi7777
質問者

お礼

何回もお手数おかけして申し訳ありませんでした。 本当にありがとうございました。 大変勉強になりました。

hoshi7777
質問者

補足

お手数掛けています。本当に申し訳ありません。質問でsheet1は一行目が項目名としていましたが。一行目は空欄で二行目が項目名でした。 そのため項目名が表示されなかったものです。本当に申し訳ありませんでした。よろしくお願いします。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

merlionXXです。 先ほどのでも動きますが、少しだけ手直ししました。 なお、印刷はテストのためプレビューにしてあります。 コードにコメントもつけておきました。 Sub test01() Dim s2 As Worksheet, x As Long, i As Long, n As Integer, c As Range '変数宣言 Set s2 = Sheets("Sheet2") 'Sheet2をs2とする With Sheets("Sheet1") 'Sheet1において x = .Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行を取得しxに代入 For i = 2 To x '2~xまでをiに代入 With s2 's2において .Range("A1:B5").ClearContents 'データクリア .Range("A1:B5").Borders.LineStyle = xlNone '罫線クリア End With s2.Cells(1, "A").Value = .Cells(i, "A").Value '氏名転記 n = 1 'nに1を代入 For Each c In .Range(.Cells(i, "B"), .Cells(i, "L")) 'B~L列のi行各セル If TypeName(c.Value) = "Double" Then '数値であれば n = n + 1 'nに1を加算 s2.Cells(n, "A").Value = c.Offset(1 - i).Value '項目名転記 s2.Cells(n, "B").Value = c.Value '数値転記 End If Next c '次セルへ進み繰り返し With s2 's2において .Cells(n + 1, "A").Value = "合計" '文字入力 .Cells(n + 1, "B").Formula = "=SUM(" & .Range(.Cells(2, "B"), .Cells(n, "B")).Address & ")" '合計計算式入力 .Range(.Cells(1, "A"), .Cells(n + 1, "B")).Borders.LineStyle = xlContinuous '罫線作成 .PrintPreview '印刷プレビュー End With Next i '次行に進み繰り返し End With End Sub

hoshi7777
質問者

補足

ありがとうございました。質問の中で ここでsheet2のA1に氏名を印刷しますは、ここでsheet2のA2に氏名を印刷しますです。そのためA3から項目名が始まります。教えていただきました手直しの分で項目名が表示されません。よろしくお願いします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

一例です。 Sub test01() Set s2 = Sheets("Sheet2") With Sheets("Sheet1") x = .Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To x With s2 .Range("A1:B5").ClearContents .Range("A1:B5").Borders.LineStyle = xlNone End With n = 1 For Each c In .Range(.Cells(i, "B"), .Cells(i, "L")) s2.Cells(1, "A").Value = .Cells(i, "A").Value If c.Value <> "" Then n = n + 1 s2.Cells(n, "A").Value = c.Offset(-i + 1).Value s2.Cells(n, "B").Value = c.Value End If Next c s2.Cells(n + 1, "A").Value = "合計" s2.Cells(n + 1, "B").FormulaLocal = "=SUM(" & s2.Range(s2.Cells(2, "B"), s2.Cells(n, "B")).Address & ")" s2.Range(s2.Cells(1, "A"), s2.Cells(n + 1, "B")).Borders.LineStyle = xlContinuous s2.PrintOut Next i End With End Sub

関連するQ&A

  • EXCEL マクロ シート 比較

    EXCEL マクロ でシート間のデーターをシート2を基本に比較してシート3へ結果を出す 新規・削除と表示する。 シート1       シート2            シート3 氏名  コード    氏名   コード      氏名   コード A列   B列      A     B        A     B    C 山川   1001    山川   1001      1002   谷    削除 谷    1002    空     1003      1005   海    新規   空    1003    海     1005 田    1006    田     1006 まことにお忙しいところよろしくお願いいたします。

  • エクセルの抽出について

    月 日 項目   金額 3 2 A商品 3000 3 2 A商品 2000 4 3 B商品 2500 4 2 A商品 2000 5 3 B商品 1000 3 2 A商品 700 3 2 B商品 650 3 2 B商品 1200  上記の表から 月日と項目が一致する金額の合計だけを別シートの 表にそれぞれ表したいのですがDGET とかVLOOKとか見てるのですが 何かいい関数とかやり方とかあれば教えていただきたいのですが宜しくおながいします。(一回抽出してその合計を出す方法しかないですかね)

  • access 抽出したフィールドの合計

    access2010です。 現在、以下のようなクエリがあります。(数値のところがずれて表示されているかもしれませんが、それぞれフィールド毎の値です) [ID] [項目A] [項目B]  [項目C] [項目D] [合計;[項目A]+[項目B]+[項目C]+[項目D]] 1     50    100    100    50 このままデータシートビューにすると[合計]欄は300になります。 表示をAとBとCのみにした場合、合計が250になればいいのですが、300のままです。 AとB、BとCなどいろいろ組み合わせを変えて表示したいのですが、全組み合わせ分のクエリーを作らずに、選択した分のフィールドのみの合計を出す方法はありませんでしょうか。 よろしくお願いします。

  • エクセルの関数で質問します。

    エクセルの関数で質問します。 同じBookに2種類のシートがあります。 シート(1) A------B------C 1 山  10店 吉  2  川  15店  大吉 3  谷  5店   凶 シート(2) A------B------C 1 川  100円 ***  2  谷  500円  *** 3  山  200円  *** 上のシート(2)の『***』印のところにシート(1)の″C”列のデータを持ってきたいと思います。 なお、シートのセルは細かいセルの結合したものです。 順番は案の定順序良くならんでいません。 シートがうまく表現できなくて申し訳ないです。 かなり困っています。 みなさんのアドバイスを待っています。 よろしくお願いします。

  • <エクセル>マクロを使ってデータを入力したいのですが・・

    エクセル初心者のため、 どなたかご存知の方がいらっしゃいましたら教えていただけないでしょうか。 エクセルで、ある申込書のフォームにデータ(氏名・フリガナ・生年月日・年齢等を入力したいのですが100名分くらいあるためマクロを作って元データからコピーできれば・・と考えています。 100人分の元データはSheet1にあり、 1名につき1行で、A1に氏名、B1にフリガナ、C1に生年月日・・・(~F1まで)となっています。(~100行目まで) そのデータをSheet2にある申込書フォームの該当欄にコピーしたいのですが、簡単な方法はありますでしょうか。 Sheet2には10名分の入力欄があるので、、 Sheet1の1行目の人のA1(氏名)のデータをSheet2のB12(氏名入力欄)へ、 Sheet1の2行目の人のA2(氏名)のデータをSheet2のB14(氏名入力欄)へ、 ・・・・・ Sheet1の10行目の人のA10(氏名)のデータをSheet2のB30(氏名入力欄)へ、 という感じでコピーしていきたいです。 (フリガナ、生年月日、年齢などそれぞれ欄があります) とりあえず10人分ずつSheet2にコピーできるマクロが組めれば大変助かるのすが・・・。 説明も上手にできず申し訳ないのですが・・・。 私の知識レベルでは100人分こぴぺこぴぺする方が早いのかもしれませんが どなたかアドバイスをいただければ大変うれしいです。 どうか、宜しくお願いいたします。

  • 抽出マクロを教えて下さい

    初心者で困っています。 1、ある取り込みデータを取り込みます。(項目が多種) 2、そのデータのある項目の中で、A,B,C,Dであれば別シートへ抽出 3、2で抽出したデータに項目の追加でフラグをたてます(1を手入力)(2種類フラグがあります) 4、2種類のフラグを別々のシートへ抽出する 上記の2までは完成しておりますが、3以降がどうもうまくできません。 教えていただけますでしょうか?

  • エクセルでこんな抽出は可能ですか?

    関数を使用して抽出したいと思います。 まずシート1とシート2を使います。 シート2には住所録などの内容が5000件くらいあるものとします。 その住所録には「〒」「住所」「電話番号」「氏名」などのフィールドを作っておきます。 そして、シート1には 例えば「氏名」という欄をA1に書き、B1の空白のセルに「山田」と入力をすると、「山田」が含まれるものをすべて表示したいと思います。 このすべて表示とういうのは「山田」を含む「氏名」だけ表示されるのではなく、「〒」「住所」「電話番号」「氏名」を表示したいのです。 オートフィルタやフィルタオプションは極力使用したくないので、関数で出来ないものかと考え中です。 また、抽出結果を表示する欄はシート1のA3あたりからお願いします。 こんな文書で意味が分かった方、よろしくお願いします

  • Access2000のコンボボックスで複数列の絞込み

    1つのテーブルに「A」「B」「C」という列にデータが入力されていて、それを1つのコンボボックスで絞込みをやりたいと思っていますができません。 コンボボックスで選択したデータを「A」「B」「C」のすべてから検索し含まれる物全てを抽出したいです。   A  B  C 1 山  川  谷 2 山  水  川 3 川  谷  山 1つのコンボボックスで「谷」を選ぶと、1と3のレコードを抽出したいです。 良い方法は、ないでしょうか?

  • Excelの印刷マクロ

    Excelで現状以下のようにシートで固定のフォーマットが並んでいます。 A0 B00 C00 A1 B11 C01 A2 B12 C11   B21 C21 シート上に縦長にならんでいますが、印刷時は A0→B00→C00→C01→A1→B11→B12→B21→C21 のように並べて印刷をしたいのです。 上記のサンプルでは0,1、2との2毎が上限なのですが、 実際は、3や4までも長くまであります。 要は、最上のシートの全印刷を実行すると、 A0→B00→C00→C01→A1→B11→B12→B21→C21 に手で並べ替える必要が発生していて、何十枚もシートの ものを印刷すると恐ろしく時間がかかっています。 だれか助けてください。 よろしくお願い致します。

  • データの抽出

    再びエクセルの質問をします。 エクセルでデータベースを作っています。 データベースの合計金額を別シート(日報シート)に反映させたいのですがどんな関数を使えばいいのか分かりません。 データベースシートのB5~B204までには「現場名」が入力されていて、C5~AJ5までは費目別に合計金額が入力されています。C3~AJ3には費目(運搬費・施工図費・工事管理費など)が入力されています。 日報シートのA1~A26には費目が入力されていて、別シート(予算シート)のA1に現場名が入力されたら日報シートのB列に費目別に合計金額を反映させる関数を入力したいのですが・・・なにか良い関数がありましたらよろしくおねがいします。分かりづらい文章ですいません;;

専門家に質問してみよう