Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2013)
印刷範囲の設定方法
投稿日時: 17/03/16 00:21:29
投稿者: JIRO-KUN

例えばセル「A1」に「A1」、セル「B1」に「D200」と入力し、
VBA、マクロ、セルを選択しツールバーのページレイアウト、印刷範囲の設定を使用せずに
関数か何等かの方法で[A1〜D200]を印刷範囲の設定とできますでしょうか?
 
質問投稿はこのExcel(一般機能)で合ってるかどうかわかりませんが
もし間違ってましたらすみません。

回答
投稿日時: 17/03/16 08:37:11
投稿者: んなっと

適当な範囲を選択しておいて
 
1.
 [ページレイアウト]
→印刷範囲
→印刷範囲の設定
2.
 [数式]
→名前の管理
→Print_Area という名前が自動的に作成されているので
 参照範囲の式を次のように変更
=INDIRECT($A$1&":"&$B$1)
→閉じる
→はい

投稿日時: 17/03/20 22:31:07
投稿者: JIRO-KUN

まさにこのようにしたかったです。
ありがとうございます。
 
追加で質問なのですが、
例えばセル
「A1」に「C1」、「B1」に「E200」と入力し、
「A2」に「C300」、「B2」に「E500」と入力。
 
[C1〜E200]の範囲と[C300〜E500]の範囲、
C200行目の次はC300行目〜の範囲の場合、もできますでしょうか?
 
んなっと様のような方法でやりたいのですが、
=INDIRECT($A$1&":"&$B$1)
のところの関数を変更すればできますでしょうか?
その場合の関数は?
 
 
 

回答
投稿日時: 17/03/21 09:44:09
投稿者: んなっと

必ず2つの領域であれば
=(INDIRECT($A$1&":"&$B$1),INDIRECT($A$2&":"&$B$2))
でしょうが、おそらく1つの領域に戻ったり3つの領域に増えたりするのですよね?
仮に領域の数が3つ以下と限定しても、式が長くなるか、
名前の定義の数が増えて4個になったりしてしまいます。
※改ページされて別のページになるのがいいのか悪いのかは、
さらに複雑になって面倒なのでここでは考えないことにします。
 
  
「巨大な表のとびとびの行を印刷する、ただし列は固定する」というのであれば、
フィルターを利用する方法もあります。
 
1. C:E列を選択して印刷範囲の設定
 
2. 例えばA1:B5に印刷したい範囲の行番号だけを入力
 
   A  B  C  D  E   F
 1  1  5 あ い  う 判定
 2 10 12  1 10 100   1
 3 15 17  2 11 101   1
 4      3 12 102   1
 5      4 13 103   1
 6      5 14 104   0
 7      6 15 105   0
 8      7 16 106   0
 9      8 17 107   0
10      9 18 108   1
11     10 19 109   1
12     11 20 110   1
13     12 21 111   0
14     13 22 112   0
15     14 23 113   1
16     15 24 114   1
17     16 25 115   1
18     17 26 116   0
19     18 27 117   0
20     19 28 118   0
21     20 29 119   0
22     21 30 120   0
23     22 31 121   0
24     23 32 122   0
  
3. F2
=SUMPRODUCT((A$1:A$5<=ROW())*(ROW()<=B$1:B$5))
下方向・↓
  
4. F列でフィルター, 1だけに限定
 
   A  B  C  D  E   F
 1  1  5 あ い  う 判定
 2 10 12  1 10 100   1
 3 15 17  2 11 101   1
 4      3 12 102   1
 5      4 13 103   1
10      9 18 108   1
11     10 19 109   1
12     11 20 110   1
15     14 23 113   1
16     15 24 114   1
17     16 25 115   1
  
→印刷
 
これだとどうですか?

回答
投稿日時: 17/03/21 11:00:00
投稿者: んなっと

VBAが使える環境なら
 
   A  B  C  D  E
 1  C1  E5  1 10 100
 2 C10 E12  2 11 101
 3 C15 E19  3 12 102
 4       4 13 103
 5       5 14 104
 6       6 15 105
 7       7 16 106
 8       8 17 107
 9       9 18 108
10      10 19 109
11      11 20 110
12      12 21 111
13      13 22 112
14      14 23 113
15      15 24 114
16      16 25 115
17      17 26 116
18      18 27 117
19      19 28 118
20      20 29 119
21      21 30 120
22      22 31 121
23      23 32 122
 
Sub test()
  Dim i As Long
  Dim r As Range
  Set r = Range(Range(Cells(1, 1)), Range(Cells(1, 2)))
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
    Set r = Union(r, Range(Range(Cells(i, 1)), Range(Cells(i, 2))))
  Next
  r.PrintOut Preview:=True 'またはFalse
End Sub

回答
投稿日時: 17/03/21 11:15:58
投稿者: んなっと

やはりVBAを使わないと難しいですね。
テーブルを使う方法もだめみたいです。
 
あと、印刷用シートを別に作成して数式で現在のシートを参照し、
Print_Area を名前定義してからそちらで印刷する方法もあります。
 
とりあえずフィルタの方法を試してください。

回答
投稿日時: 17/03/21 11:49:13
投稿者: んなっと

印刷用シートを別に作る方法。
ただし、説明が面倒なので同一シートに印刷範囲を作成しています。
 
1. H:K列に以下の関数
 
   A  B  C  D  E   F G  H  I  J  K
 1  1  5 あ い  う 判定   あ い  う 14
 2 10 12  1 10 100   1   1 10 100  
 3 15 20  2 11 101   2   2 11 101  
 4      3 12 102   3   3 12 102  
 5      4 13 103   4   4 13 103  
 6      5 14 104   4   9 18 108  
 7      6 15 105   4   10 19 109  
 8      7 16 106   4   11 20 110  
 9      8 17 107   4   14 23 113  
10      9 18 108   5   15 24 114  
11     10 19 109   6   16 25 115  
12     11 20 110   7   17 26 116  
13     12 21 111   7   18 27 117  
14     13 22 112   7   19 28 118  
15     14 23 113   8          
16     15 24 114   9          
17     16 25 115  10          
18     17 26 116  11          
19     18 27 117  12          
20     19 28 118  13          
21     20 29 119  13          
22     21 30 120  13          
23     22 31 121  13          
24     23 32 122  13          
 
F2
=N(F1)+(SUMPRODUCT((A$1:A$5<=ROW())*(ROW()<=B$1:B$5))>0)
下方向・↓
H2
=IFERROR(INDEX(C:C,MATCH(ROW(H1),$F:$F,0))&"","")
右方向・→J列まで 下方向・↓
K1
=LOOKUP(10^9,F:F)+1
 
2. 例えばH:J列を選択して印刷範囲の設定
  
3. A1:B5に印刷したい範囲の行番号だけを入力するのは同じ
 
4. Print_Area の参照範囲の式を次のように変更
=OFFSET($H$1:$J$1,,,$K$1)

回答
投稿日時: 17/03/21 13:31:31
投稿者: んなっと

先に書いた

引用:
※改ページされて別のページになるのがいいのか悪いのかは、
さらに複雑になって面倒なのでここでは考えないことにします。

については、結果待ちです。

投稿日時: 17/03/22 01:55:06
投稿者: JIRO-KUN

んなっと 様
いろんな方法があるのですね。
 
今のところ同じ列で必ず2つの領域でしたので
改ページされなければ「必ず2つの領域であれば 」の方法が最高によかったのですが
改ページされては困るのでフィルタの方法にすることにしました。
 
いろんな方法ありがとうございました。
勉強になりました。