回答編集履歴

7

追記

2019/06/09 01:31

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -129,3 +129,147 @@
129
129
  最後になりましたが、物分りが悪く、不要な説明を要求しました。
130
130
 
131
131
  失礼しましたm(_ _)m
132
+
133
+
134
+
135
+ ---
136
+
137
+ んと最初にプロパティ名で説明されてたじゃないですか。
138
+
139
+ 自分、英語が苦手なんで基本、アルファベットは飛ばし読みしてます。
140
+
141
+ それに、エクセルの設定の話なんで、日本語で説明していただけるとありがたかったです。
142
+
143
+ あと、ここのサイトの強調文字も読みにくいので、それもあって、
144
+
145
+ 説明が頭に入らなかったような気がします。
146
+
147
+
148
+
149
+ で、
150
+
151
+ リボン上でいろいろいじくってみたらわかると思いますし、
152
+
153
+ 薄々分かっておられると思いますが、
154
+
155
+ 印刷範囲の設定(PrintArea)を設定した場合、
156
+
157
+ 横の縮小(FitToPagesWide)や縦の縮小(FitToPagesTall)
158
+
159
+ が無効になるようです。(全体の拡大縮小は有効)
160
+
161
+
162
+
163
+ 横の縮小や縦の縮小
164
+
165
+ (基本的にはどちらかを設定し、どちらかを自動で使うものでしょう)を
166
+
167
+ 設定した場合、
168
+
169
+ 全体の拡大縮小は無効(両方利用するのは矛盾がある)
170
+
171
+
172
+
173
+ という仕様のようです。
174
+
175
+
176
+
177
+ 今回の件の場合、
178
+
179
+ ```
180
+
181
+ 要件としては、
182
+
183
+ 「シート上の印刷出来るものがあるセル範囲の内、左から45列分を紙1枚に収めたい。」
184
+
185
+ (縦にはみ出す分は次ページでOK)(という事だろうと思います。)
186
+
187
+
188
+
189
+ で、前提条件として、
190
+
191
+ シート上の印刷できるものがあるセル範囲は、
192
+
193
+ 45列以上ある。(意図的にしているのか、操作者が誤ってセルの書式設定等をいじった)
194
+
195
+
196
+
197
+ ということは、印刷範囲の設定をすることになる。必然的に横の縮小は使えないので、
198
+
199
+ 上手く列方向が1ページに納まらない。なにかいい方法がないか?
200
+
201
+ (同じ様式のシートが多数あるので最終的にはこの操作をマクロ化したいと考えている。)
202
+
203
+ ```
204
+
205
+ と、質問してくれるとこちらも何度も聞きなおさなくてもよかったのかなぁと思います。
206
+
207
+ まぁ、なかなか最初から整理して質問するのは難しいので、
208
+
209
+ 今回のように、やり取りしながら、頭を整理して説明していただけたらいいのかなとは、思います。
210
+
211
+
212
+
213
+ こういう場合、エクセルの設定をいじるだけの話なので、
214
+
215
+ VBAで書いて実行してみるのは、
216
+
217
+ 直接触られるものをわざわざラジコンで遠隔操作しているような
218
+
219
+ ものなので、まどろっこしいと思います。
220
+
221
+ 直接、エクセルの画面上でまずは挙動確かめるほうが楽です。
222
+
223
+ その上で、どのような設定で希望の印刷ができるかをまずは見つけることができれば、
224
+
225
+ その操作をマクロの記録でVBAに翻訳してもらい、コードを探ると開発が楽になると思います。
226
+
227
+
228
+
229
+ では、どのような設定(あるいは操作)で希望の結果が得られるか。
230
+
231
+ まずは、印刷範囲の設定を希望のセル範囲に設定したうえで、
232
+
233
+ 自動的に設定される縦方向の改ページを意図的に削除してやるといいと思います。
234
+
235
+ (操作的には、改ページの線を印刷範囲外に追いやる。)
236
+
237
+
238
+
239
+ コード的には以下のようになると思います。
240
+
241
+
242
+
243
+ ```ExcelVBA
244
+
245
+ Sub Macro4()
246
+
247
+ With ActiveSheet
248
+
249
+ .PageSetup.PrintArea = .UsedRange.Resize(, 45).Address
250
+
251
+ With .VPageBreaks
252
+
253
+ If .Count > 0 Then
254
+
255
+ .Item(1).DragOff Direction:=xlToRight, RegionIndex:=1
256
+
257
+ End If
258
+
259
+ End With
260
+
261
+ End With
262
+
263
+ End Sub
264
+
265
+ ```
266
+
267
+
268
+
269
+ やりたいことは、合ってますかね?ちょっと不安です^^;
270
+
271
+
272
+
273
+ こちらも、反射的に思いつきで書いちゃうので、的外れなことも言ったりしますが、
274
+
275
+ その辺はやり取りしながら、掏り合わせて行けたらと思います。ご容赦のほどを。

6

追記

2019/06/09 01:31

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -106,4 +106,26 @@
106
106
 
107
107
  先に設定した方が優先になりそうですかね?
108
108
 
109
+ そこで、無効になっている設定をいじろうとするからエラーになるのかな?
110
+
111
+ (勘で出来るだけエラーにならないであろう手順で書いたら、
112
+
113
+ エラーにならなかったので、エラーになる場合を検証していませんm(_ _)m)
114
+
109
115
  この流れで処理したら行けるのではないかと思います。
116
+
117
+ ここまでで、お分かりとは思いますが、
118
+
119
+ マクロの記録では不要なコードも記録される場合が多いです。
120
+
121
+ ヘルプで確認して不要な部分は削除して構いません。
122
+
123
+ あと、マクロの記録も完璧ではありませんので、
124
+
125
+ 微妙な調整が必要な場合がありますので、心に留めておいてください。
126
+
127
+
128
+
129
+ 最後になりましたが、物分りが悪く、不要な説明を要求しました。
130
+
131
+ 失礼しましたm(_ _)m

5

修正

2019/06/08 14:22

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -74,25 +74,19 @@
74
74
 
75
75
  With ws
76
76
 
77
- .ResetAllPageBreaks
77
+ .ResetAllPageBreaks '改ページのクリア
78
78
 
79
- Set rng = .UsedRange '←上手く行くための呪文で残している
79
+ Set rng = .UsedRange '←上手く行くための呪文
80
80
 
81
81
  With .PageSetup
82
82
 
83
- 'Application.DisplayAlerts = False
84
-
85
- '.PrintArea = rng.Address
86
-
87
- 'Application.DisplayAlerts = True
88
-
89
83
  .PrintArea = ""
90
84
 
91
- .Zoom = False
85
+ .Zoom = False '印刷範囲のクリア
92
86
 
93
- .FitToPagesWide = 1
87
+ .FitToPagesTall = False '←縦は自動の設定にする
94
88
 
95
- .FitToPagesTall = 0 '←縦は自動の設定する
89
+ .FitToPagesWide = 1 '幅方向を1ページ
96
90
 
97
91
  End With
98
92
 
@@ -111,3 +105,5 @@
111
105
  拡大縮小の設定をすることは同時にはできません。
112
106
 
113
107
  先に設定した方が優先になりそうですかね?
108
+
109
+ この流れで処理したら行けるのではないかと思います。

4

修正

2019/06/08 14:10

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -92,6 +92,8 @@
92
92
 
93
93
  .FitToPagesWide = 1
94
94
 
95
+ .FitToPagesTall = 0 '←縦は自動の設定にする
96
+
95
97
  End With
96
98
 
97
99
  End With
@@ -102,6 +104,10 @@
102
104
 
103
105
  ```
104
106
 
105
- こちらはこれでエラーになりせんが、
107
+ リボン上設定をいじるとわかると思いが、
106
108
 
109
+ 幅方向のページ数を設定することと、
110
+
111
+ 拡大縮小の設定をすることは同時にはできません。
112
+
107
- これでもエラーになりすかね?
113
+ 設定した方が優先になりそうですかね?

3

修正

2019/06/08 13:59

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -74,11 +74,17 @@
74
74
 
75
75
  With ws
76
76
 
77
- Set rng = ws.UsedRange
78
-
79
77
  .ResetAllPageBreaks
80
78
 
79
+ Set rng = .UsedRange '←上手く行くための呪文で残している
80
+
81
81
  With .PageSetup
82
+
83
+ 'Application.DisplayAlerts = False
84
+
85
+ '.PrintArea = rng.Address
86
+
87
+ 'Application.DisplayAlerts = True
82
88
 
83
89
  .PrintArea = ""
84
90
 

2

追記

2019/06/08 13:45

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -39,3 +39,63 @@
39
39
  表の中に、空白行や空白列が存在しますでしょうか?
40
40
 
41
41
  その辺も説明をお願いします。
42
+
43
+
44
+
45
+
46
+
47
+ ---
48
+
49
+ ああああ、失礼しました。
50
+
51
+ やっと、理解したかも^^;
52
+
53
+ 失礼しました。
54
+
55
+
56
+
57
+ マクロの記録で出来たコード(.Zoom = False)をコピペしたらエラーになるという事でしたか^^;
58
+
59
+ で、どう回避すればいいかを質問されているのですね。
60
+
61
+
62
+
63
+ ```ExcelVBA
64
+
65
+ Sub Macro3()
66
+
67
+ Dim ws As Worksheet
68
+
69
+ Dim rng As Range
70
+
71
+
72
+
73
+ For Each ws In ThisWorkbook.Worksheets
74
+
75
+ With ws
76
+
77
+ Set rng = ws.UsedRange
78
+
79
+ .ResetAllPageBreaks
80
+
81
+ With .PageSetup
82
+
83
+ .PrintArea = ""
84
+
85
+ .Zoom = False
86
+
87
+ .FitToPagesWide = 1
88
+
89
+ End With
90
+
91
+ End With
92
+
93
+ Next
94
+
95
+ End Sub
96
+
97
+ ```
98
+
99
+ こちらではこれでエラーになりませんが、
100
+
101
+ これでもエラーになりますかね?

1

追記

2019/06/08 13:37

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -31,3 +31,11 @@
31
31
  まずはやりたいことを伝わるように説明してみてください。
32
32
 
33
33
  コードに向かう前に作業手順の確立が先だと思いますよ。
34
+
35
+
36
+
37
+ あ、表毎に1枚で印刷するとして、
38
+
39
+ 表の中に、空白行や空白列が存在しますでしょうか?
40
+
41
+ その辺も説明をお願いします。