• ベストアンサー

印刷行の長さ比較をして印刷をしたいのです

Sheet1・Sheet2・Sheet3があります。 Sheet1は印刷用シートです。 Sheet1のA1にはSheet2のA1、Sheet1のB1にはSheet3のA1が 式としてリンクされており、それぞれの列における 以下の行も同様に式をコピーしてリンクさせています。 Sheet2とSheet3のデータ行数を比較して、多い方の 行数をSheet1の印刷範囲として行指定したいのですが、 どうしたらよろしいのでしょうか? なおSheet1における印刷列はA~Bで固定されています。 ご教授ください。

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

  • ベストアンサー
noname#70958
noname#70958
回答No.1

Sheet1を開いた状態で、 挿入>名前>定義  名前: Print_Area  参照範囲: =OFFSET(Sheet1!$A:$B,,,MAX(COUNTA(Sheet2!$A:$A),COUNTA(Sheet3!$A:$A))) とすれば、A:B列の【Sheet2!A列とSheet3!A列のデータ数を比較して多い方】の行数までが印刷範囲となります。 Excel2003で動作確認済。 ただし、上記は「データの数」をカウントしているだけなので、 Sheet2,3のA列の途中に空白のセルがあるとずれてしまいます。 「データが入っている最後の行」を調べて設定する場合は、   =OFFSET(Sheet1!$A:$B,,,MAX(MAX(INDEX((Sheet2!$A$1:$A$999<>"")*ROW(Sheet2!$A$1:$A$999),)),MAX(INDEX((Sheet3!$A$1:$A$999<>"")*ROW(Sheet3!$A$1:$A$999),)))) なお、Sheet2,3のデータ数が変わった場合、 改ページプレビューの表示は【リアルタイムでは】変わりませんが、 印刷は適切に行われますし、印刷プレビューなどを一度表示すれば更新されます。 数式については、OFFSETではなくINDIRECTを使ってもかまいません。 ■【Excel】印刷範囲の設定 http://bekkoame.okwave.jp/qa2644048.html 以上ご参考まで。

matchy4649
質問者

お礼

マクロばかり頭にありましたが、関数のみで処理できるのには 驚きました。早速使わせていただきます!

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

印刷範囲がA・B列である場合は 5を1:2とすれば良いのでしょうか? Range(Cells(1, 1), Cells(Range("F1").Value, 5)).Select              ↑行の最後の番号 ↑列の最後の番号 です。 列番号は A 1 B 2 C 3 と数えていきます。 A~B列のみ印刷でしたら Range(Cells(1, 1), Cells(Range("F1").Value, 2)).Select で大丈夫です。

matchy4649
質問者

お礼

なるほど!マクロを使う時はこれでいけました! ありがとうございました

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

一応 VBAと関数の複合案です。 F1にセル(印刷しない列にでも) =MAX(COUNTA(Sheet2!A:A),COUNTA(Sheet3!A:A)) といれてSheet1とSheet2のA列の長いほうの行番号を出しておく。 VBエディター起動して Sub Test() Range(Cells(1, 1), Cells(Range("F1").Value, 5)).Select Selection.PrintOut Copies:=1, Preview:=True, Collate:=True End Sub をコピイします。 このVBAを使って印刷します。 上記VBAでは印刷範囲がE列ですので Cells(Range("F1").Value, 5)).Select の部分のF1と5をそちらの都合に合わせてください。

matchy4649
質問者

補足

早速のお返事ありがとうございます。 印刷範囲がA・B列である場合は 5を1:2とすれば良いのでしょうか?

関連するQ&A

  • 【エクセル】セルに入力された数字の行数だけ印刷するには?

    いつも利用させていただいています。 A1のセルに「3」「5」など数字を入力して 印刷ボタンを押すと 数字の行数分だけ印刷することは可能なのでしょうか? 【イメージ】     A列   B列 1行目 3 2行目 商品A 1万円 3行目 商品B 2万円 4行目 商品C 2.5万円 5行目 商品D 3万円 6行目 商品E 5万円  ※1行目(セルA)で出力したい行数を指定  ※2行目以降は商品情報が記載されている  ※このケースだと「3」とA1に入力されたので、   行数が入力された1行目と商品情報を頭から3行分(印刷範囲A1~B4)まで印刷。   もし「5」と入力されたらA1~B6まで印刷したい。 行を表示・非表示したり、印刷範囲を指定したりすればできるのだと 思いますが・・・このファイルの利用者によって出力が必要な行数が異なり、 年配の方々に印刷範囲の指定をしていただくのが難しくて 困っています・・・。 どなたかご存知の方、よろしくお願いいたします!!

  • マクロで変化する印刷範囲を印刷したい

    教えて下さい!エクセルでデーターが入っている 例えば A1:K25とA27:K40 この領域には別のデーターが入ってます 列数は変更ありませんが行数はシートにより違います 毎回印刷範囲を指定しているので面倒くさいのが現状です どなたかワンプッシュで2つのデーターを入れてある領域を印刷出来るマクロを教えて下さい 上と下のデーターの領域は必ず1~3マスは行が空いてます 列は決まっているのでA1~A●←最終行まで A●下行の空白最後尾+1=A■ A■~A■最終行 この二つの領域印刷がしたいです マクロの記録でやってみましたが行が特定の為違うシートでは使えず 又、指定したシートも行を変更してしまうので印刷範囲指定した方が早いという結果に どなたかお力をお貸しください 宜しくお願いします

  • EXCELの印刷範囲のクリアについて

    Excel2007です。よろしくお願いします。 最終的には、別シートを作り直して解決はしたのですが、 方法が分からずすっきりしないため、今後のためにも知っておきたく、 こちらに質問させていただきました。 いただいたEXCELファイルでのことなのですが、 例えば、現在、A1~G10まで何らかの情報が入力されている状態で、 行数は今後増えていくことを想定しB~Fまでを印刷範囲としました。 AとGの列は、データは入力されていますが、印刷はさせたくない部分とします。 印刷プレビュー画面で参照すると、 本来であればB1~F10までが印刷範囲として表示されるはずと思いますが、 なぜかB1~F70、と、行が70列まで範囲状態となってしまいます。 本来1ページで済むはずが、2ページにわたって印刷範囲となっています。 B1~F10を範囲指定すると正常に指定されるのですが、 データが増えることを考えると、列での設定をしたいと思っています。 印刷範囲をクリアし、再度B~Fを印刷範囲設定したのですが、 何度行っても70行まで設定されてしまいます。 何か変なデータが設定されているのかと思い、 11行目~70行目までを削除しても、治りません。 また逆に、60行目あたりで行の追加をすると、印刷範囲はB1~F71、のように 増えていきました。 ですが、行を削除しても範囲は減りません。 ですので、増えた分は増えっぱなしです。 確認した点は、以下です。 ・VBAで設定されているか?⇒「PrintArea」で検索したが、設定なし。 ・名前の管理⇒$B:$F の設定のみで、他の設定はなし どのようにすれば、印刷範囲で行が固定されている部分を解除できますでしょうか? お手数をおかけいたしますが、よろしくお願いいたします。

  • エクセルのデータ比較

    シート1のA行のデータとB行のデータをすべて比較して、同じデータがあれば C列にそのデータを書き出したいのですが、どうすればよろしいのでしょうか。 行数(比較するデータの数)はそれぞれ数千行あります。 例(a~hはデータです) シート1     A列 B列 a c b d  c f d h の場合、比較した結果をC列に次のように表示させます。 A列 B列  C列 a c c b   d d c f d h どなたかよろしくご教示くださるよう、お願いします。

  • エクセル最終行の下に貼り付け

    VBAで以下の作業を教えて下さい。 Sheet1のB列に入力済みのセルが何行かあります。 その入力済みのセルの値をコピーして、Sheet2のA列の入力済みの最終行のすぐ下の行に貼り付ける。 *Sheet1のB列の入力済みのセルの行数は毎回変わります。 *Sheet2のA列には一番最初は何も入力されていない状態です。 宜しくお願い致します。

  • VBAで検索して、行をコピー&追加したい

    Excel2010で以下のことをしたいのですが、VBAがあまりできないのでやれません。 どうか助けてください。 ・sheet1のA列に検索用の番号(例として商品番号)が入力されています。 ・sheet2はデータベースで、A列に商品番号B列に商品名、C列に国名、D列に価格・・~その後J列まで情報が入っています。(行数は1万行) ・sheet1に入っている商品番号でデータベースから行をピックアップし、該当の行をsheet1のB列以降にコピーしたいのです。 (シート3を新しく作っても構いません。やりやすい方で) ・ただし、同じ商品番号で複数の行がヒットしますので、複数の行がヒットしたら行を追加しながら、行をコピーしたいです。 どのように書いたら良いか参考になるURLだけでもご教授ください。 よろしくお願いします。

  • 日付と時刻を比較して一致した行を抜き出す。

    【Sheet1】             【Sheet2】     A        B        A         B 1 2008/1/2   00:00      1 2008/1/1   22:00 2 2008/1/2   01:00      2 2008/1/1   23:00 3 2008/1/2   02:00      3 2008/1/2   00:00 4 2008/1/2   02:00      4 2008/1/2   01:00 【Sheet1】のA行セルと【Sheet2】のA行セルの文字列を比較し、 一致しない場合は【Sheet2】のセルを一つずらしA3【一致】するセルと比較するまで ループを続ける。 ※ 上記例の場合だと日付一致は【Sheet1】A1 ⇔ 【Sheet2】A3 一致した時点で一致した【Sheet1】のAセルの隣B列と比較して、 【Sheet1】の日付、時刻が一致した列を検出する。 ※ 最終的に条件が一致して抜き出すのは 結果 : 【Sheet1】のA1行 そんなマクロを作っているのですが、 何かもっと簡潔に作れるやり方ってありますでしょうか? ヒントだけでもいいのでご教授していただけたら幸いです・・。 わかりにくくてすいません; ----------------------------------------------------------------------------------------------------- Dim Com As Integer Dim Com2 As Integer Dim Storage As String Dim i As Long ' Month関数を使う Do Until Month(Cells(i, 1).Value) = 11 For Com = 1 To 100 'Com = 日付 ' 【Sheet1】の指定されたAセルが【Sheet2】の指定されたAセルが一致しているかどうか If CDate(Worksheets(Sheet1).Range("A" & Com)) = CDate(Worksheets(Sheet2).Range("A" & Com)) Then ' 一致すれば【Sheet1】のAセルの文字列をStorage変数に格納 Storage = ActiveCell.Value Else ' Falseの場合、1行改行する ActiveCell.Offset(1, 0).Select End If Next Loop ----------------------------------------------------------------------------------------------------

  • VBAで印刷する行数に合わせて改ページを自動指定

    お世話になります。 表題の通り、VBAにて印刷する行数に合わせて改ページを自動で指定したいのですが、 どうやればよいのでしょうか? 印刷する行数は毎回異なります。用紙はA4横、印刷範囲はA~U列で列は1ページに収めたいです。 印刷タイトルとして、行タイトル"$1:$7"、列タイトル"$A:$U"が指定してあります。 行の改ページは8行目から13行毎に改ページを入れたいです。      例 総行数50行とした場合、       1ページ目:印刷タイトル+行8~行20       2ページ目:印刷タイトル+行21~行33       3ページ目:印刷タイトル+行34~行46       4ページ目:印刷タイトル+行47~行50 どなたか教えて頂けないでしょうか?

  • 行抽出マクロについて教えてください。

    エクセルのシート1のB列に整理番号(順不同)が書かれてあり、シート2のC列にも整理番号(順不同)が書かれてあります。 シート1は約数千行・100列、シート2は約数万行・100列です。このシート1のB1と同じ整理番号をシート2のC列より上から検索して、最初に見つかったセル(仮にC7)を含む行をシート3にコピーする。 次にB2について同様にしてシート3にコピーする。この時の検索範囲はC8以下(C7以上は検索範囲外)とする。 同様な作業を続けて、最終的には、シート3のC列がシート1のB列と同じにしたい。 これをマクロで組みたい。どなたかご教授お願いいたします。

  • エクセルの2つのシートを比較

    エクセルで2つのシートのA列に値が入っています。 それぞれのA列を比較して同じ値であればシート1のB列をコピーしてシート2のB列に貼付。 ということはVBAで可能でしょうか? ※行番地はばらばらです。 ※A列の値がダブルことはありません。 例) シート1       シート2 A列   B列     A列   B列 111   あああ    111 222   いいい    333 333   ううう    555 444   えええ    444 555   おおお    666 結果 シート1        シート2 A列   B列      A列   B列 111   あああ    111   あああ 222   いいい    333   ううう 333   ううう    555   おおお 444   えええ    444   えええ 555   おおお    666 よろしくお願いします。

専門家に質問してみよう