値を渡して、プログラムを実行したいことありませんか?
今回は、2種類の方法で値を渡します
ドロップダウンリストを使う方法とユーザーフォームを使う方法です
ドロップダウンリストを使う方法はとっても簡単です
ユーザーフォームにも挑戦してみましょう!
グレードがぐっと上がるかも…?
難しいことはしていません ぜひ、やってみて!
リストで選択
店名を選んでプログラムに渡します
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-79.png)
F列に検索したい店名を書き出します
C3セルに店名が表示されるようにしましょう!
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-80.png)
データ→データの入力規則で入力値の種類をリストにします
元の値はF3セルからF7セルとします
C3セルで店名を選択できるようになりました
選択した値をプログラムに渡してみよう!
標準モジュールにTenmei_Selectプロシージャを作成します
C3セルの値をTenmeiに代入します
MsgBoxで表示してみましょう!
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-125.png)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-82.png)
Tenmei_Selectプロシージャに値が渡りましたね!
MsgBoxをプログラムに変えていきましょう~
こちらを使います!
売上明細データから店名別に売上表を作成しています
これも見てね! ブログもあります
プログラムソースは、ブログにあります
このプログラムを使って、渡ってきた店名から売上表を作成してみましょう!
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-91.png)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/07/image-1.png)
こちらのuriage_keisan6プロシージャをTenmeiを引数として呼び出します
渡した引数を実引数と呼びます
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-88.png)
uriage_keisan6□の箇所を…
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-85.png)
このように変更します
渡されたTenmeiを使います
件数も最終行を取得できるように変更しましょう
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-86.png)
渡される側の引数は、仮引数と言います
Tenmeiでなく、他の変数名を指定してもいいですよ!
そのように使う方が多いです
'Tenmeiを渡して売上表作成 Tenmeiは実引数
Call Uriage_Keisan(Tenmei)
’TenmeiをMisemeiとして受け取る Misemeiは仮引数
Sub Uriage_Keisan(Misemei As String)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-92.png)
実行ボタンを作りTenmei_Selectと紐づけます
実行してみましょう
店名別に売上表が作成できましたか?
Sub Tenmei_Select()
Dim Tenmei As String
Tenmei = Range("c3")
'Tenmeiを渡して売上表作成
Call uriage_keisan6(Tenmei)
End Sub
'Uriage_Keisan5をWithステートメントを使って
Sub uriage_keisan6(Tenmei As String)
Dim i As Long '売上データの行数
Dim j As Long '作成する売上表の行数
Dim k As Long '売上の項目の位置(列)
With Worksheets("売上明細")
j = 5
For i = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
If .Cells(i, 3) = Tenmei Then '店名がTenmeiかどうか
'売上表に転記
For k = 4 To 7
Worksheets(Tenmei).Cells(j, k - 2) = .Cells(i, k) '商品名~金額
Next k
j = j + 1 '次に作成する売上表の行数の計算
End If
Next i
End With
End Sub
ユーザーフォームから選択
ユーザーフォーム作成
ユーザーフォームを作成します
次のようなオブジェクト名にしました
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-109.png)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-108.png)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-107.png)
ユーザーフォームの作り方はこちらもどうぞ❕
標準モジュールプログラム
標準モジュール
Tenmei_Selectをこのように書き直します
作成したフォームを呼び出すだけです
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-118.png)
ユーザーフォームプログラム
ユーザーフォーム
初期設定
UserForm_Initializeで、
ユーザーフォームが表示される直前に行いたい処理を書きます
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-110.png)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-111.png)
このように表示されるので…
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-114.png)
コンボボックスの設定をします
店名検索シートの値をコンボボックスのTenmeiBox.Listに代入します
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-112.png)
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-122.png)
標準モジュールのTenmei_Selectを実行してみましょう
コンボボックスに指定した店名が代入されましたか?
TenmeiBox.List = Worksheets(“店名検索”).Range(“F3:F7”).Value
店名の値をRange(“F3:F7”)と決め打ちにしていますが、
最終行の取得を使って、このようにすれば、店名の数が増減しても対応できます
Gyo = Worksheets(“店名検索”).Cells(Rows.Count, 6).End(xlUp).Row
TenmeiBox.List = Worksheets(“店名検索”).Range(“F3:F” & Gyo).Value
あるいは、
TenmeiBox.List = Worksheets(“店名検索”).Range(Cells(3, 6), Cells(Gyo, 6)).Value
コマンドボタンの設定
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-115.png)
OKbuttonをダブルクリックします
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-116.png)
このように表示されるので…
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-119.png)
先ほど作成したuriage_keisan6あるいは、Tenmei_Filterを呼び出します
引数はコンボボックスのTenmeiBox.Textです
選択した店名がここに入っているので、この値を渡します
処理が終わって戻ってきたら、Unloadでフォームを閉じます
コマンドボタンを作らずに、コンボボックスに変更があったら、
プログラムを実行する方法もあります
![](https://rei-excel-channnel.com/wp-content/uploads/2024/05/image-120.png)
こちらを使うと店名を選択したらすぐ実行されます
?何選んだ??となるので、コマンドボタンで確定する方がいいのではないかと思います
せっかちさんはこちらもどうぞ!
(こちらにする場合は、OKbutton_Clickはなしです)
上の呼び出すプログラムはどちらかね!(^^;)
フローチャート
ユーザーフォームを使った場合のフローチャートです
こんな感じかな?
![](https://rei-excel-channnel.com/wp-content/uploads/2024/06/image-3.png)
プログラムソース
標準モジュール
Sub Tenmei_Select()
'店名選択フォームの表示
SentakuForm.Show
End Sub
'Uriage_Keisan5をWithステートメントを使って
Sub uriage_keisan6(Tenmei As String)
Dim i As Long '売上データの行数
Dim j As Long '作成する売上表の行数
Dim k As Long '売上の項目の位置(列)
With Worksheets("売上明細")
j = 5
For i = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
If .Cells(i, 3) = Tenmei Then '店名がTenmeiかどうか
'売上表に転記
For k = 4 To 7
Worksheets(Tenmei).Cells(j, k - 2) = .Cells(i, k) '商品名~金額
Next k
j = j + 1 '次に作成する売上表の行数の計算
End If
Next i
End With
End Sub
ユーザーフォーム
Option Explicit
'ユーザーフォームが表示される前に実行される処理
Private Sub UserForm_Initialize()
'コンボボックスのListに店名を代入
TenmeiBox.List = Worksheets("店名検索").Range("f3:f7").Value
End Sub
'コマンドボタン(OK)が押された時の処理
Private Sub OKbutton_Click()
'どちらかを呼び出す
'Call uriage_keisan6(SentakuForm.TenmeiBox.Text)
Call Tenmei_Filter(SentakuForm.TenmeiBox.Text)
'フォームを閉じる
Unload Me
End Sub
'コンボボックスだけの処理ならこちらでも…
'Private Sub TenmeiBox_Change()
' 'どちらかを呼び出す
' Call uriage_keisan6(SentakuForm.TenmeiBox.Text)
' 'Call Tenmei_Filter(SentakuForm.TenmeiBox.Text)
' 'フォームを閉じる
' Unload Me
'End Sub
いかがでしたか?
そんなにむずかしくなかったでしょう❓
コメント