Excel VBA

【実用】セルの内容に応じて、○の位置を自動で移動させる方法

投稿日:


こんにちは、はちです。

「セルの入力内容に応じて、○をつける項目を変更しなきゃいけないけど、毎回手動は面倒くさい…。自動でできれば楽なのにっ!」と思ったことはありませんか。
マクロを使えば、自動化できる上に、移動忘れのような人為的なミスも防止できます。

完成するとこんな感じ。

さっそく作っていきましょう!

  1. 使用するExcelシートの下準備
  2. IF文で条件分岐
  3. エラー対応
  4. Withステートメントで重複コードをまとめる
  5. 完成コード

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でまとめます。
コードはこちら。

‘以下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

5.完成コード

Sub ○の移動()

‘以下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

使用するものに合わせて設定を変えながら、活用してみて下さいね。

-Excel VBA
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

関連記事はありませんでした

プロフィール

プロフィール

管理人のはちです。

最近、マクロを作成するのが楽しくて仕方ない。プログラミングってすごい!と感動し、学びの最中。
業務効率化のために学んだExcel・VBAや、映画・本・お金に関する小ネタなど幅広く発信中。