ここから本文です

エクセルのマクロについて質問です。 現在マクロを組んで作業したいのですが、...

kkh********さん

2014/9/814:05:53

エクセルのマクロについて質問です。

現在マクロを組んで作業したいのですが、うまくいきません。

作業というのが、

「複数のシートを選択し、選択したシートそれぞれの空白行を非表示にして印刷する」

というものです。
シートそれぞれの空白行は数もばらばらです。
シートの内容は、複数のコードがあり、そのコード毎の小計がそのコードの最終列にありまして、すべてのコードの総計がそのシートの一番下に存在します(あらかじめ200行ほど作っているので、余った行が空白行となってます)

印刷の際にその空白行は邪魔なので、非表示にして行を縮めて印刷をかけたいのですが、複数のシートを選択してからその作業をしようとするとうまくいきません。

どのようなマクロを組めば良いか教えて頂けますでしょうか?

よろしくお願い致します。

補足大変申し訳ないのですが、実際にVBA表示で教えて頂けると大変助かります。。。

閲覧数:
102
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

a_h********さん

2014/9/814:22:43

目的:複数のシートを選択し、選択したシートそれぞれの空白行を非表示にして印刷する

条件1:シートそれぞれの空白行は数もばらばらです。
条件2:シートの内容は、複数のコードがあり、
条件3:そのコード毎の小計がそのコードの最終列にありまして
条件4:すべてのコードの総計がそのシートの一番下に存在します

条件より
・空白行以外は表示させたまま
・小計、総計の値がある列は空白行以外は全行データがある
と言う事ですから、
1)「総計」の文字のある行が何行目かを求める
2)総計の行から1行目まで空白行の高さを0にする
3)高さを0にした行番号を別のシートに書き出しておく
4)印刷
5)別シートの数値を使い、高さを0にした行を元に戻す
という事では?

  • a_h********さん

    2014/9/814:36:39

    >大変申し訳ないのですが、実際にVBA表示で教えて頂けると大変助かります。。。
    こちらこそ大変申し訳ないのですが、どのようなシートになっているのか判らなければ、サンプルすら出来ませんm(__)m

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/9/11 16:06:47

この度は、大変なご苦労おかけしまして、大変感謝しております。有り難うございます。
kyo_the_megatenistさんの御回答と両方試してみまして、共にうまくいきました。!!
今回は最初に回答して頂いた方をBAとさせて戴きましたが、お二方ともBAでした!
有り難うございました。

ベストアンサー以外の回答

1〜1件/1件中

KYO-Zさん

2014/9/816:00:03

まず、複数のシートを選択して作業すると、記入や非表示も全てのシートに適用されてしまうので、難しくなります。
なので選択された各シートを一度名前を配列格納して、1シートずつ処理を進める形をとりました。
最終列でデータ数を拾ってもいいんですが、面倒だったので200行まで判定して空白行を非表示にしていきプリントしたら再表示させています。

複数の選択シートは途中で解除していますが選択しなおす必要はないですよね…?
下記コードを標準モジュールにコピペして使ってみてください。
標準モジュール云々わからない場合僕の知恵ノートVBAの書き方その1にあります。

Sub Sheets_Print()
Dim SheetsNAME() As String, s As Worksheet, i As Integer, j As Long, k As Long
Application.ScreenUpdating = False '画面処理を停止
ReDim SheetsNAME(ActiveWindow.SelectedSheets.Count - 1)
i = 0
For Each s In ActiveWindow.SelectedSheets '選択されているシートをループ
SheetsNAME(i) = s.Name '選択されているシート名を配列に格納
i = i + 1 '配列の番地をアップ
Next s
Sheets.Select '一度シートの選択を解除するため全シート選択
For j = 0 To i - 1 '格納したシート名でループ
With Worksheets(SheetsNAME(j)) '配列から選択シート名を順次呼び出します
.Activate 'プリントもあるのでアクティブにします。
For k = 1 To 200 'データがわからないのでとりあえず200までループ
If Application.WorksheetFunction.CountA(.Cells(k, 1).EntireRow) = 0 Then’空白行をカウントAで判定
.Cells(k, 1).EntireRow.Hidden = True’非表示にします
End If

Next k
ActiveSheet.PrintOut 'アクティブシートをプリントします
.Rows.Hidden = False '全行の非表示の解除(再表示します)
End With
Next j
Application.ScreenUpdating = True '画面を動かします(停止解除)
End Sub

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる