- 締切済み
エクセルデータを表に差し込み印刷
パソコン初心者です。 エクセルのデータを ワード、もしくはエクセルに差し込みのような形で印刷したいのですが、 データの個数が不規則な場合はどうしたらよいのでしょか? 言葉で説明するのが難しいのですが… 具体的には、 氏名 住所 品名 金額 A ●●市 帽子 ¥2,900 A ●●市 タンクトップ ¥1,500 B △△市 Tシャツ ¥2,980 B △△市 パンツ ¥8,980 B △△市 パンツ2 ¥7,900 B △△市 スカート ¥8,500 B △△市 タンクトップ2 ¥2,900 C ××市 ジャケット ¥12,800 C ××市 タイツ ¥800 C ××市 カットソー ¥1,980 といった形のエクセルの表を Aさん ●●市 品名 金額 帽子 ¥2,900 タンクトップ ¥1,500 合計 ¥4,400 といった形(実際は罫線を引いた表のような形にしたい)に個人ごとに印刷していきたいのです。 実際のデータは500人分以上あり、 データの数も一人当たり1個から40個程とイレギュラーなのですが、 全てが1枚のエクセルシートにまとまっています。 どうしたら一番手っ取り早く個人ごとのデータを印刷できるでしょうか? 説明も分かりずらく申し訳ないですが、どうかご回答をよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号:ANo.4の続きです。 次に、Sheet2のA2セルに次の数式を入力して下さい。 =IF(INT((ROW()-1)/54)+1>COUNT(Sheet3!$B:$B),"",IF(ROW()-INT((ROW()-1)/54)*54-2>COUNTIF(Sheet3!$A:$A,INDEX(Sheet3!$A:$A,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1))),IF(ROW()-INT((ROW()-1)/54)*54=COUNTIF(Sheet3!$A:$A,INDEX(Sheet3!$A:$A,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1)))+4,"合計",""),INDEX(Sheet1!$C:$C,SUMPRODUCT(ROW(Sheet3!$A$1:$A$20000)*(Sheet3!$A$1:$A$20000=INDEX(Sheet3!$A:$A,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1)))*(COUNTIF(OFFSET(Sheet3!$A$1,,,ROW(Sheet3!$A$1:$A$20000)),INDEX($A:$A,INT((ROW()-1)/54)*54+1)&INDEX($B:$B,INT((ROW()-1)/54)*54+1))=ROW()-INT((ROW()-1)/54)*54-2))))) 次に、Sheet2のB2セルに次の数式を入力して下さい。 =IF($A3="","",IF($A3="合計",SUMIF(Sheet3!$A:$A,INDEX(Sheet3!$A:$A,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1)),Sheet1!$D:$D),INDEX(Sheet1!$D:$D,SUMPRODUCT(ROW(Sheet3!$A$1:$A$20000)*(Sheet3!$A$1:$A$20000=INDEX(Sheet3!$A:$A,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1)))*(COUNTIF(OFFSET(Sheet3!$A$1,,,ROW(Sheet3!$A$1:$A$20000)),INDEX($A:$A,INT((ROW()-1)/54)*54+1)&INDEX($B:$B,INT((ROW()-1)/54)*54+1))=ROW()-INT((ROW()-1)/54)*54-2))))) 次に、以下の操作を行って下さい。 Sheet2のB3セルをクリックして選択 ↓ メニューの[書式]をクリック ↓ 現れた選択肢の中にある[セルの書式設定]をクリック ↓ 現れた「セルの書式設定」ウィンドウの[表示形式]タグをクリック ↓ 「分類」欄の「通貨」をクリック ↓ 「記号」欄の「\」を選択 ↓ 「セルの書式設定」ウィンドウの[OK]ボタンをクリック 次に、Sheet2のA3~B3の範囲をコピーして、Sheet2のA4~B54の範囲に貼り付けて下さい。 次に、Sheet2のA1~B54の範囲をコピーして、Sheet2のA55~B32400の範囲に貼り付けて下さい。(1頁あたり54行×600人分) 次に、以下の操作を行って下さい。 Sheet2を開く ↓ メニューの[ファイル]をクリック ↓ 現れた選択肢の中にある[印刷プレビュー]をクリック ↓ 現れた印刷プレビュー画面の[余白]ボタンをクリック ↓ 1ページあたりに丁度54行だけ印刷される様に、上下の余白を調整する ↓ 印刷プレビュー画面の[余白]ボタンをクリック 以上で準備は完了で、後はSheet1にデータを入力して、Sheet2を全ページ印刷するだけです。
- kagakusuki
- ベストアンサー率51% (2610/5101)
少々長くなり過ぎましたが、一度設定すれば、元の表の人数や各個人の行数が変化しても、自動的に1ページ毎に、一人ずつ、全員分のページを自動的に同時に作成する方法です。(元の表に入力してから、Sheet2を印刷するだけで、他の手作業は不要) 処で御質問文中には、何処に何のデータが入力されているのか明記されていないため、確認したいのですが、最初に「A」と入力されているセルがA2セルで、最初に「●●市」と入力されているセルがB2セルで、「帽子」と入力されているセルがC2セルで、最初に「\2,900」と入力されているセルがD2セルなのでしょうか? 又、それらが入力されているSheetは、Sheet1と考えて宜しいのでしょうか? 取り敢えず上記の仮定が正しいものとして話を進めますので、仮定とは異なっている箇所があれば、補足願います。 又、ここでは適当な列、例えばSheet3のA列とB列を作業列として使用するものとします。(もし、Sheet3が既に他の用途で使用済みの場合は、他のSheetの別の列を作業列にする様に数式を変更して下さい) まず、Sheet3のA2セルに次の数式を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",INDEX(Sheet1!$A:$A,ROW())&"さん"&INDEX(Sheet1!$B:$B,ROW())) 次に、Sheet3のB2セルに次の数式を入力して下さい。 =IF(COUNTIF($A$1:$A2,$A2)=1,ROW(),"") 次に、Sheet3のA2~B2の範囲をコピーして、Sheet3のA3~B20000の範囲(←Sheet1のデータが20000行目まであるとした場合)に貼り付けて下さい。 次に、以下の操作を行って下さい。 Sheet2のA1セルをクリックして選択 ↓ メニューの[書式]をクリック ↓ 現れた選択肢の中にある[条件付き書式]をクリック ↓ 現れた「条件付き書式の設定」ウィンドウの左端の欄をクリック ↓ 現れた選択肢の中にある「数式が」をクリック ↓ 「条件付き書式の設定」ウィンドウの右端の欄に次の数式を入力 =OR(A1<>"",$A2="合計") ↓ 「条件付き書式の設定」ウィンドウの[書式]ボタンをクリック ↓ 現れた「セルの書式設定」ウィンドウの[罫線]タグをクリック ↓ 「スタイル」欄で実線、「色」欄に「自動」を選択してから、[外枠]ボタンをクリック ↓ 「セルの書式設定」ウィンドウの[OK]ボタンをクリック ↓ 「条件付き書式の設定」ウィンドウの[OK]ボタンをクリック ↓ Sheet1のA1セルを右クリック ↓ 現れた選択肢の中にある[コピー]をクリック ↓ A1~B54の範囲を範囲選択 ↓ 選択範囲を示す黒い太枠の内側に、カーソルを合わせて右クリック ↓ 現れた選択肢の中にある[形式を選択して貼り付け]をクリック ↓ 現れた「形式を選択して貼り付け」ウィンドウの「貼り付け」欄の中にある、[書式]と記されている箇所をクリックして、チェックを入れる ↓ 「形式を選択して貼り付け」ウィンドウの[OK]ボタンをクリック 次に、Sheet2のA1セルに次の数式を入力して下さい。 =IF(INT((ROW()-1)/54)+1>COUNT(Sheet3!$B:$B),"",INDEX(Sheet1!$A:$A,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1))&"さん") 次に、Sheet2のB1セルに次の数式を入力して下さい。 =IF($A1="","",INDEX(Sheet1!$B:$B,SMALL(Sheet3!$B:$B,INT((ROW()-1)/54)+1))) 次に、Sheet2のA2セルに次の数式を入力して下さい。 =IF($A1="","","品名") 次に、Sheet2のB2セルに次の数式を入力して下さい。 =IF($A1="","","金額") まだ続きがあるのですが、投稿可能な文字数の制限を超過したため、少々規則違反になりますが、後半部分は次回の回答に記させて頂きます。
- MackyNo1
- ベストアンサー率53% (1521/2850)
画像が添付されていなかったようなので、再度アップします。 ちなみに、提示した金額欄の数式は文字列数字を返していますので、表示形式で¥やカンマを表示できるようにしたいなら、この列(B4セル)だけ以下のような数式に変更してさい。 =IF(A4="","",INDEX(Sheet1!D:D,SMALL(INDEX((Sheet1!$A$2:$A$600<>$A$1)*1000+ROW(Sheet1!$A$2:$A$600),),ROW(B1)))) また、入力規則のドロップダウンリストの設定や、条件付き書式についても、バージョンが不明なため、ひとまず一般的な操作法で回答しましたが、もし具体的な操作法や詳細がわからない(あるいはこのようにできないかなどの要望がある)ときは、その詳細とご使用のバージョンをお知らせください。
- MackyNo1
- ベストアンサー率53% (1521/2850)
Officeソフトはバージョンによって、使用できる機能や操作法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。 さて、回答ですが、ワードの差し込み印刷を利用する方法がありますが、バージョンによって大きく操作が異なりますのでこの方法はひとまず割愛します。 エクセルだけで実行するなら、表示用シートのA1セルに氏名を選択できるドロップダウンリストを挿入し(入力規則を利用します)、その値によってそれぞれ対応するデータを表示させるようにするのが簡便かもしれません。 住所の表示欄(C1セル) =VLOOKUP(A1,Sheet1!A:B,2,0) A1セルに対応する品名・金額の表示欄(A4セル) =INDEX(Sheet1!C:C,SMALL(INDEX((Sheet1!$A$2:$A$600<>$A$1)*1000+ROW(Sheet1!$A$2:$A$600),),ROW(A1)))&"" 上記の数式を右方向に1つ下方向に適当数入力してください。 また、データ範囲のみ罫線を自動的に作成するためにA3セルからB45セルを選択し、数式を使った条件付き書式で「=A3<>""」と入力して「書式」から四角の罫線を引きます。 合計表示欄(D4セル) =SUMIF(Sheet1!A2:$A$600,A1,Sheet1!D2:D600)
- natchan38
- ベストアンサー率22% (98/431)
オートフィルタ機能を使った 抽出で、 Aさんだけ、Bさんだけのデータを簡単に出せるので、Aさんのデータだけを印刷など出来ます もっと早いやり方は他の方が教えてくれると思いますが一応書きました 機種にもよりますので オートフィルタ 抽出 等で検索すると出てくると思います パソコンのヘルプから、オートフィルタ 抽出などでやり方が出るかも