目次
MsgBoxをセルの値と文字で表示
ボウリング成績表でも使っているユーザーフォームに配置したコマンドボタンを押したら、メッセージを表示して「はい」を押せば、次のプログラムを動かし「いいえ」を押せば、作業をストップしてもう一度元の画面に戻るようにするためのメッセージ機能。
通常はこのように文字で表示します。
もし、このメッセージが文字だけじゃなくて、指定したセルの値と連動して変化してくれるとものすごく便利です。
こんなように。
これは「ボウリング個人スコアー入力方法~LTB個人リーグ編」で使用している、ユーザーフォームに配置している何週目のスコアーを入力するか確認している、メッセージです。
https://tripbowl.net/manual-score-input/
メッセージを「セルの値」+文字にするだけで解決
では、実際にはこのようなコードを記述しています
Private Sub CommandButton6_Click()
If UserForm5.TextBox1.Value = “” Then
MsgBox “スコアー入力する週が入力されていません”
Else
Range(“BE1”).Value = UserForm5.TextBox1.Value
For i = 1 To 40
With UserForm6.Controls(“CommandButton” & i)
.Caption = Cells(i + 2, 29)
End With
Next i
msg = MsgBox(Range(“BE1”) & “週目ですね”, Buttons:=vbYesNo + vbQuestion)
If msg = vbYes Then
Unload UserForm5
UserForm6.Show
End If
End If
End Sub
If UserForm5.TextBox1.Value = “” Then
MsgBox “スコアー入力する週が入力されていません”
Else
Range(“BE1”).Value = UserForm5.TextBox1.Value
For i = 1 To 40
With UserForm6.Controls(“CommandButton” & i)
.Caption = Cells(i + 2, 29)
End With
Next i
msg = MsgBox(Range(“BE1”) & “週目ですね”, Buttons:=vbYesNo + vbQuestion)
If msg = vbYes Then
Unload UserForm5
UserForm6.Show
End If
End If
End Sub
実際に使用しているコードをそのまま書いたので、長くなっていますが、メッセージに関するコードは赤い下線を引いている部分です。
一応すべてのコードの解説です。
- 「コマンドボタン6をクリックしたら実行する」というマクロの記述を開始
- もしユーザーフォーム5のテキストボックス1が空欄だったら
- メッセージ「スコアー入力する週が入力されていません」と表示する
- そうでなかったら(入力されていたら)
- セル「BE1」にユーザーフォーム5のテキストボックス1の入力値を転記する
- 繰り返し処理の変数「i」を宣言し、変数「i」は1~40とする(書き換えたいコマンドボタンの番号)
- Withステートメント開始し、ユーザーフォーム6に配置された「コマンドボタンの番号「i」」の名前をセル(i+2行目の29列目)より順に取得して書き換える
- 名前の書き換えるWithステートメント終了
- 変数「i」を指定した範囲で繰り返す
- メッセージ「セルBE1の値」と「週目ですね」を組み合わせて表示して、「はい」「いいえ」ボタンを表示する
- もし「はい」が選択されたら
- ユーザーフォーム5を閉じて
- ユーザーフォーム6を表示する
- メッセージに関するIFステートメント終了
- テキストボックスに関するIFステートメント終了
- マクロの記述終了
これで、最初にテキストボックスに入力された週(数字)がセルBE1に記載されるので、その数字を読み取ってメッセージに組み合わせるという事です。
ちなみに、変数「i」に関しては、長くなるので、「複数のラベル名を一括で複数のセルの値に書き換える方法」で同じことを記載してありますので、そちらをご覧ください。
あわせて読みたい


複数のラベル名を一括で複数のセルの値に書き換える方法
【ラベルキャプションをセルの値から一括取得】 ボウリングの大会や予約でASで名前登録作業を行っていて、一人目の名前を入れると、空欄の部分に登録した名前が表示され...

波乗りアヒル
Excel-VBAを使えば数分かかる作業がたったの1秒で終了しますよ!