
いつもお世話になっております。
以下のような仕様のVBAコードを作成したいと考えています。
(貼付資料も参照してください)
■仕様
(1)ユーザーフォーム
1.処理の対象となる市名をチェックボックスから選択
2.処理の対象となるシート名をコンボボックスから選択
(2)ユーザーフォームで選択した
選択したシートの対象市名のデータを配列に格納
(3)格納した配列を元に一覧、詳細の表を作成
■オブジェクト
●ユーザーフォーム
・フレーム
Frame1:神奈川県 Frame2:茨城県 Frame3:栃木県 Frame4:対象年度
・チェックボックス
CheckBox1:フレーム外の全選択
CheckBox2~4:各フレームの全選択
CheckBox5~11:市町村名(横浜市~小山市の順)
・コンボボックス
ComboBox1:対象年度
●ワークシート
■不明な事
(1)⇒(2)の処理(ユーザーフォームで選択した項目を他のプロシージャで使用する)
について質問させていただきます。
私の頭の中では、
I.パブリック変数を用意して、CheckBoxやComboBoxで選択した項目を格納
II.プロシージャ引数として・・・
の2つの方法が候補として浮かんでいます。
Iに関して
CheckBox1:対象年度については、オブジェクトが1つしかないので、
適当なパブリック変数(今回はmySh)を用意して、
mySh=Combobox1.Value
とすれば、仕様は満たせると思いますが、
CheckBoxに関しては、数が多いので,どのようにすれば良いのかイマイチ分かりません。
IIに関しては、全く見当が付きません。
■質問
(1)上記の処理を行う場合は、I又はIIの方法で問題無いでしょうか?
(2)I又はIIの方法の優劣はあるのでしょうか?
(3)I、IIの方法を教えてください。
どうぞよろしくお願いします

A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
つまり、呼び出し先のプロシージャでデータを格納したいため、
フォームの選択結果をキーとして渡したいということでしょうか?
>(1)上記の処理を行う場合は、I又はIIの方法で問題無いでしょうか?
呼び出し先のプロシージャが同じユーザーフォーム内であれば
CommandButton1_ClickプロシージャからCall ○○で呼び出して
呼び出し先の○○プロシージャでFor i = 5 To 11~Nextで
Me.Controls("CheckBox" & i).Valueとして値を判定すればいいし、
呼び出し先が標準モジュールであれば
UserForm1.Controls("CheckBox" & i).Valueで同じく値を判定すればよいのでは?
ユーザーフォームは呼び出し先のプロシージャからUnload UserForm1すれば消せますし。
>(2)I又はIIの方法の優劣はあるのでしょうか?
引数でも、広域変数で渡しても好みの問題かと。
>(3)I、IIの方法を教えてください。
I ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
■ユーザーフォームモジュールへ記述
(以下ではコンボボックスしか格納していませんが、チェックボックスはII参照して同様に。)
Private Sub CommandButton2_Click()
pub_cmBox_no = Me.ComboBox1.ListIndex
pub_cmBox_str = Me.ComboBox1.Value
Unload Me
Call sample2
End Sub
■標準モジュールへ記述
'広域変数を用意
Public pub_cmBox_no As Integer
Public pub_cmBox_str As String
'結果を表示
Sub sample2()
MsgBox "▼選択されたコンボボックス" & vbCrLf & pub_cmBox_no + 1 & "番目の" & pub_cmBox_str
End Sub
II~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
■ユーザーフォームモジュールへ記述
Private Sub CommandButton1_Click()
Dim list_boo(6) As Boolean
Dim list_str() As String
Dim cnt As Integer
'チェックボックス判定
For i = 5 To 11
'チェックボックスの状態を配列に格納
list_boo(i - 5) = Me.Controls("CheckBox" & i).Value
If list_boo(i - 5) Then
'Trueのリスト配列(名前)を作成
cnt = cnt + 1
ReDim Preserve list_str(1, cnt)
list_str(0, cnt - 1) = "CheckBox" & i
list_str(1, cnt - 1) = Me.Controls("CheckBox" & i).Caption
Else
End If
Next i
'要素数1削除
If Sgn(list_str) <> 0 Then ReDim Preserve list_str(1, cnt - 1)
Unload Me
'sample1プロシージャを引数つきで呼び出し
Call sample1(list_boo, list_str, Me.ComboBox1.ListIndex, Me.ComboBox1.Value)
End Sub
■標準(ユーザーフォーム)モジュールへ記述
Sub sample1( _
list_boo() As Boolean, list_str() As String, _
cmBox_no As Integer, cmBox_str As String)
Dim i As Integer
Dim msg As String
msg = "▼全チェックボックスの状態"
For i = 0 To UBound(list_boo)
msg = msg & vbCrLf & "CheckBox" & i + 5 & "=" & list_boo(i)
Next i
msg = msg & vbCrLf & "▼チェックされているもの"
If Sgn(list_str) <> 0 Then
For i = 0 To UBound(list_str, 2)
msg = msg & vbCrLf & list_str(0, i) & "=" & list_str(1, i)
Next i
Else
msg = msg & vbCrLf & "1つもチェックされていません"
End If
msg = msg & vbCrLf & "▼選択されたコンボボックス"
If cmBox_no > -1 Then
msg = msg & vbCrLf & cmBox_no + 1 & "番目の" & cmBox_str
Else
msg = msg & vbCrLf & "1つも選択されていません"
End If
MsgBox msg
End Sub

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
教えて!goo限定!! 電子コミック1000円分ギフトコードプレゼント!!
抽選で1000名様に電子コミック1000円分ギフトコードプレゼント!!
-
Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。
Visual Basic(VBA)
-
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
VBAです。ユーザーフォームの表示させ、標準モジュールを読み込ませる方法について
Visual Basic(VBA)
-
4
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
5
ユーザーフォームのコピー?
Excel(エクセル)
-
6
フォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?
Visual Basic(VBA)
-
7
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
8
テキストボックスの値を変数に代入したい。
Visual Basic(VBA)
-
9
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
10
エクセルVBAでテキストボックスの値の取得と変更について
Visual Basic(VBA)
-
11
別のシートから値を取得するとき
Visual Basic(VBA)
-
12
VBA コンボボックスで選んだ値を取得するには
その他(Microsoft Office)
-
13
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
14
Sub ***( ) と Private Sub ***( ) の違い
Visual Basic(VBA)
-
15
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
16
VBAのTextBoxに半角数字のみ入力したい
Visual Basic(VBA)
-
17
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
18
VBのフォームモジュールと標準モジュールの使い分け
Visual Basic(VBA)
-
19
他のフォームから別のフォームのサブルーチンを呼び出す
Visual Basic(VBA)
-
20
ユーザーフォームの入力をシートに反映
Visual Basic(VBA)
関連するQ&A
- 1 VBAのユーザーフォームのリストボックス項目の値を取得する際の引数である。 オブジェクト.List(
- 2 Excel VBAのユーザーフォームについて質問致します 別のExcelを編集中にユーザーフォームの
- 3 Excel VBA ユーザーフォームのコンボボックスに表示する値の入力方法
- 4 Excel VBA ある値が入力されたときだけユーザーフォームを出したいです
- 5 Excel VBA フォーム内のTXTBOX 値取得について
- 6 VBAでDOSコマンドを実行する について いつもお世話になっております 今回の問題点はVBAでDO
- 7 Excelvba2013で、ユーザーフォームから別のユーザーフォームを呼び出して変数を使用する方法
- 8 コード重複の場合、合計する方法 お世話になります。 コード、数量が記載されている表があります。 コー
- 9 vba ユーザーフォームから入力する
- 10 excelでVBAでユーザーフォームのリストBOX
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
エクセルVBAでUserFormを起動し...
-
5
VBA プロシージャの名前の取得
-
6
excel/vba/public変数
-
7
Excel:ThisWorkbookオブジェク...
-
8
VBA 「文字が入っていたら、...
-
9
Accessでグローバル変数を宣言...
-
10
DBMS_OUTPUT.PUT_LINEを実行し...
-
11
Access2016 VBA ボタンのイベン...
-
12
【Excel VBA】 WorksheetやRa...
-
13
エクセルのユーザーフォームで...
-
14
sp_executesqlを実行してもテー...
-
15
Access VBA ラベル印刷開始位置...
-
16
ACCESS マクロをモジュールに変...
-
17
ACCESS2007インポート時の空白...
-
18
C#でストアドの呼び出し方法を...
-
19
VBA ユーザーフォームの値の取...
-
20
SQL ServerのストアドでUPDATE...
おすすめ情報
公式facebook
公式twitter