こんにちは、はちです。
「セルの入力内容に応じて、○をつける項目を変更しなきゃいけないけど、毎回手動は面倒くさい…。自動でできれば楽なのにっ!」と思ったことはありませんか。
マクロを使えば、自動化できる上に、移動忘れのような人為的なミスも防止できます。
完成するとこんな感じ。
さっそく作っていきましょう!
- 使用するExcelシートの下準備
- IF文で条件分岐
- エラー対応
- Withステートメントで重複コードをまとめる
- 完成コード
1.使用するExcelシートの下準備
・あらかじめ、使用するオートシェイプ○を作成
オートシェイプの挿入はVBAでもできますが、サイズ、色などの設定を記述しなければなりません。また、毎回作成となると、最初に前回作成したオートシェイプを削除する記述も必要になるでしょう。
事前に設定できるものはやっておいた方が、記述も短くて済むので作成が楽になります。
・判定用のセルを作成
今回は、図のF5セルの値が「Yes」なのか「No」なのかによって、B4:C4セルの○の位置を変更します。使いたいものに合わせて、プルダウン使用、データリストから抽出した値を入れるなど応用できますよ。
・マクロ処理のボタンを作成
オートシェイプでボタンを作成しましょう。
コードの記述が終わったら、ボタンにマクロの登録をしましよう。
2.IF文で条件分岐
セルの値が「Yes」ならB4セルに、「No」ならC4セルに〇が移動するよう条件分岐します。
コードはこちら。
‘もしセルF5の値が”Yes”なら
If Worksheets(“練習”).Range(“F5”) = “Yes” Then
‘図2(○)をB4セルの左位置、B4セルの上位置に合わせて移動
Worksheets(“練習”).Shapes(2).Left = Range(“B4”).Left
Worksheets(“練習”).Shapes(2).Top = Range(“B4”).Top
‘そうではなく、もしセルF5の値が”No”なら
ElseIf Worksheets(“練習”).Range(“F5”) = “No” Then
‘図2(○)をC4セルの左位置、C4セルの上位置に合わせて移動
Worksheets(“練習”).Shapes(2).Left = Range(“C4”).Left
Worksheets(“練習”).Shapes(2).Top = Range(“C4”).Top
‘If文ここまで
End If
※今回はマクロボタン→○の順に作成したため、○はShapes(2)になりました。
3.エラー対応
このままだと、F5セルが空白だった場合、エラーになってしまいます。
エラー回避のため、「Yes」「No」以外だったら条件値を入力するようメッセージを表示し、マクロを終了するコードを追記します。
コードはこちら。
‘そうでなければ、メッセージを表示し
Else: MsgBox “回答を選択し、再度マクロを実行して下さい”
‘マクロ終了
Exit Sub
4.Withステートメントで重複コードをまとめる
前述のコードで動作としては完成なのですが、作成後のメンテナンスをしやすくするため、Withでまとめます。
コードはこちら。
With Worksheets(“練習”)
‘もしセルF5の値が”Yes”なら
If .Range(“F5”) = “Yes” Then
‘図2(○)をB4セルの左位置、B4セルの上位置に合わせて移動
.Shapes(2).Left = Range(“B4”).Left
.Shapes(2).Top = Range(“B4”).Top
‘そうではなく、もしセルF5の値が”No”なら
ElseIf .Range(“F5”) = “No” Then
‘図2(○)をC4セルの左位置、C4セルの上位置に合わせて移動
.Shapes(2).Left = Range(“C4”).Left
.Shapes(2).Top = Range(“C4”).Top
‘そうでなければ、メッセージを表示し
Else: MsgBox “回答を選択し、再度マクロを実行して下さい”
‘マクロ終了
Exit Sub
‘If文ここまで
End If
‘with適用ここまで
End With
5.完成コード
‘以下end withまで「練習」シートでまとめる
With Worksheets(“練習”)
‘もしセルF5の値が”Yes”なら
If .Range(“F5”) = “Yes” Then
‘図2(○)をB4セルの左位置、B4セルの上位置に合わせて移動
.Shapes(2).Left = Range(“B4”).Left
.Shapes(2).Top = Range(“B4”).Top
‘そうではなく、もしセルF5の値が”No”なら
ElseIf .Range(“F5”) = “No” Then
‘図2(○)をC4セルの左位置、C4セルの上位置に合わせて移動
.Shapes(2).Left = Range(“C4”).Left
.Shapes(2).Top = Range(“C4”).Top
‘そうでなければ、メッセージを表示し
Else: MsgBox “回答を選択し、再度マクロを実行して下さい”
‘マクロ終了
Exit Sub
‘If文ここまで
End If
‘with適用ここまで
End With
End Sub
使用するものに合わせて設定を変えながら、活用してみて下さいね。