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

回答編集履歴

4

修正

2020/05/05 14:09

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -128,7 +128,7 @@
128
128
  フレーム名とその中にあるオプションボタンが
129
129
    Frame3-OptionButton8のように表示されます。
130
130
 
131
- Frame3と、その下に-OptionButton8からつながっていますでしょうか?
131
+ Frame3と、その下に-OptionButton8から14つながっていますでしょうか?
132
132
 
133
133
  ![イメージ説明](480803e273a3be238a45ccc64c5b369f.png)
134
134
  ```VBA

3

追記

2020/05/05 14:09

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -122,4 +122,32 @@
122
122
  Next
123
123
  End If
124
124
  End Sub
125
+ ```
126
+ 追記2
127
+ 下記コードでフレームとオプションボタンの位置関係わかります。
128
+ フレーム名とその中にあるオプションボタンが
129
+   Frame3-OptionButton8のように表示されます。
130
+
131
+ Frame3と、その下に-OptionButton8から9つながっていますでしょうか?
132
+
133
+ ![イメージ説明](480803e273a3be238a45ccc64c5b369f.png)
134
+ ```VBA
135
+ Sub test01()
136
+
137
+ Dim MyCtrl As Object
138
+ Dim InCtrl As Object
139
+ Dim MyStr As String
140
+ With UserForm1
141
+ For Each MyCtrl In .Controls
142
+ If InStr(MyCtrl.Name, "Frame") > 0 Then
143
+ For Each InCtrl In MyCtrl.Controls
144
+ MyStr = MyStr & MyCtrl.Name & "-" & InCtrl.Name & vbCrLf
145
+ Next
146
+ End If
147
+ MyStr = MyStr & MyCtrl.Name & vbCrLf
148
+ Next
149
+ MsgBox MyStr
150
+ End With
151
+ End Sub
152
+
125
153
  ```

2

修正追記

2020/05/05 14:06

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -1,10 +1,17 @@
1
1
  フレームとオプションボタンですと、こんなことできます。
2
2
  各列のフィルター値取得セットできると思います
3
- ![イメージ説明](f9f2d3448cb291d81d82f4df5013d8eb.png)
3
+ ![イメージ説明](acc1c501aa0c66a78971d813aa05f6ff.png)
4
+ フレームを配置し、各フレーム内に必要個数のOptionButtonを配置しています。
5
+ Frame1 上から OptionButton1から4
6
+ Frame2 上から OptionButton5から7
7
+ Frame3 上から OptionButton8から14
8
+ です。
9
+
4
10
  ```VBA
5
11
  Private Sub CommandButton1_Click()
6
12
  Dim Control1 As Control
7
13
  Dim Control2 As Control
14
+ Dim Control3 As Control
8
15
 
9
16
  For Each Control1 In Frame1.Controls
10
17
  If Control1.Value = True Then Exit For
@@ -12,9 +19,12 @@
12
19
  For Each Control2 In Frame2.Controls
13
20
  If Control2.Value = True Then Exit For
14
21
  Next
15
-
22
+ For Each Control3 In Frame3.Controls
23
+ If Control3.Value = True Then
16
- MsgBox Control1.Caption & vbCrLf & ";" & Control2.Caption
24
+ MsgBox Control1.Caption & "_" & Control2.Caption & "_" & Control3.Caption
17
-
25
+ Exit For
26
+ End If
27
+ Next
18
28
  End Sub
19
29
  ```
20
30
  追記、

1

追記

2020/05/05 04:39

投稿

sinzou
sinzou

スコア392

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  フレームとオプションボタンですと、こんなことできます。
2
2
  各列のフィルター値取得セットできると思います
3
- ![イメージ説明](65389029ded7f41e629fa1becb93b4c9.png)
3
+ ![イメージ説明](f9f2d3448cb291d81d82f4df5013d8eb.png)
4
4
  ```VBA
5
5
  Private Sub CommandButton1_Click()
6
6
  Dim Control1 As Control
@@ -16,4 +16,100 @@
16
16
  MsgBox Control1.Caption & vbCrLf & ";" & Control2.Caption
17
17
 
18
18
  End Sub
19
+ ```
20
+ 追記、
21
+ ```VBA
22
+ Private Sub OptionButton1_AfterUpdate()
23
+ Call Chk1
24
+ End Sub
25
+
26
+ Private Sub OptionButton2_AfterUpdate()
27
+ Call Chk1
28
+ End Sub
29
+
30
+ Private Sub OptionButton3_AfterUpdate()
31
+ Call Chk1
32
+ End Sub
33
+
34
+ Private Sub OptionButton4_AfterUpdate()
35
+ Call Chk1
36
+ End Sub
37
+ Sub Chk1()
38
+ Dim Control1 As Control
39
+ Dim Control2 As Control
40
+ Dim Chk As Boolean
41
+ Dim myRange As Range
42
+ Dim myObj As Range
43
+ Dim keyWord As String
44
+ Set myRange = Range("A:A")
45
+
46
+ For Each Control1 In Frame1.Controls
47
+ If Control1.Value = True Then
48
+ Chk = True
49
+ Exit For
50
+ End If
51
+ Next
52
+ If Chk = True Then
53
+ For Each Control2 In Frame2.Controls
54
+ keyWord = Control1.Caption & "_" & Control2.Caption & "_*"
55
+ Set myObj = myRange.Find(keyWord, LookAt:=xlWhole)
56
+ If myObj Is Nothing Then
57
+ Control2.Enabled = False
58
+ Control2.Value = False
59
+ Else
60
+ Control2.Enabled = True
61
+ Control2.Value = False
62
+ End If
63
+ Next
64
+ For Each Control3 In Frame3.Controls
65
+ Control3.Enabled = False
66
+ Control3.Value = False
67
+ Next
68
+ End If
69
+ End Sub
70
+
71
+ Private Sub OptionButton5_AfterUpdate()
72
+ Call Chk2
73
+ End Sub
74
+
75
+ Private Sub OptionButton6_AfterUpdate()
76
+ Call Chk2
77
+ End Sub
78
+ Private Sub OptionButton7_AfterUpdate()
79
+ Call Chk2
80
+ End Sub
81
+ Sub Chk2()
82
+ Dim Control1 As Control
83
+ Dim Control2 As Control
84
+ Dim Control3 As Control
85
+ Dim Chk As Boolean
86
+ Dim myRange As Range
87
+ Dim myObj As Range
88
+ Dim keyWord As String
89
+ Set myRange = Range("A:A")
90
+
91
+ For Each Control1 In Frame1.Controls
92
+ If Control1.Value = True Then Exit For
93
+ Next
94
+ For Each Control2 In Frame2.Controls
95
+ If Control2.Value = True Then
96
+ Chk = True
97
+ Exit For
98
+ End If
99
+ Next
100
+ If Chk = True Then
101
+ For Each Control3 In Frame3.Controls
102
+ keyWord = Control1.Caption & "_" & Control2.Caption & "_" & Control3.Caption
103
+ Debug.Print keyWord
104
+ Set myObj = myRange.Find(keyWord, LookAt:=xlWhole)
105
+ If myObj Is Nothing Then
106
+ Control3.Enabled = False
107
+ Control3.Value = False
108
+ Else
109
+ Control3.Enabled = True
110
+ Control3.Value = False
111
+ End If
112
+ Next
113
+ End If
114
+ End Sub
19
115
  ```