はじめまして。
エクセルのVBAについて教えてください。(初心者)
"シートA!"(印刷用データ)のAG15("シートB!"の2ページ目先頭セル)のセルが空欄なら、"シートB!"(印刷用フォーマット)の40~390行(2ページ目~最終10ページ目)を非表示に、
"シートA!"(印刷用データ)のAG30("シートB!"の3ページ目先頭セル)のセルが空欄なら、"シートB!"(印刷用フォーマット)の79~390行(3ページ目~最終10ページ目)を非表示に、
"シートA!"(印刷用データ)のAG45("シートB!"の4ページ目先頭セル)のセルが空欄なら、"シートB!"(印刷用フォーマット)の118~390行(4ページ目~最終10ページ目)を非表示に、
"シートA!"(印刷用データ)のAG60("シートB!"の5ページ目先頭セル)のセルが空欄なら、"シートB!"(印刷用フォーマット)の157~390行(5ページ目~最終10ページ目)を非表示。・・・・
と、いうような、
"シートB!"(印刷用フォーマット)の先頭ページのセルが空欄なら、そのページ以降は非表示にする (印刷範囲が1ページ分しか無いなら2ページ目以降はいらないから自動で非表示にしたい)。
[シートタブ]→[右クリック]→[コードの表示]の所に貼り付けるVBA入力方法を教えてください。
質問は"シートB!"にVBA入力を考えていますが、"シートA!"に入力でも構いません。
似たような質問を参考に何度も試しましたが、上手くいきませんでした。
どうしても作りたいので、どうか助けて下さい。
よろしくお願いします。
No.6
- 回答日時:
>確認ですが、考えて頂いたVBAの入力は、シートAで宜しいですか?
VBEを立ち上げます。Excelを開いて Ctrl + F11 を同時に押します。 エディターが立ち上がったら、上の挿入タグから
標準モジュールを挿入します。 その標準モジュールにコードをコピペして、そのエクセルを名前を付けて保存します。保存時にマクロ有効ブックにしてください。
今回、作成したコードは、2つのプロシージャで構成しています。
コードの呼び出し方は、いくつかありますが、Alt+F8を押してマクロを図のようなダイアログからpage_setを選択して実行を押します。
また、コマンドボタンをシート上に設置して、そのボタンにpage_setを登録して実行する事も出来ます。
参考サイト:https://www.tipsfound.com/vba/01004
Sub page_set()の中で印刷ページの枚数をせってしています。
条件は、ページ数をシートA(シートの名前)のAG15、、、が空欄でないと言う条件。
コードで示すと If Worksheets("シートA").Range("AG" & i).Value <> "" Then ここです。
"シートA"が実際のシート名と同じ(半角や全角も同じ)かどうか確認してください。場合によっては、シートタグをダブルクリック、Ctrl+C、コードのシートAを選択してCtrl+V
また、印刷するシート名も同様に同じか確認してください。
コードは、Private Sub myHeader(page_value As Long)内の "印刷用フォーマット"がそれにあたります。(印刷するページのシート名)
以上ご確認ください。
No.5
- 回答日時:
すみません。
ここが違いました下記に変更してください。Sub page_set()
Dim page_value As Long, i As Long, Rowscunt As Long
page_value = 0 'ここを変えました
For i = 15 To 135 Step 15
If Worksheets("シートA").Range("AG" & i).Value <> "" Then
page_value = page_value + 1
Rowscunt = Rowscunt + i
Rows("1:" & Rowscunt).Hidden = False
Else
Exit For
End If
Next
if page_value = 0 then Exit Sub 'ここを変えました
Call myHeader(page_value)
End Sub
No.4
- 回答日時:
情報に基づき変更してみましたが、いかがでしょう?
シート名は実際に合わせて変更してください。
デバックしていないので、エラーなど発生した場合は、情報をください。
Sub page_set()
Dim page_value As Long, i As Long, Rowscunt As Long
page_value = 1
For i = 15 To 135 Step 15
If Worksheets("シートA").Range("AG" & i).Value <> "" Then
page_value = page_value + 1
Rowscunt = Rowscunt + i
Rows("1:" & Rowscunt).Hidden = False
Else
Exit For
End If
Next
Call myHeader(page_value)
End Sub
Private Sub myHeader(page_value As Long)
Dim i As Long, n As Long, RowN As Long
Dim W_RANGE As Range
Worksheets("印刷用フォーマット").Activate
Rows("1:" & Rows.Count).Hidden = True
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.ResetAllPageBreaks
Set W_RANGE = Worksheets("印刷用フォーマット").Range("$A$1:$BC$39")
n = 0
For i = 1 To page_value
Set W_RANGE = Union(W_RANGE, Worksheets("印刷用フォーマット").Range("$A$" & n + 1 & ":$BC$" & n + 39))
n = n + 39
RowN = n + 1
ActiveSheet.HPageBreaks.Add Range("A" & RowN)
Next
ActiveSheet.VPageBreaks.Add Range("BD1")
W_RANGE.Name = "Print_Area"
With ActiveSheet.PageSetup
.PrintArea = "Print_Area"
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
End Sub
No.3
- 回答日時:
ちょっとイミフの為、シートA!"(印刷用データ)のAGは無視しています。
ページ範囲が分からなかったので、"印刷用フォーマット"シート A1:H39 、、、10ページ と仮定して下記を作成しました
先頭行(A1,40,79,,,に値が入っていないと、そこでページ設定を確定します。ちなみにA1が空だとA40に値があっても
ページは作成されません。とにかく10ページまで探す場合は、下記のExit Forを消すか、コメントアウトしてください。
印刷範囲に関しては、手直しをしてください。
全ての行を非表示にしています。非表示処理は、処理速度が遅いので、Rows("1:" & Rows.Count).Hidden = True を
Rows("1:390").Hidden = True に必要に応じ、変更してください。
改ページの最適化は、行のみです。ご質問で列は不明の為。仮に'ActiveSheet.VPageBreaks.Add Range("H1")を書いてあります。(コメント)
ActiveSheet.ResetAllPageBreaksで改ページを削除しているので、(列方向もコードが必要になるかと思います)
使用している寄せ集めVBAで作ったので、読みにくいかも知れませんが、そこのところはかんべんで、、
Option Explicit
Sub page_set()
Dim page_value As Long, i As Long, Rowscunt As Long
Rows("1:" & Rows.Count).Hidden = True
page_value = 1
For i = 39 To 390 Step 39
If Worksheets("印刷用フォーマット").Range("A" & 1 + i).Value <> "" Then
page_value = page_value + 1
Rowscunt = Rowscunt + i
Rows("1:" & Rowscunt).Hidden = False
Else
Exit For
End If
Next
Call myHeader(page_value)
End Sub
Private Sub myHeader(page_value As Long)
Dim i As Long, n As Long, RowN As Long
Dim W_RANGE As Range
Worksheets("印刷用フォーマット").Activate
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.ResetAllPageBreaks
Set W_RANGE = Worksheets("印刷用フォーマット").Range("$A$1:$H$39")
n = 0
For i = 1 To page_value
Set W_RANGE = Union(W_RANGE, Worksheets("印刷用フォーマット").Range("$A$" & n + 1 & ":$H$" & n + 39))
n = n + 39
RowN = n + 1
ActiveSheet.HPageBreaks.Add Range("A" & RowN)
Next
'ActiveSheet.VPageBreaks.Add Range("H1")
W_RANGE.Name = "Print_Area"
With ActiveSheet.PageSetup
.PrintArea = "Print_Area"
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
End Sub
No.2
- 回答日時:
ごめん。
タイトルに書いてた…
非表示にする、と言うよりは、印刷時に、条件によって印刷部分を範囲指定すればどう?
VBAなら、改ページを入れる事も出来るし。
頑張ってね。
No.1
- 回答日時:
たぶん、説明が下手。
その処理の目的や概要などを記載した方がいい。
画像なども載せた方がいい。
非表示とはセルの非表示?
なぜ非表示にしたい?
印刷させないってこと?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) セルによって印刷するシートを変える方法 EXCEL-VBA 2 2022/08/01 20:48
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
- Visual Basic(VBA) エクセル365のVBAで困っています。どう修正したらよいか添削をお願いします 2 2023/05/03 17:35
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Excel(エクセル) エクセルのフッタやヘッダーについて 3 2023/02/04 09:45
- Excel(エクセル) Excelであるシートだけ印刷できない 1 2022/04/01 09:04
- Excel(エクセル) エクセルVBAで複数のシート印刷設定 1 2022/09/07 12:03
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
はがきについて。
-
エクセル 文字を増やしたい。
-
セルの内容表示が邪魔になる
-
Microsoft365に変えたのですが...
-
エクセルの計算
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
Excel ピボットテーブルで日付...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの条件付き書式につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報
ご回答ありがとうございます。今一度お願いします。
「シートAにVBA入力を考えています。」
※ 作りたいVBAは、他のアプリよりエクセルにデータをエクスポートする場所が
シートA(印刷用データ)です。
シートA(印刷用データ)のAG15のセルが
シートB(印刷用フォーマット)の2ページ目の先頭データになるので、
シートA(印刷用データ)のAG15のセルが空欄なら、
シートB(印刷用フォーマット)の40~390行(2ページ目~最終10ページ目)を非表示に。
・・・シートAのAG135のセルが空欄なら、
シートBの352~390行(最終10ページ目)を非表示。
(補足) シートBのセルには、シートAのデータを転送する関数が既に入っているので、
「シートAの・・セルが空欄なら」で考えています。
(補足) シートBの列はA~BC迄使用
補足追加画像その①
補足追加画像その②
※ シートAの空欄確認セルはAG15,AG30,AG45,AG60,AG75,AG90,AG105,AG120,AG135です。
※ シートBの様式は1ページ目が13明細、残り9ページは15明細になっています。
何卒よろしくお願いします。
早速、質問した通りのご回答本当に有り難うございます。
少し、試してみましたが上手くいかず、何も変化が有りません。
でも、私のやり方が間違っていると思うので少し時間を掛けてやってみます。
確認ですが、考えて頂いたVBAの入力は、シートAで宜しいですか?
あまり詳しくないので・・・。
もう少しやってみた後、結果を報告します。
親切にして戴き、有り難うございました。