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

回答編集履歴

2

追記

2019/03/29 02:03

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -39,4 +39,39 @@
39
39
  End With
40
40
  End Sub
41
41
 
42
- ```
42
+ ```
43
+ ---
44
+
45
+ 昨日書いた後、帰宅中に車の中で思いつきました。
46
+
47
+ 「チェックボックスの状態で行の表示・非表示を切り替える」のだから、
48
+ 行毎に「その時の状態」を操作すればいいんじゃないかなと。
49
+
50
+ Option Explicit
51
+
52
+
53
+ ```VBA
54
+ Private Sub CheckBox1_Click()
55
+ Dim flg As Boolean
56
+
57
+ flg = Me.CheckBox1.Value
58
+
59
+ With Me.Rows
60
+ .Item(27).Hidden = Not flg
61
+ .Item(28).Hidden = flg
62
+ .Item(29).Hidden = flg
63
+ .Item(30).Hidden = flg
64
+ .Item(31).Hidden = Not flg
65
+ End With
66
+ End Sub
67
+ ```
68
+
69
+ チェックボックスの値も、
70
+ 行の表示・非表示もTrueかそうでなければFalseなので、
71
+ 「チェックボックスがTrueならば、27行目は表示」としたければ、
72
+ 表示の状態は、「チェックボックスの値ではない値(= Not True)」と表現できますね。
73
+
74
+ こっちの方が後で見て、読みやすい(=可読性が高い)のではないかなと思います。
75
+
76
+ [演算子について](https://vba-code.net/basic/operator/)
77
+ [VBAのIf文でNot条件を指定する](https://www.relief.jp/docs/excel-vba-if-not.html)

1

修正

2019/03/29 02:03

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -30,10 +30,11 @@
30
30
  .Rows("27:31").Hidden = False
31
31
 
32
32
  If .CheckBox1.Value Then
33
- .Range("A27,A31").EntireRow.Hidden = True
33
+ .Rows("27,31").Hidden = True
34
34
  Else
35
35
  .Rows("28:30").Hidden = True
36
36
  End If
37
+
37
38
  .Range("B6:C6").Select
38
39
  End With
39
40
  End Sub