VBAメッセージボックスをセルの値で表示する方法

パソコン難しい Excel-VBA
スポンサーリンク

こんにちは、とりっぷぼうるです。

元々エクセルとは全く縁のない生活をしていましたが、人員不足などで少しでもデータ入力作業や集計作業を効率化するしか方法が無く、仕方がなくエクセルに取り組み始まました。

なぜならば、大きな会社ならば専用ソフトやクラウド上でデータ集計や管理を行うのでしょうけど、小さなところではそのようなお金もないのでエクセルで解決するしか方法が無いのですよね。

このような理由からエクセルに取り組み始めましたので、当然ながらエクセルの専門知識もなく、学校に通うこともできずにただ単にエクセルの書籍とにらめっこしながら取り組んでいます。

波乗りアヒル
波乗りアヒル

でも書籍のままだと実用的でないことが多く、VBAコードを組み合わせてみたら動いた!という実用例・体験談を書いています。

Excel-VBAの専門学校通学や・資格があるわけではありませんので、あくまでエラーにならずに動いてくれているVBAコードになりますので、掲載のVBAコードが同じように動く保証はできません。
実際に動いているエクセルは2009と2016です。

MsgBoxをセルの値と文字で表示

ボウリング成績表でも使っているユーザーフォームに配置したコマンドボタンを押したら、メッセージを表示して「はい」を押せば、次のプログラムを動かし「いいえ」を押せば、作業をストップしてもう一度元の画面に戻るようにするためのメッセージ機能。

通常はこのように文字で表示します。

もし、このメッセージが文字だけじゃなくて、指定したセルの値と連動して変化してくれるとものすごく便利です。

こんなように。

これは「ボウリング個人スコアー入力方法~LTB個人リーグ編」で使用している、ユーザーフォームに配置している何週目のスコアーを入力するか確認している、メッセージです。

ボウリング個人スコアー入力方法~LTB個人リーグ編
エクセルでビジュアルベーシック(VBA)を使わずに作成していると、入力したい参加者の名前を探すためにシートを選択したりスクロールしたり、とても大変で時間ばかり無駄にかかってしまい非効率です。個人のレコードシート!ユーザーフォームを使えば、瞬間移動できるのです。
メッセージを「セルの値」+文字にするだけで解決
では、実際にはこのようなコードを記述しています
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
実際に使用しているコードをそのまま書いたので、長くなっていますが、メッセージに関するコードは赤い下線を引いている部分です。
一応すべてのコードの解説です。
  1. 「コマンドボタン6をクリックしたら実行する」というマクロの記述を開始
  2. もしユーザーフォーム5のテキストボックス1が空欄だったら
  3. メッセージ「スコアー入力する週が入力されていません」と表示する
  4. そうでなかったら(入力されていたら)
  5. セル「BE1」にユーザーフォーム5のテキストボックス1の入力値を転記する
  6. 繰り返し処理の変数「i」を宣言し、変数「i」は1~40とする(書き換えたいコマンドボタンの番号)
  7. Withステートメント開始し、ユーザーフォーム6に配置された「コマンドボタンの番号「i」」の名前をセル(i+2行目の29列目)より順に取得して書き換える
  8. 名前の書き換えるWithステートメント終了
  9. 変数「i」を指定した範囲で繰り返す
  10. メッセージ「セルBE1の値」と「週目ですね」を組み合わせて表示して、「はい」「いいえ」ボタンを表示する
  11. もし「はい」が選択されたら
  12. ユーザーフォーム5を閉じて
  13. ユーザーフォーム6を表示する
  14. メッセージに関するIFステートメント終了
  15. テキストボックスに関するIFステートメント終了
  16. マクロの記述終了

これで、最初にテキストボックスに入力された週(数字)がセルBE1に記載されるので、その数字を読み取ってメッセージに組み合わせるという事です。
ちなみに、変数「i」に関しては、長くなるので、「複数のラベル名を一括で複数のセルの値に書き換える方法」で同じことを記載してありますので、そちらをご覧ください。

複数のラベル名を一括で複数のセルの値に書き換える方法
ユーザーフォームに配置したラベルの名前をセルの値から順番に読み取って書き換えたい。1個ずつやるのは面倒なので変数を使ってまとめて一括で書き換えてしまいましょう。

コメント