アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのマクロについてです。
作成者がやめてしまい、マクロができる人がおらず困っています。
画像のようなエクセルのリスト(これはシート2とします。)を使用しており、別のシステムからコピペしたデータをシート1に貼り付けてシート3に必要な情報のみを抽出(VLOOKUP関数仕様)した表を作成し、シート2の表のセル(=シート3!B7の式をいれてます)に反映させて下の行にドラッグしています。
リスト上のマクロボタンは、B7を基準にそこからD列までなのかはたまたI列までなのかは不明ですが、昇順になるようになっています。
それで昇順にし終わったらシートを印刷するといったマクロが組まれていました。
今回のことは、マクロを組まなくても出来ることではあり、作成者がいた時は大量に件数が無かったので改ページ挿入をいちいちしておりましたが、ここ最近大量に来る日もあるので印刷範囲を可変にして印刷出来るようになったらいいネと話が出ました。
今回載せた画像のリストは10件までを表示して作成していますが、本物のリストは1500件くらいまで対応出来るようになっています。

ここで質問です。
印刷範囲を1ページ35行ずつで、最終ページだけシート3で抽出したデータがシート2に反映されてる最終行まで【最終ページだけ33行まで反映されてれば33行まで】+対象件数をきちんとコピペしてるか通番を見て確認するための1行【対象総件数が500件なら1番最後の行の通番が501になってるかで確認するため】)にしたいです。
また、1500件分に対応するように作っており、抽出したデータが500件ならば1000件分反映されないセルが残ってしまいます。
この1000件のうちの1行は必要なので残りの999件は印刷範囲に入って欲しくない場合、どうやってマクロを組めばいいでしょうか?
可能なことなのでしょうか?
手動で修正した方がこのマクロを考えるよりも遥かに楽なのは承知なのですが、もし出来るのであれば教えていただきたいです。

おわかりになる方、無知なこの私にお知恵をお貸しください。
今組まれてるマクロの文章は画像の通りです。
塗りつぶしてるのはシート名で全て同一のシートです。
今回載せたエクセルのリストはマクロを修正したいExcelファイルと同一のものではなく、このようなリストだということをお見せするために私物のパソコンで作成したものです。
抽出日付の列は表示形式が日付になっています。他は標準になっていたと思います。

「エクセルのマクロについてです。 作成者が」の質問画像

質問者からの補足コメント

  • 画像見にくくて申し訳ございません。
    こちらに見やすいの載せておきます。

    「エクセルのマクロについてです。 作成者が」の補足画像1
      補足日時:2019/04/09 23:45
  • お礼を書いた後に気付いてまたお礼をしようとしたらお聞き出来なくなったので補足の方に書かせていただきます。
    貼り付けるデータの数なのですが、日によってばらつきがあり、30件の時もあれば500件などあります。(前日の集計を翌日抽出してリストを作成して利用してます。)
    なので、データの入ってる行の一番下の行までを最下行というと最下行についてはバラツキがあるのですが。。。

      補足日時:2019/04/10 08:39
  • お返事ありがとうございます。
    分かりにくくて申し訳ございません。
    はい、仰られた通りのエラーが入っております。
    教えてくださった関数はエラーが表示されてるセルに入力すればいいのでしょうか?
    また、1ページの印刷範囲を35行にして最後の行だけ最終行+1行にしたいのですが、
    1ページを35行にするのはどうやればいいでしょうか?
    質問ばかりで本当に申し訳ございません。

      補足日時:2019/04/10 11:36
  • ifの関数を使用してシート2で反映するデータがなくてエラーの出てるセルは空欄にはなりました。
    その後、教えて頂いたマクロを入れてみたのですがエラーが出てしまいました。
    あと家のパソコンで試して見てるので印刷はせずに印刷範囲がきちんと出来てるか見たいので印刷プレビューに変えてます。
    私が無知すぎるが故に色々教えて頂いてるのにも関わらず出来なくて申し訳ございません。

    「エクセルのマクロについてです。 作成者が」の補足画像4
      補足日時:2019/04/10 20:44
  • コピペの内容はこれで完全OKでしょうか?

    「エクセルのマクロについてです。 作成者が」の補足画像5
      補足日時:2019/04/10 23:11
  • 今教えて頂いたマクロを入れて行の高さが大きかったのか小さくしたら通番35行ずつで出来ました!(入力件数は105件まで)
    かつ、空欄の行もはいってはいたのですが、1ページは通番35まで2ページは通番70まで
    3ページは通番105までで4ページ目で空欄の106行目が入ってました。
    この後、200番目まで試しに入れたら空欄の200番目まで6枚目にプレビューされてきてしまいました。(最下行は201番目に当たる空欄になってます。)
    シート2のB列からD列にシート3のデータが反映されてるとこまで+通番だけが入った空欄の直下1行だけが欲しかったのでこれだと通番だけが入っているだけの必要のない行が沢山印刷されてしまうのでこれは不要なのですが、印刷範囲に入らなくなるでしょうか?
    多分私が最初1ページ35行数指定とか言ってたからこうなったんですよね(すみません)

    「エクセルのマクロについてです。 作成者が」の補足画像6
      補足日時:2019/04/11 00:10

A 回答 (12件中11~12件)

補足コメントにつて。



> 30件の時もあれば500件などあります。
> データの入ってる行の一番下の行までを最下行というと最下行についてはバラツキがあるのですが。。。

matubi = Cells(Rows().Count, 2).End(xlUp).Row

これは、
・シートの2列めの最下行であるB1048576(バージョンに酔ってはB65535)のセルを選択
・[CTRL]+[↑]を押す
これで選択された列番号を取得するものになります。

[CTRL]+[↑]の操作についてはご存知でしょうか?
B1048576のセルから上に見ていって、最初にデータのあるセルに移動します。
空白行を無視して入力された最下行にたどり着けるというわけです。

なので、30件あろうと、500件あろうと、入力されている最下行を取得できます。

B列(2列目)にしているの理由は、
1列目は通し番号で、情報入力のない1500番(?)まで入力されていると思ったので、最下行取得に向かないと判断。
2列目は顧客番号なので、情報入力のある場合は確実に入力されていると判断したためです。


ところで、
実際に試して不具合が生じるということでしょうか?
    • good
    • 0

余計な行を非表示にすることで、印刷されないようにしてみます。



画像のコードの下の方の、
印刷部分「ActiveWindow.SelectedSheets.PrintOut ~」の前後に、下のように追加します。

----------
matubi = Cells(Rows().Count, 2).End(xlUp).Row
Rows(matubi + 2 & ":" & Rows().Count).EntireRow.Hidden = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Rows(matubi + 2 & ":" & Rows().Count).EntireRow.Hidden = False
----------

1行目 B列(「2」番目の列)【※】で入力のある最下行を取得。
2行目 入力最下行から2行下の行から、シートの最終行までを非表示にする。
3~4行目 印刷。(元からあるもの)
5行目 2行目で非表示にした行を再表示する。

※ここは、最下行で確実に入力のある列番号を入れて下さい。C列なら「3」、D列なら「4」という具合で。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます!
また質問させて頂きたいのと
もう一度お聞きしちゃうことになるかと思うのですが、例えば抽出対象件数が500件でシート1で貼り付けたデータをシート3で必要なものだけ抽出してシート2に反映させるようにシート2の1500件分に対応したリストのB列からD列まではシート3のセルを参照する式が1500件分入ってます。
500件分反映されたとして501件からは参照するデータがないためエラーが表示されてるのですが、このエラーになる部分は非表示にしてくれるというマクロなのでしょうか?
またデータの表をあまり詰め込み過ぎると小さくて見えないという年配の方のために1ページを35行ずつに指定して自動印刷したいのですが、気が向いた時なんかで構いませんので教えていただきたいです。
お返事お待ちしております!
でも、こんな長い読む気の失せる質問にまず的確な回答を頂けたことに感謝しております!

お礼日時:2019/04/10 08:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!