【エクセルVBA】「文字を丸で囲む」マクロの作り方~設定されているコードを解説~
文字を丸で囲む処理を自動化したい!
こんな要望をエクセルVBAを使って解決します。
文字を丸で囲むVBAを導入すれば以下のような編集作業の効率をアップさせることができます。
- アンケートなどでよく使われる「有・無」どちらかに〇を点ける
- 「点検済み」を〇で囲む
- テキスト長によって〇の大きさを調整する
文字を丸で囲むVBAを使えば、
「文字に〇が被って見づらくなった!!」「〇ってどうやって入力するんだっけ?」
といった問題の発生を防ぐことができます。
エクセル作業で文字を丸で囲む作業が定期的にある!という方は是非参考にしてみてください。
目次
「文字を丸で囲む」エクセルVBAとは
「文字を丸で囲む自動化VBA」って具体的にどんなことができるの?本当にそんなことができるの?
と感じる方が多いのではないでしょうか。
サンプル事例を使って、
「文字を囲む」エクセルVABはどんなことができるのか。どのようなコードが設定されているのか。
をご紹介します。
サンプル事例① 別シートの一覧表に記入されているテキストを丸で囲むVBA
「設定」Sheetに作成したリストと一致するテキストを丸で囲む
という処理をするVBAを作成してみました。
こんな感じ
- 「設定」Sheetに丸で囲みたいテキストのリストを作成
- 「図形挿入」SheetのA1セルからJ10セルの範囲で適当にテキストを入力
- 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
セルを指定して図形〇を挿入する
という処理をするVBAを作成してみました。
こんな感じ
- A5セルとE5セルに「有・無」というテキストを入力
- 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
図形を表示するセルがすでに決まっている場合に効果的なVBAです。
「文字を丸で囲む」エクセルVBAの基本コード
「文字を丸で囲む」には
AddShapeメソッドを使って図形の〇を挿入するVBA
を入力します。
AddShapeメソッドの基本構造
Shapesオブジェクト . AddShape ( Type , Left , Top , Width , Height )
Type ・・・図形の種類
Left ・・・挿入位置
Top ・・・挿入位置
Width ・・・図形の大きさ
Height・・・図形の大きさ
サンプル事例として紹介した「セルを指定して図形〇を挿入するVBA」のコードで該当する部分がこちら
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を設定してしまえば様式が変わらない限り半永久的に使うことができます。
「文字を丸で囲む」エクセルVBAの導入方法
上記で紹介した「セルを指定して図形〇を挿入するVBA」を使ってVBAの導入方法をご紹介します。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記入
Module1には上記で紹介しているサンプルVBAをコピペして入力してみてください。
5.実行ボタンを作成
6.マクロを登録
以上で「セルを指定して図形〇を挿入するVBA」の導入が完了です。
手間が多いなぁ。。。と感じる方は関連記事「文字を〇で囲むVBAのダウンロード」を参考にしてみてください。
上記で紹介している2つのサンプル事例が設定されたエクセルファイルをダウンロードすることができます。
「文字を丸で囲む」エクセルVBAの導入事例
「文字を丸で囲む」エクセルVBAは、
「様式が決まったシートの編集業務」への導入
がおすすめです。
使い方
1.「設定」Sheetに「転記したいテキスト」と「図形〇を挿入するための条件」を入力する
2.「設定」Sheetの工事番号をユーザーフォームに入力して「実行」ボタンを押下
使い方は以上です。
たったこれだけの操作で指定したセルに「テキスト」と「図形〇」を挿入することができます。
実行結果
「文字を丸で囲む」エクセルVBAを導入すると、
確実にエクセル作業の効率をアップさせる
ことが可能です。
業務内容に合わせたVBAを導入する方法
今回紹介した、
「文字を〇で囲むVBA」を業務内容に合わせてアレンジしたい!!
このように感じてくれた方がいらっしゃるのではないでしょうか。
業務内容に合わせたVBAを導入することができれば、
2時間~3時間もかかっているエクセル業務を1時間以内に処理する
ことだって可能です。
なんとしてもエクセル業務の効率をアップさせたい!と考えている方のために
業務内容に合わせてVBAをアレンジする2つの方法
を具体的にご紹介します。
それは、
「VBAのコード開発を第三者に依頼する」または「自分でVBAのコードを編集する」
という方法です。
VBAの開発を依頼する
「VBAのコード開発を第三者に依頼する」は、
プログラミング開発を請け負っている会社、または個人に依頼することで
業務内容に合わせたVBAの導入ができます。
通常の業務に専念しつつエクセル業務の効率をアップできるのでめちゃくちゃおすすめの手段なのですが、
依頼先によっては費用が高い!担当者によって完成度の差が激しい
などのデメリットがあります。
勤めていた会社でよく利用していたのですが、
「これだけのVBAでこんなに請求されるの!??」
と驚かされたことも。。。
VBAのコード開発を依頼予定の方は、
依頼先の候補として「マメBlogのエクセルVBA開発サービス」
を検討してみてください。
どんなエクセル作業をしていて、どんなVBAを設定したいのか。
を聞き取りをしてVBAを開発。
年間50件ほどのVBA開発を担当させていただいております。
関連記事「【マクロ開発実績】年間50件の受注達成!」では、VBAの開発実績を詳しく紹介しているので参考にしてみてください。
マメBlogが提供するVBA開発サービスの特徴がこちら
- 現在行っている業務内容に合わせてVBAを設定
- 依頼を受けてから2週間以内に納入
- 簡単な改修は追加費用なしで実施
「実際に使っている様式」「職場での運用方法」に合わせてVBAを設定するので、
めちゃくちゃ使いやすいと大好評。
効率をアップさせたい!でもVBAを1から勉強する時間なんてない!!
こんな方は、是非「マメBlogVBA開発サービス」の利用を検討してみてください。
自分でVBAのコードを編集する
「自分でVBAのコードを編集する」にはVBAの勉強が必要です。
プログラミングの勉強って難しそぅ!
と思われるかもしれませんがそんなことはありません。
VBAは
「ネットや参考書で情報をゲットしやすい」「エクセルを使えればすぐにでもVBAを操作できる」
という理由から初心者が挑戦しやすいプログラミングだと言われています。
例えば、
【VBA 書き方】
【VBA 画像貼付 サンプルコード】
このようにネット検索すればいろんな情報を手に入れることができて、開発しようとしているVBAの難易度をすぐ調べることができます。
簡単なVBAであれば、
ネットや参考書で紹介されいるコードを組み合わせて業務内容に合わせたVBAに仕上げる
ことが可能です。
実現させたいVBAの難易度を確認してから、
「自分でVBA開発を進めるのか」それとも「第三者にVBA開発を依頼するのか」
を検討すると効率よくVBAの導入が可能です。
今後のためにVBAの知識を身に付けて業務内容に合わせたVBAを自ら設定したい!
と考える方はエクセルVBAの情報を発信しているメルマガ登録がおすすめ。
メルマガでは、以下のような情報を不定期に発信しています。
- 普通の会社員がVBAの知識を身に付けた方法
- 業務内容に合わせたVBAの開発方法
- VBA開発依頼の中から「これはエクセル業務で使える!!」と個人的に感じたコードの紹介
参考書やプログラミングスクールでの授業で行うような
「変数の意味とは」「プロパティとは」
という解説は行いません。
というか、私はプログラマーではないのでできません。
効率の悪いエクセル業務を毎日、何時間も強いられた苦しい経験から得たスキルを使って
エクセル業務の効率がアップするVBAのコードや作り方の情報
を積極的に紹介しています。
プログラミング学習は内容が難しいため途中で挫折する人が多い!
こんな不安からVBA学習をスタートさせていない方は、まずは無料で始められるメルマガでVBAの情報をお得にゲットしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません