teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

追記

2019/06/09 01:31

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -63,4 +63,76 @@
63
63
  微妙な調整が必要な場合がありますので、心に留めておいてください。
64
64
 
65
65
  最後になりましたが、物分りが悪く、不要な説明を要求しました。
66
- 失礼しましたm(_ _)m
66
+ 失礼しましたm(_ _)m
67
+
68
+ ---
69
+ んと最初にプロパティ名で説明されてたじゃないですか。
70
+ 自分、英語が苦手なんで基本、アルファベットは飛ばし読みしてます。
71
+ それに、エクセルの設定の話なんで、日本語で説明していただけるとありがたかったです。
72
+ あと、ここのサイトの強調文字も読みにくいので、それもあって、
73
+ 説明が頭に入らなかったような気がします。
74
+
75
+ で、
76
+ リボン上でいろいろいじくってみたらわかると思いますし、
77
+ 薄々分かっておられると思いますが、
78
+ 印刷範囲の設定(PrintArea)を設定した場合、
79
+ 横の縮小(FitToPagesWide)や縦の縮小(FitToPagesTall)
80
+ が無効になるようです。(全体の拡大縮小は有効)
81
+
82
+ 横の縮小や縦の縮小
83
+ (基本的にはどちらかを設定し、どちらかを自動で使うものでしょう)を
84
+ 設定した場合、
85
+ 全体の拡大縮小は無効(両方利用するのは矛盾がある)
86
+
87
+ という仕様のようです。
88
+
89
+ 今回の件の場合、
90
+ ```
91
+ 要件としては、
92
+ 「シート上の印刷出来るものがあるセル範囲の内、左から45列分を紙1枚に収めたい。」
93
+ (縦にはみ出す分は次ページでOK)(という事だろうと思います。)
94
+
95
+ で、前提条件として、
96
+ シート上の印刷できるものがあるセル範囲は、
97
+ 45列以上ある。(意図的にしているのか、操作者が誤ってセルの書式設定等をいじった)
98
+
99
+ ということは、印刷範囲の設定をすることになる。必然的に横の縮小は使えないので、
100
+ 上手く列方向が1ページに納まらない。なにかいい方法がないか?
101
+ (同じ様式のシートが多数あるので最終的にはこの操作をマクロ化したいと考えている。)
102
+ ```
103
+ と、質問してくれるとこちらも何度も聞きなおさなくてもよかったのかなぁと思います。
104
+ まぁ、なかなか最初から整理して質問するのは難しいので、
105
+ 今回のように、やり取りしながら、頭を整理して説明していただけたらいいのかなとは、思います。
106
+
107
+ こういう場合、エクセルの設定をいじるだけの話なので、
108
+ VBAで書いて実行してみるのは、
109
+ 直接触られるものをわざわざラジコンで遠隔操作しているような
110
+ ものなので、まどろっこしいと思います。
111
+ 直接、エクセルの画面上でまずは挙動確かめるほうが楽です。
112
+ その上で、どのような設定で希望の印刷ができるかをまずは見つけることができれば、
113
+ その操作をマクロの記録でVBAに翻訳してもらい、コードを探ると開発が楽になると思います。
114
+
115
+ では、どのような設定(あるいは操作)で希望の結果が得られるか。
116
+ まずは、印刷範囲の設定を希望のセル範囲に設定したうえで、
117
+ 自動的に設定される縦方向の改ページを意図的に削除してやるといいと思います。
118
+ (操作的には、改ページの線を印刷範囲外に追いやる。)
119
+
120
+ コード的には以下のようになると思います。
121
+
122
+ ```ExcelVBA
123
+ Sub Macro4()
124
+ With ActiveSheet
125
+ .PageSetup.PrintArea = .UsedRange.Resize(, 45).Address
126
+ With .VPageBreaks
127
+ If .Count > 0 Then
128
+ .Item(1).DragOff Direction:=xlToRight, RegionIndex:=1
129
+ End If
130
+ End With
131
+ End With
132
+ End Sub
133
+ ```
134
+
135
+ やりたいことは、合ってますかね?ちょっと不安です^^;
136
+
137
+ こちらも、反射的に思いつきで書いちゃうので、的外れなことも言ったりしますが、
138
+ その辺はやり取りしながら、掏り合わせて行けたらと思います。ご容赦のほどを。

6

追記

2019/06/09 01:31

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -52,4 +52,15 @@
52
52
  幅方向のページ数を設定することと、
53
53
  拡大縮小の設定をすることは同時にはできません。
54
54
  先に設定した方が優先になりそうですかね?
55
+ そこで、無効になっている設定をいじろうとするからエラーになるのかな?
56
+ (勘で出来るだけエラーにならないであろう手順で書いたら、
57
+ エラーにならなかったので、エラーになる場合を検証していませんm(_ _)m)
55
- この流れで処理したら行けるのではないかと思います。
58
+ この流れで処理したら行けるのではないかと思います。
59
+ ここまでで、お分かりとは思いますが、
60
+ マクロの記録では不要なコードも記録される場合が多いです。
61
+ ヘルプで確認して不要な部分は削除して構いません。
62
+ あと、マクロの記録も完璧ではありませんので、
63
+ 微妙な調整が必要な場合がありますので、心に留めておいてください。
64
+
65
+ 最後になりましたが、物分りが悪く、不要な説明を要求しました。
66
+ 失礼しましたm(_ _)m

5

修正

2019/06/08 14:22

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -36,16 +36,13 @@
36
36
 
37
37
  For Each ws In ThisWorkbook.Worksheets
38
38
  With ws
39
- .ResetAllPageBreaks
39
+ .ResetAllPageBreaks '改ページのクリア
40
- Set rng = .UsedRange '←上手く行くための呪文で残している
40
+ Set rng = .UsedRange '←上手く行くための呪文
41
41
  With .PageSetup
42
- 'Application.DisplayAlerts = False
43
- '.PrintArea = rng.Address
44
- 'Application.DisplayAlerts = True
45
42
  .PrintArea = ""
46
- .Zoom = False
43
+ .Zoom = False '印刷範囲のクリア
47
- .FitToPagesWide = 1
48
- .FitToPagesTall = 0 '←縦は自動の設定にする
44
+ .FitToPagesTall = False '←縦は自動の設定にする
45
+ .FitToPagesWide = 1 '幅方向を1ページに
49
46
  End With
50
47
  End With
51
48
  Next
@@ -54,4 +51,5 @@
54
51
  リボン上で設定をいじるとわかると思いますが、
55
52
  幅方向のページ数を設定することと、
56
53
  拡大縮小の設定をすることは同時にはできません。
57
- 先に設定した方が優先になりそうですかね?
54
+ 先に設定した方が優先になりそうですかね?
55
+ この流れで処理したら行けるのではないかと思います。

4

修正

2019/06/08 14:10

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -45,10 +45,13 @@
45
45
  .PrintArea = ""
46
46
  .Zoom = False
47
47
  .FitToPagesWide = 1
48
+ .FitToPagesTall = 0 '←縦は自動の設定にする
48
49
  End With
49
50
  End With
50
51
  Next
51
52
  End Sub
52
53
  ```
53
- こちらはこれでエラーになりせんが、
54
+ リボン上設定をいじるとわかると思いが、
55
+ 幅方向のページ数を設定することと、
56
+ 拡大縮小の設定をすることは同時にはできません。
54
- これでもエラーになりすかね?
57
+ 設定した方が優先になりそうですかね?

3

修正

2019/06/08 13:59

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -36,9 +36,12 @@
36
36
 
37
37
  For Each ws In ThisWorkbook.Worksheets
38
38
  With ws
39
- Set rng = ws.UsedRange
40
39
  .ResetAllPageBreaks
40
+ Set rng = .UsedRange '←上手く行くための呪文で残している
41
41
  With .PageSetup
42
+ 'Application.DisplayAlerts = False
43
+ '.PrintArea = rng.Address
44
+ 'Application.DisplayAlerts = True
42
45
  .PrintArea = ""
43
46
  .Zoom = False
44
47
  .FitToPagesWide = 1

2

追記

2019/06/08 13:45

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -18,4 +18,34 @@
18
18
 
19
19
  あ、表毎に1枚で印刷するとして、
20
20
  表の中に、空白行や空白列が存在しますでしょうか?
21
- その辺も説明をお願いします。
21
+ その辺も説明をお願いします。
22
+
23
+
24
+ ---
25
+ ああああ、失礼しました。
26
+ やっと、理解したかも^^;
27
+ 失礼しました。
28
+
29
+ マクロの記録で出来たコード(.Zoom = False)をコピペしたらエラーになるという事でしたか^^;
30
+ で、どう回避すればいいかを質問されているのですね。
31
+
32
+ ```ExcelVBA
33
+ Sub Macro3()
34
+ Dim ws As Worksheet
35
+ Dim rng As Range
36
+
37
+ For Each ws In ThisWorkbook.Worksheets
38
+ With ws
39
+ Set rng = ws.UsedRange
40
+ .ResetAllPageBreaks
41
+ With .PageSetup
42
+ .PrintArea = ""
43
+ .Zoom = False
44
+ .FitToPagesWide = 1
45
+ End With
46
+ End With
47
+ Next
48
+ End Sub
49
+ ```
50
+ こちらではこれでエラーになりませんが、
51
+ これでもエラーになりますかね?

1

追記

2019/06/08 13:37

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -14,4 +14,8 @@
14
14
  印刷範囲の設定(=pageSetUp)は、重いので少し処理に時間が掛かるかもしれません。
15
15
 
16
16
  まずはやりたいことを伝わるように説明してみてください。
17
- コードに向かう前に作業手順の確立が先だと思いますよ。
17
+ コードに向かう前に作業手順の確立が先だと思いますよ。
18
+
19
+ あ、表毎に1枚で印刷するとして、
20
+ 表の中に、空白行や空白列が存在しますでしょうか?
21
+ その辺も説明をお願いします。