エクセルのマクロについてです。
作成者がやめてしまい、マクロができる人がおらず困っています。
画像のようなエクセルのリスト(これはシート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ファイルと同一のものではなく、このようなリストだということをお見せするために私物のパソコンで作成したものです。
抽出日付の列は表示形式が日付になっています。他は標準になっていたと思います。
A 回答 (12件中11~12件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
補足コメントにつて。
> 30件の時もあれば500件などあります。
> データの入ってる行の一番下の行までを最下行というと最下行についてはバラツキがあるのですが。。。
matubi = Cells(Rows().Count, 2).End(xlUp).Row
これは、
・シートの2列めの最下行であるB1048576(バージョンに酔ってはB65535)のセルを選択
・[CTRL]+[↑]を押す
これで選択された列番号を取得するものになります。
[CTRL]+[↑]の操作についてはご存知でしょうか?
B1048576のセルから上に見ていって、最初にデータのあるセルに移動します。
空白行を無視して入力された最下行にたどり着けるというわけです。
なので、30件あろうと、500件あろうと、入力されている最下行を取得できます。
B列(2列目)にしているの理由は、
1列目は通し番号で、情報入力のない1500番(?)まで入力されていると思ったので、最下行取得に向かないと判断。
2列目は顧客番号なので、情報入力のある場合は確実に入力されていると判断したためです。
ところで、
実際に試して不具合が生じるということでしょうか?
No.1
- 回答日時:
余計な行を非表示にすることで、印刷されないようにしてみます。
画像のコードの下の方の、
印刷部分「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」という具合で。
お返事ありがとうございます!
また質問させて頂きたいのと
もう一度お聞きしちゃうことになるかと思うのですが、例えば抽出対象件数が500件でシート1で貼り付けたデータをシート3で必要なものだけ抽出してシート2に反映させるようにシート2の1500件分に対応したリストのB列からD列まではシート3のセルを参照する式が1500件分入ってます。
500件分反映されたとして501件からは参照するデータがないためエラーが表示されてるのですが、このエラーになる部分は非表示にしてくれるというマクロなのでしょうか?
またデータの表をあまり詰め込み過ぎると小さくて見えないという年配の方のために1ページを35行ずつに指定して自動印刷したいのですが、気が向いた時なんかで構いませんので教えていただきたいです。
お返事お待ちしております!
でも、こんな長い読む気の失せる質問にまず的確な回答を頂けたことに感謝しております!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Excel(エクセル) エクセルでキーリストからデータを取り出して1枚1枚印刷するには? 11 2022/06/27 09:52
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) Excel シート複数 金額日計表と日付 簡単にシートコピーしたら前日の残高と日付を変更させたい 1 2022/07/15 22:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
【Microsoft Office Excel Comp...
-
Excelはなんで先頭の0を消すん...
-
Excelのセルを飛ばして入力する
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excelのオートフィル
-
Excel 2019 のピボットテーブル...
-
スプレッドシート クエリ関数 1...
-
excelの不要な行の削除ができな...
-
Excel初心者です。 詳しい方、...
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
EXACT関数とIF関数の組み合わせ...
-
Excelのグラフ軸について
-
スマートな関数を教えて下さい。
-
Excelで全角を半角にしたいので...
-
【マクロ】エクセルにかいてあ...
-
Excel:一部のフォントでセルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報
画像見にくくて申し訳ございません。
こちらに見やすいの載せておきます。
お礼を書いた後に気付いてまたお礼をしようとしたらお聞き出来なくなったので補足の方に書かせていただきます。
貼り付けるデータの数なのですが、日によってばらつきがあり、30件の時もあれば500件などあります。(前日の集計を翌日抽出してリストを作成して利用してます。)
なので、データの入ってる行の一番下の行までを最下行というと最下行についてはバラツキがあるのですが。。。
お返事ありがとうございます。
分かりにくくて申し訳ございません。
はい、仰られた通りのエラーが入っております。
教えてくださった関数はエラーが表示されてるセルに入力すればいいのでしょうか?
また、1ページの印刷範囲を35行にして最後の行だけ最終行+1行にしたいのですが、
1ページを35行にするのはどうやればいいでしょうか?
質問ばかりで本当に申し訳ございません。
ifの関数を使用してシート2で反映するデータがなくてエラーの出てるセルは空欄にはなりました。
その後、教えて頂いたマクロを入れてみたのですがエラーが出てしまいました。
あと家のパソコンで試して見てるので印刷はせずに印刷範囲がきちんと出来てるか見たいので印刷プレビューに変えてます。
私が無知すぎるが故に色々教えて頂いてるのにも関わらず出来なくて申し訳ございません。
コピペの内容はこれで完全OKでしょうか?
今教えて頂いたマクロを入れて行の高さが大きかったのか小さくしたら通番35行ずつで出来ました!(入力件数は105件まで)
かつ、空欄の行もはいってはいたのですが、1ページは通番35まで2ページは通番70まで
3ページは通番105までで4ページ目で空欄の106行目が入ってました。
この後、200番目まで試しに入れたら空欄の200番目まで6枚目にプレビューされてきてしまいました。(最下行は201番目に当たる空欄になってます。)
シート2のB列からD列にシート3のデータが反映されてるとこまで+通番だけが入った空欄の直下1行だけが欲しかったのでこれだと通番だけが入っているだけの必要のない行が沢山印刷されてしまうのでこれは不要なのですが、印刷範囲に入らなくなるでしょうか?
多分私が最初1ページ35行数指定とか言ってたからこうなったんですよね(すみません)