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