【エクセル】文字を〇で囲む操作を自動化するマクロを紹介~コピペして使えるサンプルマクロを掲載~

Left Caption

疑問がある人

文字に○をつける処理を自動化したい。いい方法ってないの?

こんな疑問をお答えします。

この記事では、VBAを使って文字に図形○をつける方法を詳しく解説しています。

文字に○をつけるVBAを使えば、図形の挿入が必要な書類作成の効率をアップさせることができます。

 

  • 図形挿入操作の省略
  • 図形編集操作の省略
  • 書類編集ミスの激減

 

Left Caption

ひらめく人

私の仕事では、テキストに図形の○をつける作業が多いのでVBAを導入することで作業スピードが格段にがアップしました

エクセルで図形の挿入、編集作業が多い方におすすめです。

 

文字を〇で囲むマクロとは

文字を○で囲むマクロとは、図形(楕円)を挿入し文字に合わせて位置、大きさを自動調整するものです。

 

図形の挿入にはAddShapeメソッドを使用します。

AddShapeメソッドの基本構造

 

Shapesオブジェクト . AddShape ( Type , Left , Top , Width , Height )

 

Type   ・・・図形の種類

Left     ・・・挿入位置

Top     ・・・挿入位置

Width ・・・図形の大きさ

Height・・・図形の大きさ

AddShapeメソッドを使って「文字を〇で囲むVBA」を作っています。この記事の後半で紹介している3つのサンプル事例を見比べることでAddShapeメソッドの理解を深めることができるはずです。是非参考にしてみてください。

 

Left Caption

上を目指す人

基本構造の勉強をするよりもサンプル事例を参考にした方がすぐに扱えるようになります。

 

一度マクロを設定すると半永久的に使えるので図形の挿入が必要なエクセルファイルへの設定がおすすめです。

よく仕事で使われる事例を元に「文字を○で囲むVBA」の導入方法をご紹介していきます。

 

サンプル事例① 指定するセルに図形〇を挿入するVBA

指定するセルに図形〇を挿入するVBAの導入方法を紹介します。

A5セルとE5セルに図形〇を挿入する」というプログラムを作成していきます。

 

 

 

1.VBAを起動

 

2.標準モジュールを作成

 

3.ModuleにサンプルVBAを記入

 

4.セルを指定して図形〇を挿入するサンプルVBA

Sub セルを指定()
    Dim Ash As Worksheet
    Set Ash = ThisWorkbook.Worksheets("セルを指定")
    Dim zukei As Shape
    For Each zukei In Ash.Shapes
    On Error Resume Next
    If zukei.TopLeftCell.Address >= Cells(1, 1).Address Then
    zukei.Delete
    End If
    If Err <> 0 Then
    Err.Clear
    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

 

5.VBAを実行

6.結果

 

図形〇で囲みたい文字の場所があらかじめ決まっているときに便利なVBAです。

 

Left Caption

上を目指す人

私の職場では、様式が決まっている契約書にこのサンプルVBAを導入しています。

下記のサイトでは、指定するセルに図形〇を挿入するVBAが設定されたエクセルファイルをダウンロードしてお使いいただくことができます。図形の編集作業が多いという方は是非参考にしてみてください。

 

<<指定するセルに図形〇を挿入するVBAが設定されたエクセルファイルをダウンロードはこちら

 

サンプル事例② 指定する文字を検索し図形〇を挿入するVBA

指定する文字を検索し図形〇を挿入するVBAの導入方法を紹介します。

設定シートに記入した文字と図形挿入シートに記入した文字が一致するとき図形〇を挿入する」というプログラムを作成していきます。

 

1.VBAを起動

 

2.標準モジュールを作成

 

 

3.ModuleにサンプルVBAを記入

 

4.指定する文字を検索し図形〇を挿入するサンプルVBA

Sub 〇で囲む()
    Dim Ash As Worksheet
    Dim Bsh As Worksheet
    Set Ash = ThisWorkbook.Worksheets("設定")
    Set Bsh = ThisWorkbook.Worksheets("図形挿入")
    Dim zukeiA As Shape
    For Each zukeiA In Bsh.Shapes
    On Error Resume Next
    If zukeiA.TopLeftCell.Address >= Bsh.Cells(1, 1).Address Then
    zukeiA.Delete
    End If
    If Err <> 0 Then
    Err.Clear
    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 = Range(Cells(j, k), Cells(j, k))
    Set zukeiH = ARange.Find(keyWord, LookAt:=xlWhole)
    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
    Next
    Next
    Next
End Sub

 

5.VBAを実行

 

6.結果

 

サンプルVBAには関数IFを関数LENを使って文字数で図形〇の大きさを変更するVBAが設定されています。上記の結果を見てわかるように「有」のときと「有効期限切」のときの図形〇の大きさを調整しています。

 

Left Caption

ひらめく人

文字の長さによって図形の大きさを編集する手間を省くことができます。

下記のサイトでは、文字を〇で囲むVBAが設定されたエクセルファイルをダウンロードしてお使いいただくことができます。図形〇で囲みたい文字の場所があらかじめ決まっているときに便利なVBAです。

 

<<文字を〇で囲むVBAのダウンロードはこちら

 

サンプル事例③ 契約書内の文字を〇で囲むVBA

契約書内の文字を〇で囲むVBAの導入方法を紹介します。

「設定シートに記入した内容から、契約書作成に必要な図形〇を記入する」というプログラムを作成していきます。

 

指定する文字を検索し図形〇を挿入するVBAの導入方法を紹介します。

設定シートに記入した文字と図形挿入シートに記入した文字が一致するとき図形〇を挿入する」というプログラムを作成していきます。

 

1.契約書の様式を設定

契約書の様式を設定します。どのセルにテキストを転記させるのか、どの位置に図形を挿入させるのか最初に決定しなければなりません。

 

Left Caption

ひらめく人

VBAを作り始めてから様式の変更が発生しないよう時間をかけて作り込んでください。

2.設定シートの様式を設定

一覧表の情報を元にテキストを転記させたり、図形の挿入を行います。

 

 

3.VBAを起動

 

 

2.標準モジュールを作成

 

 

 

3.ModuleにサンプルVBAを記入

 

 

4.契約書を作成するサンプルVBA

Sub 工事注文書()
   ''''''''''''''''''''''''''Sheetの設定''''''''''''''''''''''''''
    Dim Ash As Worksheet
    Dim Bsh As Worksheet
    Set Ash = ThisWorkbook.Worksheets("一覧表")
    Set Bsh = ThisWorkbook.Worksheets("工事注文書")
    ''''''''''''''''''''''ユーザーフォームで入力した値を変数iで取得''''''''''''''''''''''''''
    i = UserForm1.TextBox1.Value
    ''''''''''''''''''''''''''Sheet内の図形を削除''''''''''''''''''''''''''
    '前回表示させた図形をリセットさせなければ重なって増え続けてしまう'
    Dim zukei As Shape
    For Each zukei In Bsh.Shapes
    On Error Resume Next
    If zukei.TopLeftCell.Address >= Bsh.Cells(1, 1).Address Then
    zukei.Delete
    End If
    If Err <> 0 Then
    Err.Clear
    End If
    Next
    ''''''''''''''''''''''''''一覧表から工事契約書へ値を転記する''''''''''''''''''''''''''
    '''''工事名を転記'''''
    Bsh.Range("H6") = Ash.Cells(i + 2, 2)
    Bsh.Range("H6").HorizontalAlignment = xlLeft
    '''''工事場所を転記'''''
    Bsh.Range("H8") = Ash.Cells(i + 2, 3)
    Bsh.Range("H8").HorizontalAlignment = xlLeft
    '''''工期(着手)を転記'''''
    Bsh.Range("H10") = Ash.Cells(i + 2, 4)
    Bsh.Range("H10").HorizontalAlignment = xlCenter
    Bsh.Range("H10").NumberFormatLocal = "ggge年m月d日"
    '''''工期(竣功)を転記'''''
    Bsh.Range("P10") = Ash.Cells(i + 2, 5)
    Bsh.Range("P10").HorizontalAlignment = xlCenter
    Bsh.Range("P10").NumberFormatLocal = "ggge年m月d日"
    '''''請負金額を転記'''''
    Bsh.Range("L12") = Ash.Cells(i + 2, 6)
    Bsh.Range("L12").HorizontalAlignment = xlCenter
    Bsh.Range("L12").NumberFormatLocal = "#,###"
    '''''消費税を転記'''''
    Bsh.Range("R14") = Bsh.Range("L12").Value * 0.1
    Bsh.Range("R14").HorizontalAlignment = xlCenter
    Bsh.Range("R14").NumberFormatLocal = "#,###"
    '''''支給材料の有無(図形○を表示)'''''
    If Ash.Cells(i + 2, 11) = "有" Then
        With Bsh.Shapes.AddShape(msoShapeOval, 368, 358, 14, 14)
        .Fill.Visible = msoFalse
        .Line.Weight = 1
        .Line.ForeColor.RGB = vbBlock
    End With
    ElseIf Ash.Cells(i + 2, 11) = "無" Then
         With Bsh.Shapes.AddShape(msoShapeOval, 402, 358, 14, 14)
        .Fill.Visible = msoFalse
        .Line.Weight = 1
        .Line.ForeColor.RGB = vbBlock
    End With
    Else
    End If
    '''''貸与品の有無(図形○を表示)'''''
    If Ash.Cells(i + 2, 12) = "有" Then
        With Bsh.Shapes.AddShape(msoShapeOval, 368, 378, 14, 14)
        .Fill.Visible = msoFalse
        .Line.Weight = 1
        .Line.ForeColor.RGB = vbBlock
    End With
    ElseIf Ash.Cells(i + 2, 12) = "無" Then
         With Bsh.Shapes.AddShape(msoShapeOval, 402, 378, 14, 14)
        .Fill.Visible = msoFalse
        .Line.Weight = 1
        .Line.ForeColor.RGB = vbBlock
    End With
    Else
    End If
    '''''発生品の有無(図形○を表示)'''''
    If Ash.Cells(i + 2, 13) = "有" Then
        With Bsh.Shapes.AddShape(msoShapeOval, 368, 396, 14, 14)
        .Fill.Visible = msoFalse
        .Line.Weight = 1
        .Line.ForeColor.RGB = vbBlock
    End With
    ElseIf Ash.Cells(i + 2, 13) = "無" Then
         With Bsh.Shapes.AddShape(msoShapeOval, 402, 396, 14, 14)
        .Fill.Visible = msoFalse
        .Line.Weight = 1
        .Line.ForeColor.RGB = vbBlock
    End With
    Else
    End If
    '''''工事数量調書の有無(図形線を表示)'''''
     If Ash.Cells(i + 2, 14) = "有" Then
         With Bsh.Shapes.AddLine(Bsh.Range("I24").Left, Bsh.Range("I24").Top + 6, Bsh.Range("P24").Left, Bsh.Range("P24").Top + 6).Line
        .Weight = 1
        .ForeColor.RGB = vbBlock
        End With
        With Bsh.Shapes.AddLine(Bsh.Range("I24").Left, Bsh.Range("I24").Top + 12, Bsh.Range("P24").Left, Bsh.Range("P24").Top + 12).Line
        .Weight = 1
        .ForeColor.RGB = vbBlock
        End With
    Else
    End If
    '''''示方書等の有無(図形線を表示)'''''
     If Ash.Cells(i + 2, 15) = "有" Then
         With Bsh.Shapes.AddLine(Bsh.Range("I25").Left, Bsh.Range("I25").Top + 6, Bsh.Range("P25").Left, Bsh.Range("P25").Top + 6).Line
        .Weight = 1
        .ForeColor.RGB = vbBlock
        End With
        With Bsh.Shapes.AddLine(Bsh.Range("I25").Left, Bsh.Range("I25").Top + 12, Bsh.Range("P25").Left, Bsh.Range("P25").Top + 12).Line
        .Weight = 1
        .ForeColor.RGB = vbBlock
        End With
    Else
    End If
    '''''工事数量調書の有無(図形線を表示)'''''
     If Ash.Cells(i + 2, 16) = "有" Then
         With Bsh.Shapes.AddLine(Bsh.Range("I26").Left, Bsh.Range("I26").Top + 6, Bsh.Range("P26").Left, Bsh.Range("P26").Top + 6).Line
        .Weight = 1
        .ForeColor.RGB = vbBlock
        End With
        With Bsh.Shapes.AddLine(Bsh.Range("I26").Left, Bsh.Range("I26").Top + 12, Bsh.Range("P26").Left, Bsh.Range("P26").Top + 12).Line
        .Weight = 1
        .ForeColor.RGB = vbBlock
        End With
    Else
    End If
    '''''発注者住所を転記'''''
    Bsh.Range("J33") = Ash.Cells(i + 2, 8)
    Bsh.Range("J33").HorizontalAlignment = xlLeft
    '''''発注者氏名を転記'''''
    Bsh.Range("J35") = Ash.Cells(i + 2, 7)
    Bsh.Range("J35").IndentLevel = 2
    '''''受注者住所を転記'''''
    Bsh.Range("J37") = Ash.Cells(i + 2, 10)
    Bsh.Range("J37").HorizontalAlignment = xlLeft
    '''''受注者氏名を転記'''''
    Bsh.Range("J39") = Ash.Cells(i + 2, 9)
    Bsh.Range("J39").IndentLevel = 2
End Sub

 

5.ユーザーフォームの作成

 

6.ユーザーフォームオブジェクトの作成

 

7.ユーザーフォームコードの作成

 

8.ユーザーフォームに記入するサンプルVBA

Private Sub CommandButton1_Click()
Call 工事注文書
End Sub

 

「Callを使って、標準モジュールに記入したVBAを呼び出し実行する」という意味です。ユーザーフォームにVBAを直接書き込んでしまうと後々編集するときにやりづらくなる!というデメリットがあります。

 

Left Caption

ひらめく人

ユーザーフォームでVBAを実行させる場合、Callで呼び出す方法がおすすめです。

 

9.VBAを実行

ユーザーフォームに「一覧表の工事番号」を入力し実行ボタンを押すだけで、テキストや図形をまとめて転記することができます。

決められた様式の資料を作成するような業務におすすめのVBAです。

契約書を作成するVBAには、別シートに情報を転記するVBA図形を操作するVBAが使われています。下記の記事ではそれぞれのVBAの使い方、導入の方法などが詳しく紹介されています。

 

 

 

自分の業務に合った契約書を作成するVBAを作りたい!という方は是非参考にしてみてください。

 

文字を〇で囲む操作を自動化しエクセル作業の効率アップ

文字を○で囲む操作は仕事でよく使われます。

「有」「無」を○で囲む

「合格」「不合格」を○で囲む

「はい」「いいえ」を○で囲む

○で囲む項目が多くなると自動化しなければ手間と時間ばかりかかってしまいます。

 

Left Caption

疲れ果てた人

アンケート系の書類編集では○をつける作業が多すぎてかなりめんどう

文字を○で囲むマクロを導入すると、○をつける項目がどれだけ増えても一瞬で処理することができます。

マクロで図形の表示位置、大きさを設定してしまえば○がズレる心配もないので、さらなる作業効率アップにつながります。

 

VBAの勉強をはじめる方におすすめのプログラミングスクール

この記事で紹介している「文字を〇で囲むVBA」のように上手にVBAを使えばエクセル業務の効率を格段にアップさせることができます。

 

Left Caption

上を目指す人

私の職場では、VBAを導入するようになってからデスクワークの効率が格段にアップしたと実感できるほど作業スピードと精度が上がっています。

エクセルを使ったデスクワークが多いという方におすすめのプログラミングがVBAです。VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。

VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。

【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。

 

  • 基礎からプログラミングを勉強したい
  • まとまった勉強時間の確保が難しい
  • 途中で挫折したくない

上記のように考えている方に【1st Step】はおすすめです。

下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。

これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。