- 締切済み
Excel 入力のある行だけ印刷したい
こんにちは、Excelの関数で教えてください。 いま注文書を作成しています。A1からE10の 範囲でタイトル行含み10行作成し、A~Eには それぞれ型番、商品名、単価、数量、合計金額が 入っているとしてください。つまり商品の種類は 9種類です。 ここで、たとえば2行目と6行目のみ注文がある 場合、2行目と6行目だけ数量の欄に入力されます。 すると、印刷時に2行目と6行目だけ印刷されるよう 制限をかけたいのですが、どのような関数を使えば できるでしょうか? メンテナンス等を考慮し、できればマクロを使わず 関数だけで実現したいのですが・・・。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- kamejiro
- ベストアンサー率28% (136/479)
#1です。#4、#5、#6の方はかなり工夫をされた回答で大変参考になると思います。また、#6の方の「…VBAで自動化しないと、関数では自動化省力化しないので前途多難なように思います。」とおっしゃるのはもっともだと思います。 関数の中に関数を入れる等の多様化をするほど、誤りがあったときに、誤りを探すのに苦労します。(これは私だけの経験ですが) #1の回答に対する補足での「フィルタをかけてから印刷するといった2段階の手順を自動でする」といったことをお望みであれば、やはり一つのマクロにしてしまう方が、メンテナンス等を考慮された方法だと思います。(私だけの考えかもしれませんが…。)
- imogasi
- ベストアンサー率27% (4737/17069)
A2:B8に下記きデータがあるとする。 注文品名がA列、注文したのはB列に数字のある行で、注文数はその数とする。C列はワーク列です A列 B列 C列 a 0 b 23 1 c 1 d 1 e 34 2 f 2 g 2 3 C2セルに、=COUNTA($B$1:B2)と入れて、下方向に式を複写する。 結果は上記のとおり。注文した品の行で1だけカウントアップしてます。 ここが味噌です。 普通は抜き出し先はSHeet2などですが、説明を簡単にするため、すぐ横に注文品と注文数を抜き出します。 F2セルに=OFFSET($A$1,MATCH(ROW()-1,$C$1:$C$100,0)-1,0) F3以下に式を複写する。 G3に=OFFSET($A$1,MATCH(ROW()-1,$C$1:$C$100,0)-1,1)と入れて下方向に 式を複写します。F3を横にG3に複写して最後の引数を0->1に変えればよい。 さて上記の理屈がわかったとして、問題はF3:Gxの範囲において、注文数を超える下の行にはエラー表示が出るが ISERRORなどで判別して、出ないようにしてください。 注文請け書(印刷するシート)は別シートでしょうから、F、G列をSheet2などへ持っていくとき式が見かけ上、変わります。Sheet1!$C$3:$c$100などのように参照しますので、この点注意してください。 もう1つ注文書が多数ある場合、VBAで自動化しないと、関数では自動化省力化しないので前途多難なように思います。
- lucia_2004
- ベストアンサー率35% (64/178)
#3訂正です。 質問文を読み直してみると、商品は固定のようですね? つまり、商品名があると思われるA列をカウントしてしまうとまずいですね。 失礼しました。 私が先ほど記載しました =OFFSET($A$1,0,0,COUNTA($A:$A),5) という数式の $A:$Aという部分、数量があるD列にするべきでした。 =OFFSET($A$1,0,0,COUNTA($D:$D),5) さらに、一つのブックに何枚もシートがあり、同じ注文書を作成していて、同じように印刷したい場合は =OFFSET(!$A$1,0,0,COUNTA(!$D:$D),5) としてください。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 注文書があるシートをSheet1 とさせていただきます。そして、ここでは、印刷シートを、Sheet2 にします。 配列数式を使った例: 別のシートに、 A B C D E 1: 型番 品名 単価 数量 合計金額 A2:~ =IF(COUNT(Sheet1!$D$2:$D$10)>=ROW(A1),INDEX(Sheet1!$A$1:$E$10,SMALL(IF(Sheet1!$D$2:$D$10>0,ROW($D$2:$D$10),""),ROW(A1)),COLUMN(A1)),"") という式を置いたら、配列数式ですから、一旦入力したら、F2を押して、『ShiftとCtrlを押しながらEnterキー』を押します。 後は、フィルハンドルで、式をコピーしてしまいます。 配列数式を使わない方法: (ここの掲示板では、配列数式を使うと、文句をつける人がいるようですから(^^;) 同じく別シートを使います。 補助列を使って、 例: G2 ~G10 まで =IF(Sheet1!D2>0,ROW(),"") フィルハンドルコピー H2~H10 まで =IF(COUNT($G$2:$G$10)>=ROW(A1),SMALL($G$2:$G$10,ROW(A1)),"") これで、ここで、出てきた行数を、 A2~ =IF($H2<>"",INDEX(Sheet1!$A$1:$E$10,$H2,COLUMN(A1)),"") これで、集約できます。
- lucia_2004
- ベストアンサー率35% (64/178)
エクセル2000で検証してみたので、大丈夫だと思いますが・・。 まず、挿入~名前~定義 と選択。 名前の定義を作成するウインドウが開きます。 名前は「Print_Area」です。 参照範囲には =OFFSET($A$1,0,0,COUNTA($A:$A),5) と入力してOKボタン これで、注文が2~5行目なら、A1からE5を印刷範囲として印刷し、注文が2~10行になったら、A1からE10を印刷範囲として印刷できるはずです。 注意点が2つあります。 1、「Print_Area」という名前は、この通りこのままでお使いください。もちろん「」は抜いて。 2、参照範囲に使った関数は、たとえば2~6行目に注文があった場合、A1~A6全て埋めて(空欄ではない状態)おかないと、参照が狂います。 上記関数は、A1を含めてA列に値があるセルの数の行数で、E列まで参照(この場合選択という表現の方がわかりやすいかも)します という意味です。 つたない説明ですみません。 参考URLには、私がこの関数を覚えたサイトをご紹介します。
- 参考URL:
- http://www2.odn.ne.jp/excel/
- siroutom1
- ベストアンサー率20% (50/240)
荒業ですがC~E選択削除、G~Eを選択削除! 印刷後に戻るボタン2回。 安全策でシートのコピーを作り、同じ作業。 終了後にシートの削除!
- kamejiro
- ベストアンサー率28% (136/479)
A1からE10まで全てをドラッグで範囲指定をします。 [データ]-[フィルタ]-[オートフィルタ]を処理します。 A1からE1までの各タイトルに[▼]が出ます。 D1のセル(つまり数量)の[▼]をクリックし、(空白以外のセル)を選ぶと数値の入った行のみが表示され、このまま印刷すると良いです。 元に戻すには、もう一度、[データ]-[フィルタ]-[オートフィルタ]を処理します。 関数ではありませんが、割と簡単にできると思います。
補足
ご回答ありがとうございました。すいません、フィルタの処理を 自動で(都度、注文者にフィルタをかけて印刷 させるのではなく)できる方法はありませんか?