Excel2003の集計および印刷について

このQ&Aのポイント
  • Excelファイルの集計および印刷方法について、詳しく知りたいです。入力用シートと出力用シートがあり、特定の条件でデータを集計し、表示したいと思っています。データ量が増えた場合にも右半分にデータを表示して印刷したいです。
  • 【Excel2003の集計および印刷方法について】Excelファイルには入力用シートと出力用シートがあります。データを特定の条件で集計し表示する方法を知りたいです。また、データ量が増えた場合にも右半分に表示して印刷する方法も教えてください。
  • Excel2003の集計および印刷方法を教えてください。入力用シートと出力用シートがあり、特定の条件でデータを集計し表示したいです。データ量が増えた場合にも右半分に表示して印刷する方法も知りたいです。
回答を見る
  • ベストアンサー

Excel2003の集計および印刷について

いつもお世話になっております。 新年早々ですが、今回はExcelについて質問させてもらいます。 現在、とあるデータの集計を行い、印刷を行う方法を考えていますが、あまり詳しくないので困っています。 何かいい方法があればと思い投稿しました。 まずExcelファイルに「入力用シート」と「出力用シート」の二つのシートがあります。 「入力用シート」には、 C1セル、D1セル、E1セル、F1セル C2セル、E2セル、F2セル に表題や番号などを入力します。 また、下記のようにA1セルとB1セルから下へずっとデータを入力します。データ量は多いときは1000行ぐらいです。 例) 1000   5 1200   2 900    10 800    2 1000   1 2400   3 あとフォームのボタンを作りこれを押すと、「出力用シート」にC1,D1,…F2までのセルをそのままコピーし、A1、B1から下へ入力されているデータのみを集計し表示を行いたいと思ってます。 集計の条件はA列ごとに集計し降順で表示です。 結果として「出力用シート」には 以下のように表示したいと思ってます。 あいうえお かきくけこ 111111 222222 さしすせそ       333333 444444 2400   3 1200   2 1000   6 900   10 800    2 ですが、A列とB列に入力するデータが多くなった際、印刷すると右半分が白紙の状態で、できれば右半分にもと思ってます。つまり1枚に2ページ分印刷と言うことです。 データは1枚に30行ぐらいで左半分と右半分で60件ぐらい表示。 (文字を大きく表示させるため) それ以上になると2枚目に1枚目と同じように1行目2行目は1枚目と同じで印刷できればと。 例) -----1枚目----- あいうえお かきくけこ 111111 222222 さしすせそ       333333 444444 2400    3    440    2      1200    2    430    22 1000    6    415    9 900    10    409    2 800     2    399    8 500     1    395    5 450     3    393    2 -----2枚目----- あいうえお かきくけこ 111111 222222 さしすせそ       333333 444444 391    1     320    2 311    22 説明が長くなりましたが、何卒よろしくお願いします。

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

  • ベストアンサー
回答No.3

修正点は2点です。 並べ替え後の、 ws.Columns("A:B").Sort Key1:=ws.Range("A1"), Order1:=xlDescending 'sort ds.Cells.Clear '印刷シートクリア の間に、 '集計 ws.Cells(1, 3).Formula = "=IF(COUNTIF($A$1:A1,A1)=1,ROW(),"""")" ws.Cells(1, 3).Copy Destination:=ws.Range(ws.Cells(2, 3), ws.Cells(rowCount, 3)) ws.Cells(1, 4).Formula = "=IF(ROW(D1)>COUNT(C:C),"""",INDEX(A:A,SMALL(C:C,ROW(A1))))" ws.Cells(1, 5).Formula = "=IF(D1="""","""",SUMIF(A:A,D1,B:B))" rowCount = WorksheetFunction.Count(ws.Columns(3)) ws.Range(ws.Cells(1, 3), ws.Cells(1, 5)).Copy Destination:=ws.Range(ws.Cells(2, 3), ws.Cells(rowCount, 5)) を入れてください。 データ部へコピーする部分の ds.Cells(row + rowOffset, col * 2 - 1) = ws.Cells(srcRow, 1) ds.Cells(row + rowOffset, col * 2) = ws.Cells(srcRow, 2) を ds.Cells(row + rowOffset, col * 2 - 1) = ws.Cells(srcRow, 4) ds.Cells(row + rowOffset, col * 2) = ws.Cells(srcRow, 5) に変更してください。 ワークシート(sheet2)を見てもらえればわかりますが、並べ替え後のデータを集計して、その結果を印刷シートにコピーしてます。 集計は、 http://oshiete1.goo.ne.jp/qa3380455.html の、ANo.1さんを参考にさせていただきました。(と言うかそのままですが)

その他の回答 (2)

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

質問がごたごたしていてわかりにくい。 課題は2つあるようで (1)集計 (2)印刷 ーー (2)は1列的(A,B列)なデータを、2列的に印刷したいということのようです。印刷で使う紙を節約したり、1ページに出るデータの一覧データ数を少しでも多くできるように、そうしたいのはわかります。 ーー (1)の集計はどの項目をどういうまとめで集計するのか。 >集計の条件はA列ごとに集計し とは、1000行なりのデータのB列の1-1000行の合計を結果1つを最終に出せばよいのか?。 質問の意味を捉えられず、(1)集計については以下説明で回答できてない。 ーーー 私はこういう課題はVBAでやるべきというのが持論だが、質問者はVBAの経験が無いのではないかと思う。 それで数式・関数で下記を工夫した。モデル的にやってみて私の方法の主旨をじっくりフォローして理解してください。 ーー 具体的に(2)印刷は、 別シートに入力データをシートコピーし 別シートA,B列を、A列で降順にソートする。 ー モデル的データとして A1:B200に 1 a1 2 a2 3 a3 4 a4 5 a5 ・・・ 195 a195 196 a196 197 a197 198 a198 199 a199 200 a200 を作る。データは何でも良く、上記データの値に付いて意味は無い。 ーー 別シート(第3のシート、印刷シート)の (どこでも良いが)G1セルにまず1と入れる。 いわばページ番号数を表している数といえるものである。 1ページ行数、はテスト例なので少なめに30行と設定した。 ーー A1の式 =INDIRECT("Sheet1!A"&($G$1-1)*30+ROW()) B1の式 =INDIRECT("Sheet1!B"&($G$1-1)*30+ROW()) D1の式 =INDIRECT("Sheet1!A"&($G$1-1)*30+ROW()+30) E1の式 =INDIRECT("Sheet1!B"&($G$1-1)*30+ROW()+30) を入れる。 式中の30は1ページ30行を印刷する設定だからで、60行なら60に変える。 第30行まで、各列の第1行の式を複写すると 1 a1 31 a31 2 a2 32 a32 3 a3 33 a33 ・・・・(略) 27 a27 57 a57 28 a28 58 a58 29 a29 59 a59 30 a30 60 a60 となる。これを手動(またはVBAで)印刷する。 印刷後、G1を2と変えると、瞬時に 31 a31 61 a61 32 a32 62 a62 33 a33 63 a63 ・・・(略) 57 a57 87 a87 58 a58 88 a88 59 a59 89 a89 60 a60 90 a90 となります。 ーー 簡単のため、ここでは2列的に構成するにとどめているが、式を少し変えて、設定列を増やすと3,4、5列的に増やせることは判りますね。 ーー ここでこれを手動(またはVBAで)印刷する。 G1を1増やすー>印刷の操作を、表示されるデータが最終行を越えるまで繰り返す。(1000行なら、1000/60*2ほぼ9回) ーー G1セルの値を、VBAで1ずつ自動でアップして印刷(PrintOut)するのを繰り返すコードに興味があれば書きますが略。

sako77
質問者

お礼

お礼が遅くなりまして申し訳ありません。 早速のご回答ありがとうございまた。 VBAについてはまだよくわかりませんが、いつか使えるようにがんばりたいと思います。 その時はまたお世話になるかもしれませんがよろしくお願いします。

回答No.1

こんなのでどうでしょう? 元データを壊さないように作業シートを使います。 必要に応じてss,ds,wsのシートの指定を変えてください。 印刷シートのデータ行数をpageRowCountで調整してください。 pageColCountでページあたりの横数が変更できます。 Private Sub CommandButton1_Click() Const pageRowCount = 50 '1ページあたりのデータ行数 Const pageColCount = 2 '1ページあたりのデータ列数 Dim ss As Worksheet '元データシート Dim ds As Worksheet '印刷シート Dim ws As Worksheet '作業シート Dim rowCount As Long '元データの行数 Dim startRow As Long '印刷ページ毎の印刷する元データの最初の行 Dim srcRow As Long '印刷時の元データの行 Dim row As Integer '印刷データのデータ部の行 Dim col As Integer '印刷データのデータ部の列 Dim rowOffset As Long Set ss = Sheets("Sheet1") '元データシートの指定 Set ds = Sheets("Sheet2") '印刷シートの指定 Set ws = Sheets("Sheet3") '作業シートの指定 rowCount = ss.Cells(ss.Rows.Count, 1).End(xlUp).row '元データの行数取得 ws.Cells.Clear '作業シートクリア ss.Columns("A:B").Copy Destination:=ws.Range("A1") 'データを作業シートへ ws.Columns("A:B").Sort Key1:=ws.Range("A1"), Order1:=xlDescending 'sort ds.Cells.Clear '印刷シートクリア '印刷シート作成 For startRow = 1 To rowCount Step pageRowCount * pageColCount 'ヘッダー部 ss.Range("C1:F2").Copy Destination:=ds.Cells(rowOffset + 1, 1) 'ヘッダーデータ '他にも見出しなんかがある場合 ds.Cells(rowOffset + 4, 1) = "番号" ds.Cells(rowOffset + 4, 2) = "データ" ds.Cells(rowOffset + 4, 3) = "番号" ds.Cells(rowOffset + 4, 4) = "データ" rowOffset = rowOffset + 4 'ヘッダー部の行数だけプラス 'データ部 srcRow = startRow Do For col = 1 To pageColCount For row = 1 To pageRowCount If srcRow > rowCount Then Exit Do '元データ終わりチェック ds.Cells(row + rowOffset, col * 2 - 1) = ws.Cells(srcRow, 1) ds.Cells(row + rowOffset, col * 2) = ws.Cells(srcRow, 2) srcRow = srcRow + 1 Next Next Loop Until True rowOffset = rowOffset + pageRowCount 'フッター部 '必要があれば ds.Cells(rowOffset + 1, 1) = "何かフッター" 'いらなければ削除 rowOffset = rowOffset + 1 'フッター部の行数だけプラス(無ければ+0) Next End Sub

sako77
質問者

お礼

お礼が遅くなりまして申し訳ありません。 早速のご回答ありがとうございまた。 さっそく試してみましたが、希望通りに表示はされましたがよく見ると集計がされていませんでした。 例えば、 920  5 920  2 1000  6 上記の3行だけのデータの際は、 1000  6 920  7 と表示されるようにしたいのですが、もう一度お願いできないでしょうか?

関連するQ&A

  • 【Excel】マクロを使って、自動集計ができるようにしたいと思っています。

    こんにちは。 宜しくお願い致します。 アクセスがあったデータをピポッドテーブルでまとめ、さらに集計結果を出したいと思っています。 ピポッドテーブルを作成するまではマクロの自動記録でどうにかなったのですが、その後の集計結果のところでとまどっています。 <データの現状> ※ピポッドテーブルで出したデータは、1・2行目が空白、3~5行目に項目名が入っており、6行目からデータが入っています。何行までデータが入っているかはその月によって異なり、行の一番最後はA列に「総計」と入力されています。 ※A~C列は項目名(日付や商品名など)が入っています。 D列以降は合計などが入っており、ここで基準として使いたい項目はすべて4行目に入っています。 列の数は項目によって増減します。 項目の一番最後は「総計」です。 マクロで集計したいのは次の作業です。 (1)「Sheet1」を全コピー→「Sheet2」に形式を選択して貼り付け→値貼り付け (2)貼り付けたシートで、D列以降、4行目の項目が「集計1」「集計2」「詳細集計」「総計」以外のものも列を表示しないにする ※D列から始まって、「集計1」の前の列までを表示しないにするのと、「集計1」の次の列から「集計2」の前の列までを表示しないにしたい。 例えば、H列に「集計1」・L列に「集計2」が入力されている場合は「D~G列」「I~K列」を表示しないにしたい。 (3)詳細集計の列を1列選択し、列を1行挿入。挿入した列4行目のセルに「合計」と入力。 (4)挿入した列のところに、6行目以降、A列に「総計」と入っている行まで数字のデータが入っているところ(A列で「総計」と表示されている行まで)は、「集計1」と「集計2」のセルの合計をそれぞれ表示し、枠線を入れる。 (5)一番先頭に1列挿入し、6行目から元A列の「総計」と表示されている前までの通し番号を入れる。 (6)「総計」の次の列の4行目に、「ゼロ数」と入力し、5行目に(3)で挿入した列、A列に「総計」と入っている1行前までの範囲で「0」表示があるセル数を表示。 (7)ゼロ数と入力したの次の列の4行目に「ゼロ率」と入力し、先に出した「ゼロ数」を(5)で入力した通し番号の一番最後の数で割った数を表示。 (8)入力終えた後はA1のセルを選択。 以上になります。 長いですが、どなたか教えてください。 宜しくお願い致します。

  • EXCEL2007 集計方法を教えて下さい。

    EXCEL2007 集計方法を教えて下さい。 sheet1は、商品の出荷データが入っています。 A列・・得意先コード、B列・・品番、C列・・出荷数 sheet2で集計します。 A2以降に商品コードが入力してあります。 A1に得意先コードを入力すれば、sheet1のA列を参照し、該当得意先の商品出荷数をsheet2のC列に集計したいのです。 (sheet1のデータは羅列です。 例えば、山本屋のりんご購入履歴が1行目や10行目21行目と入力されているイメージです。

  • 月別の集計を印刷するには。

       A   B   C   ・・・   P 1  集計 2  集計  ・  集計 6  集計 7  データ ・ ・ ・ 1500 データ ・1~6行までは7から1000までの集計表になりますので、ヘッダーを利用してシート毎に印刷するように設定しています ・7から1000は枠のみで、毎月データを入力していきます 今回行いたいのは、1から6行をシート毎に印刷し、毎月のデータ(たとえば、11月分のみ)のみを印刷するようにするにはどうしたら、良いのですか

  • EXCEL2002で集計

    Sheet1に下記のようなシートがあります。 (セルA1)コードA (B1)コードB (C1)コードC (D1)店名 (E1)商品コード (F1)タイトル (G1)価格 (H1)注文数 (J1)備考 このSheet1に受注があるたび入力しています。 教えて欲しいのは、Sheet1にデータを入力する度に、Sheet2以降に該当する行だけを随時出力するにはどうしたらよいでしょうか? たとえば コードA「ABC商事」、商品コード「115-1」に該当する行だけをSheet2に出力したいのです。 Sheet3にはコードA「やまもとや」、商品コード「115-1」・・・のように。 宜しくお願いします。

  • Excel2003 データの集計

    お世話になります。 表題の件で 質問が御座います。 今、添付画像の左の表から 右の表に集計している所です。 ・セルA1の「田中さん/毛布」は1つのセルに入力されています。 ・金額は「数値」で入力されています。 ・名前と一緒に入力されている品名は何が入ってるか分かりません。(色々な物が想定されます) ・A列には おそらく 千数百人の方々がいらっしゃいます。 この左の表を元に右のように「その人の合計金額」を集計したいのですが 何か便利な方法はないでしょうか? 現状ではフィルタを掛け「田中さんを含む」で抽出し、別シートに「田中さん」と入力して その隣に「=SUM」で合計地道にを入れております。 まだ半分も終わってないようなので気が遠くなってまいりました。。。 1つのセルに2種類の情報が入っている為「=SUMIF」も使えません。。 どうにかして簡単に集計する方法は無いでしょうか? どこか別のセルに「大久保さん」とか入れたら その隣に「大久保さんを含むB列の合計が出る」ような? どなたか良いお知恵が御座いましたら宜しくお願い致します。 説明が不十分であれば補足致しますので何なりとお申し付けください。 何卒宜しくお願い致します。

  • Excelの集計マクロについて質問です

    Excelの集計マクロについて質問です 少々ややこしいのですが、情報を調べていても中々分からなかったのでアドバイスや解決策を頂けますと幸いです。 画像を添付いたしましたので参照しつつ見ていただけると助かります。 2行を一つの入力データとし、名称が4セルの構成になっており シートが集計用シートとデータ入力用シートというものになっています。 そして入力用シートをコピーして、入力内容を増やしていきます。 データ(集計用)にデータ(1)で入力されたものを、データ(集計用)のデータ(1)列に転記していき データ(2)で、データ(1)とかぶるものはデータ(2)列の同じ名称の行に データ(1)で発生しなかったデータがある場合後ろに追記していき、これがデータ(数値)が最小データ(1)、最大データ(40)のシートがある所まで集計していく形にしたいのです。 名称が4セルとなっているのは、1列目が同じ名称の物が来ることがあり、2列目にその細かい違いがでるので4セルとなっています。名称の中には、英文字の大文字と小文字だけの違いのものがあり、それを区別して集計することもあります。(物品Aと物品a) 簡単にできそうかな?と思っていたのですが、各シートを集計用シートの対応の列に転記する事や ないものをどんどん下へ追記していく、大文字と小文字を区別させるといういくつもの考え方が必要で調べても中々望む形を得られなかったので質問させていただきました。 少々複雑(?)かもしれませんが、なにとぞ宜しくお願い致します

  • 【Excel】この条件で集計を3つに分けたい…??(謎

     今、お小遣い帳のようなのを作っているのですが… 以下の条件で集計したい場合、D~F列に入れる式は、 どのようにすれば… というか、式で可能ですか?(謎 分からなくて困ってます。よろしくお願いいたします☆ ・1行目は項目名です。 ・2行目には前の月の繰越金を入力します。 ・A列で、文末に●があるものの集計はE列に出す。 ・A列で、文末に■があるものの集計はF列に出す。 ・A列で、●も■も無い項目の集計はD列に出す。 図にすると↓こんな感じです。※変になるかも;(>_<) ┌─┬──┬──┬──┬──┬──┬──┬ │  │ A │ B │ C │ D │ E │ F │ ├─╋━━┿━━┿━━┿━━┿━━┿━━┿ │1 ┃摘要│収入│支出│合計│●計│■計│ ├─╂──┼──┼──┼──┼──┼──┼ │2 ┃繰越│   │   │1000│1000│1000│ ├─╂──┼──┼──┼──┼──┼──┼ │3 ┃…●│1000│   │   │2000│   │ ├─╂──┼──┼──┼──┼──┼──┼ │4 ┃……│ 500│   │1500│   │   │ ├─╂──┼──┼──┼──┼──┼──┼ │5 ┃…■│   │ 500│   │   │ 500│ ├─╂──┼──┼──┼──┼──┼──┼ ちなみに、●と■には、それぞれ違う銀行名を入れる予定です。 ( つまり、お小遣いと同じシートで預金も管理したいかなーって。) お願いします☆  

  • 集計方法教えて下さい

    エクセルを使って集計したいので教えて下さい。 まず、シート”あ”のセルA1に9/1セルA2に9/2セルA3に9/3・・・・という風に日付が順番に延々入力されています。その隣の列( B,C,D・・・)にはその日使った金額が入っています。使った都度隣のセルに入力していきますので、ある日はB列だけ金額が入っている、またある日はB列から列Fまで金額が入っています。というように支払う毎に隣のセルに入力していきます。 集計シート”い”を用意して、そのシートのA1に9月、B1に10月、C1に11月・・・といったようにその月毎の集計金額を表示させたいのです。SUM関数を使って手動でセル範囲を選択しても良いのですが、なんとも芸の無い感じがするのでもっと簡単に出来ないでしょうか? 例えば、シート”あ”のA列全体を選択し、その中で9/1~9/30までの条件範囲でその隣にある金額を集計する。 あとは、その計算式の入っているセルの角をマウスでドラックしてビューとすれば、出来上がり。 わかる方教えて下さい。

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

  • エクセルの日にちごとのアンケート集計の関数について

    シート名(アンケート) A列:日付 (12/1 12/2 など) F列:分類 (電話 パソコン  など) シート名(合計) A13には 12/1と記入されており 13行は 12/1の分類の集計を入力致します。 14行は 12/2の分類の集計を入力致します。 その際、13行のE(E13)には12/1の 電話の集計     13行のF(F13)には12/1の パソコンの集計     14行のE(E14)には12/2の 電話の集計 を入力する場合、どのような関数を使えばよろしいのでしょうか。 よろしくお願いします。  アンケートと合計は 同じBOOKのエクセルの中にあります。 ご教示いただけますでしょうか。

専門家に質問してみよう