様式の「有・無」に〇を手作業で付けてませんか?文字を図形〇で囲む処理を自動化する方法

 

書類の「有・無」や「済・未」に、毎回手作業で〇を付けていませんか。

 

VBAを使えば、セルの文字に図形〇を自動で重ねて配置する作業を、ボタン1クリックで処理することが可能です。

 

この記事では、文字を〇で囲むVBAの仕組みから実際のコード、そして業務への導入方法まで、プログラミング初心者の方でも分かるように解説します。

 

広告

〇を手作業で付ける作業の何が問題なのか

結論から言うと、

図形〇を手作業でセルに配置する作業は、時間がかかるだけでなく、位置ズレや付け忘れのリスクが高い

という問題があります。

 

エクセルで書類を作るとき、「有・無」「済・未」「〇・×」といった選択肢のうち、該当する文字の上に図形〇を重ねて表示させる場面が非常に多い。

介護記録、点検チェックシート、申請書類、納品確認書など、業種を問わず幅広い書類でこのような表示が必要になります。

 

手作業でやると、どうなるか。

まず「挿入」タブから図形を選んで〇を描き、サイズを調整して、対象のセルの上にドラッグして移動させる。

少しでもズレていれば、また微調整。。

10項目あれば10回この作業を繰り返すことになる。。。

しかも、書類を何枚も作る場合は、同じ作業を何度も繰り返さなければならない。。。。

 

マクロ開発の依頼を受ける中でも、このような「〇付け作業の自動化」の相談は非常に多く、現場での需要の高さを実感しています。

ある依頼者様は、毎日30枚以上のチェックシートを作成していて、〇を付ける作業だけで30分以上かかっていると仰っていました。

 

VBAを使えば、あらかじめ設定したセルの値に応じて、自動的に図形〇を正確な位置に配置することができます。

位置ズレゼロ、付け忘れゼロ、かかる時間は数秒です。

 

文字を〇で囲むVBAの仕組みとサンプルコード

VBAで文字に〇を付ける処理は、大きく2つのステップで成り立っています。

 

1つ目は「対象のセルを判定するステップ」、2つ目は「そのセルの位置に図形〇を配置するステップ」です。

 

エクセルのVBAでは、Shapesオブジェクトを使って図形を操作することができます。
図形〇(楕円)を追加するにはShapes.AddShapeメソッドを使い、セルの位置情報(Left、Top、Width、Height)を使って正確にセルの上に重ねて配置します。

 

サンプル事例

たとえば、以下のようなチェックシートを想定してみます。

サンプル

 

B列に「有」と入力されているセルに対して、自動で図形〇を配置するVBAコードがこちらです。

Sub 文字に丸をつける()

Dim ws As Worksheet
Dim cell As Range
Dim shp As Shape
Dim targetRange As Range

'処理対象のシートを設定
Set ws = ThisWorkbook.Worksheets("Sheet1")

'処理対象のセル範囲を設定(B2からB10)
Set targetRange = ws.Range("B2:B10")

'すでに配置されている〇図形を削除(リセット処理)
For Each shp In ws.Shapes
If shp.Name Like "maru_*" Then
shp.Delete
End If
Next shp

'対象セルをひとつずつ確認する
For Each cell In targetRange

'「有」と入力されているセルに〇を配置する
If cell.Value = "有" Then

'楕円(〇)図形を追加する
Set shp = ws.Shapes.AddShape( _
msoShapeOval, _
cell.Left + 2, _
cell.Top + 2, _
cell.Width - 4, _
cell.Height - 4)

'図形の塗りつぶしをなしにする
shp.Fill.Visible = msoFalse

'図形の枠線を赤色・太さ2ptに設定する
shp.Line.ForeColor.RGB = RGB(255, 0, 0)
shp.Line.Weight = 2

'図形に名前を付ける(リセット処理で特定するため)
shp.Name = "maru_" & cell.Address(False, False)

End If

Next cell

MsgBox "〇の配置が完了しました。", vbInformation

End Sub

 

VBAコードの動作解説

このコードがどのように動いているのか、順を追って説明します。

 

まず「Set ws = ThisWorkbook.Worksheets(“Sheet1")」で、処理を行うシートを指定しています。

「Sheet1」の部分は、実際に作業しているシート名に合わせて書き換えてください。

 

次に「Set targetRange = ws.Range(“B2:B10")」で、〇を付けるかどうか判定するセルの範囲を指定しています。

チェックシートの対象範囲に合わせて、この範囲は自由に変更できます。

 

「For Each shp In ws.Shapes」から始まるループ処理では、シート上に配置されているすべての図形を確認して、名前が「maru_」で始まるものを削除しています。

これはリセット処理で、マクロを何度実行しても図形が重複して配置されないようにするための大切な処理です。

 

「For Each cell In targetRange」の部分では、設定した範囲(B2からB10)のセルをひとつずつ順番に確認していきます。

「If cell.Value = “有" Then」で、そのセルに「有」という文字が入力されているかどうかを判定します。

「有」が入力されていた場合にだけ、次の図形配置処理が実行されます。

 

「ws.Shapes.AddShape」が、実際に図形〇(楕円)を追加する命令です。

引数の「cell.Left + 2」「cell.Top + 2」はセルの左端・上端から2ピクセルだけ内側に配置する座標、「cell.Width – 4」「cell.Height – 4」は4ピクセルだけ小さいサイズにすることで、セルの枠線と図形が重ならないように調整しています。

 

「shp.Fill.Visible = msoFalse」は図形の塗りつぶしを透明にして、文字が図形の下に隠れないようにする設定です。

「shp.Line.ForeColor.RGB = RGB(255, 0, 0)」で枠線の色を赤に、「shp.Line.Weight = 2」で線の太さを2ptに設定しています。

色や太さはお好みに合わせて変更してください。

 

最後に「shp.Name = “maru_" & cell.Address(False, False)」で、配置した図形に「maru_B2」のような固有の名前を付けています。

この名前があることで、次にマクロを実行したときにリセット処理で正確に削除することができます。

 

すべてのセルの処理が終わると「MsgBox」で完了メッセージが表示されて、マクロの実行が終了します。

 

実行結果がこちら

マクロ実行結果

 

 

関連記事「文字を〇で囲む操作を完全自動化」では、テキストを図形〇で囲むVBAが設定されたエクセルファイルをダウンロードすることができます。

 

VBAをエクセルに導入する手順と応用のポイント

VBAのコードを書いても、エクセルに正しく設定しなければ使うことができません。

ここでは、VBAの導入手順と、実務でよく使われる応用パターンを紹介します。

 

VBAをエクセルに設定する手順

まず、エクセルの「開発」タブを表示させる必要があります。

開発タブが表示されていない場合は、「ファイル」→「オプション」→「リボンのユーザー設定」から「開発」にチェックを入れてください。

開発タブが表示されたら「Visual Basic」をクリックしてVBE(Visual Basic Editor)を開きます。

標準モジュール作成方法

 

VBEが開いたら、左側のプロジェクトエクスプローラーで対象のエクセルファイルを選択し、「挿入」→「標準モジュール」でモジュールを追加します。

追加されたモジュールに、先ほどのVBAコードをそのまま貼り付けてください。

貼り付けたらVBEを閉じて、エクセルの画面に戻ります。

 

ファイルを保存するときは、マクロが保存できる「.xlsm形式(マクロ有効ブック)」で保存してください。

通常の.xlsx形式で保存するとマクロが消えてしまうので注意が必要です。

 

マクロの実行ボタンを設置する方法

毎回VBEを開いてマクロを実行するのは手間がかかります。

エクセルのシート上にボタンを配置して、ボタンを押すだけでマクロが実行できるようにしましょう。

 

開発タブから「挿入」→「ボタン(フォームコントロール)」を選択して、シート上の任意の場所にボタンを描きます。

ボタンの作成方法

 

ボタンを描くと「マクロの登録」ダイアログが表示されるので、「文字に丸をつける」を選択してOKをクリックします。

これで、ボタンをクリックするだけで〇付け作業が完了するようになります。

 

応用パターン:複数の値に対応した〇付け

実務では「有・無」の2択だけでなく、「〇・△・×」のように複数の値に応じて異なる記号を表示したいケースもあります。

先ほどのコードに条件分岐を追加することで、値によって色や形を変えることもできます。

'「有」なら赤い〇、「要確認」なら黄色い〇を配置する応用版
If cell.Value = "有" Then
'赤い〇を配置
shp.Line.ForeColor.RGB = RGB(255, 0, 0)
ElseIf cell.Value = "要確認" Then
'黄色い〇を配置
shp.Line.ForeColor.RGB = RGB(255, 200, 0)
End If

 

このように、条件の数だけElseIfを追加することで、複数の値に対応した〇付け処理を実装できます。

また、シート全体ではなく特定の行や列だけを対象にしたい場合は、targetRangeの設定を変更するだけで対応できます。

 

関連記事「別シートにテキストを自動転記」では、シートを指定するVBA、転記VBAが設定されたエクセルファイルをダウンロードすることができます。

 

チェックシートの結果を別シートに転記したい場合は、こちらの記事も参考にしてみてください。

 

まとめ

書類の「有・無」や「済・未」に手作業で図形〇を配置する作業は、VBAを使うことで完全に自動化することができます。

今回紹介したコードは、指定した範囲のセルを順番に確認して、条件に合うセルの上に正確な位置で図形〇を配置するシンプルな構造です。

プログラミングの知識がなくても、コードの中のシート名・セル範囲・判定する文字列を書き換えるだけで、自分の業務に合わせてカスタマイズができます。

手作業での〇付け作業に毎日時間を取られているなら、ぜひこのVBAを導入してみてください。

 

作業時間を大幅に削減できるだけでなく、位置ズレや付け忘れのミスもゼロにすることができます。

もし「自分の業務に合わせた複雑なチェック処理を実装したい」「既存のマクロを改良したい」といったご要望がありましたら、マメBlogのエクセルマクロ開発依頼にご相談ください。

業務内容に合わせたオーダーメイドマクロを設定させていただきます。

 

最後まで読んでいただきありがとうございました。エクセルVBAを使って面倒なルーティーン作業を自動化しちゃいましょう。