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

回答編集履歴

2

変更

2015/10/02 06:31

投稿

kaputaros
kaputaros

スコア1844

answer CHANGED
@@ -7,7 +7,17 @@
7
7
  その値をsubの中で参照して計算すればいいと思います。
8
8
 
9
9
  ---
10
+ 追記:
11
+ 「各ボタンを押す回数=subを実行する回数」
12
+ だと解釈しているので、for文を使わないというのは、Row()で指定するときに
13
+ Row(○:△) のように指定すればいいと思ったからです。
14
+ (※○と△は数値です)
15
+
16
+ > 隠す行の範囲の上限は決まっていて、79から108行です。
17
+ ということなので、計算してがっつり指定して非表示にしたほうが効率もいいし
18
+ 処理も早いと思います。
19
+
10
- 追記:for文なしのものをつくってみました↓
20
+ for文なしつくってみました↓
11
21
  ```
12
22
  Private Const max As Integer = 108
13
23
  Private Const min As Integer = 79

1

追加

2015/10/02 06:31

投稿

kaputaros
kaputaros

スコア1844

answer CHANGED
@@ -1,9 +1,41 @@
1
- 全部隠したあとに、前の行までを表示してあげるのはどうでしょう??
2
-
3
- あと、for文でまわしてしまうと、全部を対象にして実施してしまうので、
1
+ for文でまわしてしまうと、全部を対象にして実施してしまうので、
4
2
  結局全部非表示にしてしまっているのではないかと思います。
5
3
  for文は不要だと思います。
6
4
 
7
5
  -ボタンが押された時点で一番下にある行が非表示になっていればいいのですよね?
8
6
  変数をsubの外側に宣言してあげれば、値を保ち続けてくれるので、
9
- その値をsubの中で参照して計算すればいいと思います。
7
+ その値をsubの中で参照して計算すればいいと思います。
8
+
9
+ ---
10
+ 追記:for文なしのものをつくってみました↓
11
+ ```
12
+ Private Const max As Integer = 108
13
+ Private Const min As Integer = 79
14
+ Private Const limits As Integer = 30 'max-min+1
15
+
16
+ Private hideRowsCnt As Integer '消している行数
17
+
18
+ '「-」ボタンから実行
19
+ Sub minus()
20
+ '消している行数分非表示にする
21
+ Dim hideStart As Integer
22
+
23
+ hideStart = max - hideRowsCnt
24
+ Rows(hideStart & ":" & max).Hidden = True
25
+
26
+ '消している行数を1増やす
27
+ hideRowsCnt = hideRowsCnt + 1
28
+
29
+ '範囲チェック
30
+ If hideRowsCnt > limits Then
31
+ hideRowsCnt = limits
32
+ End If
33
+ End Sub
34
+ ```
35
+ minus()を「-」ボタンから呼び出します。
36
+ 押された分実行されるので、グローバル変数の値が変わります。
37
+ 「+」ボタンから呼び出すほうも、同じ感じで作れると思います。
38
+
39
+ いかがでしょう?
40
+ もちろん、範囲が決まってなくて・・・という場合でしたら、
41
+ for文でまわして一番最後の行から探すとかしなくてはならないかと思います。