【入門】VBAでExcelマクロを作成する方法【その2】

★悩み★
・プログラミング(VBA)で「マクロ」を作成する方法を知りたい。
・「VBA」の書き方を知りたい。
・「VBA」のデバッグ方法を知りたい。
・「VBA」で図形の書き方を知りたい。


こういった「悩み」に答えます。

★本記事の内容★
① VBAで作成するExcelマクロをご紹介
② VBAで図形を作成するExcelマクロの作成方法をご紹介


これからご紹介する「VBAでExcelマクロを作成する方法」を実践したことで、筆者は30分以内でVBAでExcelマクロを作成できました。

記事の前半では「VBAで作成するExcelマクロ」をご紹介しつつ、記事の後半では「VBAで図形を作成するExcelマクロの作成方法」を図を交えながらご紹介します。

この記事を読み終えることで、「VBAでExcelマクロを作成する方法」を把握した状態になります。

ちなみに、「Excelマクロとはどういったものか?」や「Excelマクロを簡単に作成する方法は?」を知りたい方は、以下をご覧ください。

VBAで作成するExcelマクロをご紹介

VBAを使って作成するExcelマクロに関してご紹介します。

★VBAで作成するExcelマクロについて★
表に書かれた情報を元に図形を綺麗に描画するExcelマクロを作る。


本記事では、上記のExcelマクロをVBAで作成します。

筆者は、プログラムやシステムの流れを把握するために、Excelに「フロー」を書き起こします。
フロー作成の際に、「図形が少しでもずれていたら、そのずれを直したい」と思い、ずれを修正するのに時間を浪費します。


上記理由より、「図形を自動で綺麗に描画するExcelマクロ」を作成します。

「図形を自動で綺麗に描画するExcelマクロ」のイメージとしては、下図になります。




Excelに上記の表を作るだけで、フロー図が自動で生成されるExcelマクロを作成します。

以上が、「VBAで作成するExcelマクロ」に関してでした。

VBAで図形を作成するExcelマクロの作成方法

VBAで図形を作成するExcelマクロの作成方法に関してご紹介します。

★VBAでExcelマクロを作成する流れ★
ステップ1:VBAでExcelマクロを作成するための準備
ステップ2:VBAで図形を作成する方法
ステップ3:VBAでExcelの列に記載された情報を取得する方法
ステップ4:VBAで図形を作成する関数を呼び出す方法
ステップ5:VBAで図形を作成するExcelマクロのプログラム
ステップ6:動作確認(VBAで図形を作成するExcelマクロのプログラム)


上記の流れで、「VBAで図形を作成するExcelマクロ」の作成方法をご紹介します。

以降で、各ステップに関してご紹介します。

ステップ1:VBAでExcelマクロを作成するための準備

「VBAでExcelマクロを作成するための準備」に関してご紹介します。

Excelを起動し、マクロを作成できるウィンドウを開きます。

下図の「Visual Basic Editor」をクリックします。



次に「変数にどのような値が格納されたかを確認できるウィンドウ」を開くために、「Locals Window」をクリックします。



そうすることで、以下のような「VBAでExcelマクロを便利に作成するための画面」が整います。


上図の左画面を確認することで、VBAの実行結果をすぐに把握できます。

上図の右画面の上部分を確認することで、「ある変数に適切な値が格納されているか?」を把握できます。

上図の右画面の下部分にVBAのプログラムを書いていきます。

上図の左画面の上部分にある「▶︎」を押すことで、作成したVBAのプログラムを実行できます。

以上で、「ステップ1:VBAでExcelマクロを作成するための準備」は完了です。

ステップ2:VBAで図形を作成する方法

VBAで図形を作成する方法に関してご紹介します。

「VBA 図作成」とGoogle検索すると、参考になりそうなサイトが表示されます。

その中で一番参考になったサイトは以下になります。
VBAで図を作成するために利用する関数

VBAでは、「AddShape」関数を利用することで、任意の図を作成できます。

AddShape関数のリファレンスは、以下のサイトとなります。
AddShape関数のリファレンス

また、AddShape関数で作成できる図は、以下サイトに詳しく記載されています。
AddShape関数で作成できる図について

今回は、「四角形」と「矢印」をVBAで作成したいので、「msoShapeRectangle」と「msoShapeRightArrow」を利用します。

VBAで「任意のテキストが書かれた四角形を任意の場所に作成する」関数は、以下のようになります。

' 現在表示しているシートの指定した部分に四角形を描画する関数
' name: 四角形の中に入力したいテキスト
' startRow: 四角形を描画する行(始点)
' startCol: 四角形を描画する列(始点)
' endRow:   四角形を描画する行(終点)
' endRow:   四角形を描画する列(終点)

Sub AddSquare(name As String, startRow As Integer, startCol As Integer, endRow As Integer, endCol As Integer)
    With ActiveSheet.Range(Cells(startRow, startCol), Cells(endRow, endCol))
        ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, _
            Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
    End With
    
    Selection.Text = name
End Sub


VBAで「任意のテキストが書かれた右矢印を任意の場所に作成する」関数は、以下のようになります。

' 現在表示しているシートの指定した部分に右矢印を描画する関数
' name: 右矢印の中に入力したいテキスト
' startRow: 右矢印を描画する行(始点)
' startCol: 右矢印を描画する列(始点)
' endRow:   右矢印を描画する行(終点)
' endRow:   右矢印を描画する列(終点)

Sub AddArrow(name As String, startRow As Integer, startCol As Integer, endRow As Integer, endCol As Integer)
    With ActiveSheet.Range(Cells(startRow, startCol), Cells(endRow, endCol))
        ActiveSheet.Shapes.AddShape(Type:=msoShapeRightArrow, _
            Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
    End With
    
    Selection.Text = name
End Sub


以上で、「ステップ2:VBAで図形を作成する方法」は完了です。

ステップ3:VBAでExcelの列に記載された情報を取得する方法

「VBAでExcelの列に記載された情報を取得する方法」に関してご紹介します。

実現したいことは、「A列の2行目からの情報を配列変数に格納」です。

以下のVBAプログラムで「VBAでExcelの列に記載された情報を取得」できます。

Range("A2").Select
  Do
    s = ActiveCell.Offset(j, 0).Value
    If s = "" Then
      Exit Do
    End If
    ' セルに入力された情報を配列に格納
    sourceNameList(j) = s
    j = j + 1
Loop


以上で、「ステップ3:VBAでExcelの列に記載された情報を取得する方法」は完了です。

ステップ4:VBAで図形を作成する関数を呼び出す方法

「VBAで図形を作成する関数を呼び出す方法」に関してご紹介します。

ステップ3で、四角形や右矢印を作成する関数を作りました。

VBAでステップ3で作成した関数を呼び出すためには「Call 関数名」を使います。

以上で、「ステップ4:VBAで図形を作成する関数を呼び出す方法」は完了です。

ステップ5:VBAで図形を作成するExcelマクロのプログラム

「VBAで図形を作成するExcelマクロのプログラム」に関してご紹介します。

VBAで図形を作成するExcelマクロのプログラムは、以下となります。

Sub AddArrow(name As String, startRow As Integer, startCol As Integer, endRow As Integer, endCol As Integer)
    With ActiveSheet.Range(Cells(startRow, startCol), Cells(endRow, endCol))
        ActiveSheet.Shapes.AddShape(Type:=msoShapeRightArrow, _
            Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
    End With
    
    Selection.Text = name
End Sub

Sub AddSquare(name As String, startRow As Integer, startCol As Integer, endRow As Integer, endCol As Integer)
    With ActiveSheet.Range(Cells(startRow, startCol), Cells(endRow, endCol))
        ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, _
            Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
    End With
    
    Selection.Text = name
End Sub

Sub Main()
    Dim sourceNameList() As String
    Dim processList() As String
    Dim outputNameList() As String
    Dim i
    i = 0
    Dim j
    j = 0
    Range("A2").Select
    Do
        s = ActiveCell.Offset(i, 0).Value
        If s = "" Then
            Exit Do
        End If
        i = i + 1
    Loop
    ReDim sourceNameList(i)
    ReDim processList(i)
    ReDim outputNameList(i)
    
  Range("A2").Select
    Do
        s = ActiveCell.Offset(j, 0).Value
        If s = "" Then
            Exit Do
        End If
        sourceNameList(j) = s
        j = j + 1
    Loop
    
  j = 0
  Range("B2").Select
    Do
        s = ActiveCell.Offset(j, 0).Value
        If s = "" Then
            Exit Do
        End If
        processList(j) = s
        j = j + 1
    Loop
    
  j = 0
  Range("C2").Select
    Do
        s = ActiveCell.Offset(j, 0).Value
        If s = "" Then
            Exit Do
        End If
        outputNameList(j) = s
        j = j + 1
    Loop
    
    Dim startRow As Integer
    Dim startCol As Integer
    startRow = 5
    startCol = 5
    loopCount = j - 1
    For nowCount = 0 To loopCount
        Call AddSquare(sourceNameList(nowCount), startRow, startCol, startRow + 1, startCol)
        Call AddArrow(processList(nowCount), startRow, startCol + 1, startRow + 1, startCol + 1)
        Call AddSquare(outputNameList(nowCount), startRow, startCol + 2, startRow + 1, startCol + 2)
    Next nowCount
    
    Stop
End Sub


以上で、「ステップ5:VBAで図形を作成するExcelマクロのプログラム」は完了です。

ステップ6:動作確認(VBAで図形を作成するExcelマクロのプログラム)

「VBAで図形を作成するExcelマクロのプログラム」の動作確認をしましょう。

上記コードの「Main関数」を実行することで、下記の図を自動で生成できます。


以上で、「ステップ6:動作確認(VBAで図形を作成するExcelマクロのプログラム)」は完了です。

上記のステップで、「VBAで図形を作成するExcelマクロの作成」することができました。

【まとめ】VBAでExcelマクロを作成する方法

今回の記事を通して、「VBAでExcelマクロを作成する方法」をご紹介することで、以下の悩みを解消しました。

★悩み★
・プログラミング(VBA)で「マクロ」を作成する方法を知りたい。
・「VBA」の書き方を知りたい。
・「VBA」のデバッグ方法を知りたい。
・「VBA」で図形の書き方を知りたい。

VBAでExcelマクロを作成する方法は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント