【エクセルVBA】「文字を丸で囲む」自動化マクロ~導入方法を解説~
文字を丸で囲む処理を自動化したい!
こんな要望をエクセルVBAを使って解決します。
文字を丸で囲むVBAを導入すれば以下のような編集作業の効率をアップさせることができます。
- アンケートなどでよく使われる「有・無」どちらかに〇を点ける
- 「点検済み」を〇で囲む
- テキスト長によって〇の大きさを調整する
文字を丸で囲むVBAを使えば、
「文字に〇が被って見づらくなった!!」「〇ってどうやって入力するんだっけ?」
といった問題の発生を防ぐことができます。
エクセル作業で文字を丸で囲む作業が定期的にある!という方は是非参考にしてみてください。
目次
「文字を丸で囲む」自動化マクロとは
「文字を丸で囲む自動化マクロ」って具体的にどんなことができるの?本当にそんなことができるの?
と感じる方が多いのではないでしょうか。
コードを解説していく前に、
「文字を囲む」自動化マクロはどんなことができるのか
をサンプル事例を用いてご紹介します。
サンプル事例① 別シートの一覧表に記入されているテキストを丸で囲むマクロ
「文字を丸で囲む」自動化マクロを使えば図のようなことができます。
このVBAを導入すれば、
「丸で囲む」作業を完全自動化
することが可能です。
テキストの長さに応じて〇を細長く微調整しなくちゃ、、、
文字に〇が被らないように調整しなくちゃ、、、
条件によって〇を付けるか付けないを考えなくちゃ、、、
このようなめんどくさい処理をする必要がなくなります。
サンプルVBA
別シートの一覧表に記入されているテキストを丸で囲むマクロに設定されているコードがこちら
Sub 〇で囲む()
Dim Ash As Worksheet
Dim Bsh As Worksheet
Set Ash = ThisWorkbook.Worksheets("設定")
Set Bsh = ThisWorkbook.Worksheets("図形挿入")
Dim zukeiA As Shape
Dim myShape As Shape
Dim myRange As Range
'A1セルからJ10セルの範囲の図形を削除する
Set myRange = Bsh.Range(Bsh.Cells(1, 1), Bsh.Cells(10, 10))
For Each myShape In Bsh.Shapes
If Not (Intersect(Bsh.Range(myShape.TopLeftCell, myShape.BottomRightCell), myRange) Is Nothing) Then
myShape.Delete
End If
Next
Dim ARange As Range
Dim keyWord As String
Dim zukeiH As Range
gyoa = Ash.Cells(Rows.Count, 2).End(xlUp).Row
For i = 4 To gyoa
keyWord = Ash.Cells(i, 2)
For j = 1 To 10
For k = 1 To 10
Set ARange = Bsh.Range(Bsh.Cells(j, k), Bsh.Cells(j, k))
Set zukeiH = ARange.Find(keyWord, LookAt:=xlWhole)
On Error Resume Next
If zukeiH = keyWord And Len(keyWord) = 1 Then
With Bsh.Shapes.AddShape(msoShapeOval, zukeiH.Left, zukeiH.Top, 15, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf zukeiH = keyWord And Len(keyWord) = 2 Then
With Bsh.Shapes.AddShape(msoShapeOval, zukeiH.Left, zukeiH.Top, 30, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf zukeiH = keyWord And Len(keyWord) = 3 Then
With Bsh.Shapes.AddShape(msoShapeOval, zukeiH.Left, zukeiH.Top, 40, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf zukeiH = keyWord And Len(keyWord) = 4 Then
With Bsh.Shapes.AddShape(msoShapeOval, zukeiH.Left, zukeiH.Top, 50, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
ElseIf zukeiH = keyWord And Len(keyWord) = 5 Then
With Bsh.Shapes.AddShape(msoShapeOval, zukeiH.Left, zukeiH.Top, 60, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
Else
End If
If Err <> 0 Then
Err.Clear
End If
Next
Next
Next
End Sub
- 9行目から15行目までは、A1セルからJ10セル範囲の図形を全て削除(リセット)するVBA
- 20行目から25行目までは、図形〇を挿入する範囲を指定するVBA
- 27行目から56行目までは、テキスト長を判別して図形〇の大きさを変えるVBA
分けて考えると複雑なVBAが使われていないことがわかります。
サンプル事例② セルを指定して図形〇を挿入するマクロ
セルを指定して図形〇を挿入するマクロがこちら
指定するセル内の「1文字目を〇で囲む」という処理を自動化できます。
サンプルVBA
Sub セルを指定()
Dim Ash As Worksheet
Set Ash = ThisWorkbook.Worksheets("セルを指定")
Dim zukei As Shape
Dim myShape As Shape
Dim myRange As Range
'A1セルからJ10セルの範囲の図形を削除する
Set myRange = Ash.Range(Ash.Cells(1, 1), Ash.Cells(10, 10))
For Each myShape In Ash.Shapes
If Not (Intersect(Ash.Range(myShape.TopLeftCell, myShape.BottomRightCell), myRange) Is Nothing) Then
myShape.Delete
End If
Next
With Ash.Shapes.AddShape(msoShapeOval, Ash.Cells(5, 1).Left, Ash.Cells(5, 1).Top, 15, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
With Ash.Shapes.AddShape(msoShapeOval, Ash.Cells(5, 5).Left, Ash.Cells(5, 5).Top, 15, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
End Sub
- 7行目から13行目までは、A1セルからJ10セル内の図形を全て削除(リセット)するVBA
- 14行目から18行目までは、図形〇をA5セルに挿入するVBA
- 19行目から23行目までは、図形〇をE5セルに挿入するVBA
「文字を丸で囲む」マクロの基本コード
「文字を丸で囲む」には
AddShapeメソッドを使って図形の〇を挿入するVBA
を入力します。
AddShapeメソッドの基本構造
Shapesオブジェクト . AddShape ( Type , Left , Top , Width , Height )
Type ・・・図形の種類
Left ・・・挿入位置
Top ・・・挿入位置
Width ・・・図形の大きさ
Height・・・図形の大きさ
セルを指定して図形〇を挿入するマクロのコードではこちらに該当します。
With Ash.Shapes.AddShape(msoShapeOval, Ash.Cells(5, 1).Left, Ash.Cells(5, 1).Top, 15, 15)
.Fill.Visible = msoFalse
.Line.Weight = 1
.Line.ForeColor.RGB = vbBlock
End With
基本構造にように一文で書いてしまうと横に長くなってしまうので、With構文を使って改行しながら入力すると見やすくなります。
一度、「文字を丸で囲む」マクロを設定すると半永久的に使えるので、
図形の挿入が必要なエクセルファイルへの設定がおすすめです。
セルを指定して図形〇を挿入するマクロの導入方法
上記で紹介した「セルを指定して図形〇を挿入するマクロ」を使ってVBAの導入方法をご紹介します。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記入
Module1には上記で紹介しているサンプルVBAをコピペして入力してみてください。
5.実行ボタンを作成
6.マクロを登録
以上で「セルを指定して図形〇を挿入するマクロ」の導入が完了です。
手間が多いなぁ。。。と感じる方は関連記事「」を参考にしてみてください。
上記で紹介している「文字を丸で囲むマクロ」が設定されたエクセルファイルをダウンロードすることができます。
「文字を丸で囲む」自動化マクロの導入事例
「文字を丸で囲む」自動化マクロは「様式が決まったシートの編集業務」への導入がおすすめです。
「設定シートに記入した内容から、契約書作成に必要な図形〇を記入する」という内容のVBAを設定しています。
使い方
1.「設定」Sheetに「転記したいテキスト」と「図形〇を挿入するために条件」を入力する
2.「設定」Sheetの工事番号をユーザーフォームに入力して「実行」ボタンを押下
使い方は以上です。
たったこれだけの操作で指定したセルに「テキスト」と「図形〇」を挿入することができます。
実行結果
「文字を丸で囲む」自動化マクロを導入することで、
様式が決まっているシートの編集作業の効率アップ
は間違いありません。
「文字を丸で囲む」自動化マクロを業務内容に合わせて導入する方法
業務内容に合わせたVBAを設定するには、
自分でVBAを設定する方法とVBA開発依頼をする方法
の2つがあります。
自分でVBAを設定する方法
自分でVBAを設定する手順がこちら
- どのような処理をしたいのか具体的なイメージを持つ
- VBAを書いてみる
- ネットや参考書を使って問題点を解決していく
今回紹介した「文字を丸で囲む」自動化マクロの場合は以下の流れで作業を進めました。
- 丸で囲みたいテキストを抽出
- どのような条件で丸を挿入するか考えをまとめる
- 業務内容に合わせた処理になるようコードを書いてみる
このような流れで一つ一つ疑問を解決して業務内容に合わせたVBAに仕上げていきました。
作業をしてみて感じたことが、
表示されている図形をリセットするVBAの設定が難しかった
です。
指定する範囲内で図形を削除するVBAはいろんなエクセル業務に応用できそうなのでとても勉強になりました。
自分で「文字を丸で囲む」自動化マクロの導入を検討されている方は、この記事内で紹介されているサンプルコードを是非参考にして頑張ってみてください。
VBA開発依頼をする方法
当ブログが行っているVBA開発代行サービスの依頼方法は、
現状このようなエクセル作業をしていて自動化したい!
と伝えるだけ。
「文字を丸で囲む」自動化マクロをあなたが行っているエクセル業務に改良することも可能です。
「文字を丸で囲む」自動化マクロを使ってみたい!でも、こんな作業にでもマクロを設定できるの?
といった疑問をお持ちの方はお気軽にお問合せください。
>>>マメBlogのVBA開発依頼の詳細はこちら
関連記事「年間50件達成!!マクロ開発実績について」ではマメBlogが行ってきたVBA開発の実績が詳しく紹介されています。
どんなVBA開発を行っているのか、費用はどれくらいかかるのか、などVBA開発依頼サービスに興味のある方は是非チェックしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません