VBA・PYTHON・SQL コードの部屋 

EXCEL・ACCESS・VBA・PYTHON・SQLなどのCODE部屋

VBA・図形の書き方

1.図形にテキストを入力する方法

図形にテキストを入力するには「Charactersオブジェクト」の「Textプロパティ」でテキストを入力したり、入力されている文字列を取得することができます。

Charactersオブジェクト」は「Shaepオブジェクト」の「TextFrameプロパティ」で、「TextFrameオブジェクト」を取得した、「Charactersメソッド」で取得できます。

次のように記述すると覚えてください。

また、テキストのFontの設定は「セルのフォントサイズ、種類、表示位置を指定する」をご覧ください。

ActiveSheet.Shapes(1).TextFrame.Characters.Text = "入力したい文字列"

2.図形にテキストを入力するサンプルコード

図形作成と同時にテキストを入力する

まずは図形を作成時と同時にテキストを入力する方法です。

図形は「Shapes.AddShape(タイプ, Left, Top, Width, Height)」で作成します。

Sub Sample1()

'Type,Left,Top,Width,Heightを指定
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50)

    With .TextFrame.Characters 'テキスト
        .Text = "四角形" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
End With

End Sub

作成済みの図形を取得してテキストを入力する

次は作成済みの図形を取得してテキストを入力する方法です。

次のように3つの図形がすでにあるワークシートの図形を操作します。

個別に指定して取得する
Sub Sample2()

With ActiveSheet
    
    With .Shapes(1).TextFrame.Characters 'テキスト
        .Text = "四角形1" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
    With .Shapes(2).TextFrame.Characters 'テキスト
        .Text = "四角形2" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
    With .Shapes(3).TextFrame.Characters 'テキスト
        .Text = "四角形3" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
End With

End Sub
ループですべて取得する
Sub Sample3()

Dim i       As Long

With ActiveSheet

    For i = 1 To .Shapes.Count
    
        With .Shapes(i).TextFrame.Characters 'テキスト
            .Text = "四角形" & i '文字列
            .Font.Size = 10 '文字のサイズ
            .Font.Bold = True
        End With
        
    Next i

End With

End Sub

 

 

 

オートシェイプ(図形)を追加する

オートシェイプの種類、位置、サイズを指定して追加

下記の例では、矩形を座標 (100, 50) に、サイズ 200x50 で追加しています。 座標やサイズの単位は「ポイント」で指定します。

ActiveSheet.Shapes.AddShape msoShapeRectangle, 100, 50, 200, 50

オートシェイプの種類は下記に一覧があります。

セルと同じサイズで矩形を追加する

' A1 セルに収まるサイズで矩形のオートシェイプを追加
' (見た目としては、セルの背景を塗りつぶしたような感じになる)
With ActiveSheet.Range("A1")
    ActiveSheet.Shapes.AddShape msoShapeRectangle, .Left, .Top, .Width, .Height
End With
' A1:B2 の範囲のセルに収まるサイズでひし形のオートシェイプを追加
With ActiveSheet.Range("A1:B2")
    ActiveSheet.Shapes.AddShape msoShapeDiamond, .Left, .Top, .Width, .Height
End With

セルと同じ高さで横幅だけ指定して矩形を追加する

' B2 のセルに横幅 100 ポイントの矩形を左寄せで追加
With ActiveSheet.Range("B2")
    ActiveSheet.Shapes.AddShape msoShapeRectangle, .Left, .Top, 100, .Height
End With

作成したオートシェイプ(Shape オブジェクト)の参照を取得する

AddShape 関数を Function として呼び出せば、作成された Shape オブジェクトの参照を戻り値として受け取ることができます。 Shape オブジェクトの参照を使って、オートシェイプの書式設定などを行うことができます。

Private Sub SetShapeStyle(ByRef sp As Shape)
    '枠線の設定
    sp.Line.Visible = msoFalse

    '塗りつぶしの設定
    With sp.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 225, 139)
        .Transparency = 0
        .Solid
    End With
End Sub

Sub Main()
    Dim sp As Shape
    With ActiveSheet.Range("A1")
        Set sp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
            .Left, .Top, .Width, .Height)
    End With
    SetShapeStyle sp
End Sub

枠線を設定する

枠あり/なしを切り替える

Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.Line.Visible = msoTrue

枠線の色、透過度を指定する

Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0)
Selection.ShapeRange.Line.Transparency = 0

図形の位置を変更する

絶対位置で指定(左上を 0, 0 として 100, 30 へ移動)

Selection.ShapeRange.Left = 100
Selection.ShapeRange.Top = 30

移動量で指定(左へ50ポイント、下へ30ポイントだけ移動)

Selection.ShapeRange.IncrementLeft -50
Selection.ShapeRange.IncrementTop 30

図形のサイズを変更する

ポイントでサイズ指定

Selection.ShapeRange.Width = 200
Selection.ShapeRange.Height = 50

現在サイズからの倍率で指定(横方向、縦方向にそれぞれ1.5倍)

Selection.ShapeRange.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 1.5, msoFalse, msoScaleFromTopLeft

VBA・図形の書き方

1.図形にテキストを入力する方法

図形にテキストを入力するには「Charactersオブジェクト」の「Textプロパティ」でテキストを入力したり、入力されている文字列を取得することができます。

Charactersオブジェクト」は「Shaepオブジェクト」の「TextFrameプロパティ」で、「TextFrameオブジェクト」を取得した、「Charactersメソッド」で取得できます。

次のように記述すると覚えてください。

また、テキストのFontの設定は「セルのフォントサイズ、種類、表示位置を指定する」をご覧ください。

ActiveSheet.Shapes(1).TextFrame.Characters.Text = "入力したい文字列"

2.図形にテキストを入力するサンプルコード

図形作成と同時にテキストを入力する

まずは図形を作成時と同時にテキストを入力する方法です。

図形は「Shapes.AddShape(タイプ, Left, Top, Width, Height)」で作成します。

Sub Sample1()

'Type,Left,Top,Width,Heightを指定
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50)

    With .TextFrame.Characters 'テキスト
        .Text = "四角形" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
End With

End Sub

作成済みの図形を取得してテキストを入力する

次は作成済みの図形を取得してテキストを入力する方法です。

次のように3つの図形がすでにあるワークシートの図形を操作します。

個別に指定して取得する
Sub Sample2()

With ActiveSheet
    
    With .Shapes(1).TextFrame.Characters 'テキスト
        .Text = "四角形1" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
    With .Shapes(2).TextFrame.Characters 'テキスト
        .Text = "四角形2" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
    With .Shapes(3).TextFrame.Characters 'テキスト
        .Text = "四角形3" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
End With

End Sub
ループですべて取得する
Sub Sample3()

Dim i       As Long

With ActiveSheet

    For i = 1 To .Shapes.Count
    
        With .Shapes(i).TextFrame.Characters 'テキスト
            .Text = "四角形" & i '文字列
            .Font.Size = 10 '文字のサイズ
            .Font.Bold = True
        End With
        
    Next i

End With

End Sub

 

 

 

オートシェイプ(図形)を追加する

オートシェイプの種類、位置、サイズを指定して追加

下記の例では、矩形を座標 (100, 50) に、サイズ 200x50 で追加しています。 座標やサイズの単位は「ポイント」で指定します。

ActiveSheet.Shapes.AddShape msoShapeRectangle, 100, 50, 200, 50

オートシェイプの種類は下記に一覧があります。

セルと同じサイズで矩形を追加する

' A1 セルに収まるサイズで矩形のオートシェイプを追加
' (見た目としては、セルの背景を塗りつぶしたような感じになる)
With ActiveSheet.Range("A1")
    ActiveSheet.Shapes.AddShape msoShapeRectangle, .Left, .Top, .Width, .Height
End With
' A1:B2 の範囲のセルに収まるサイズでひし形のオートシェイプを追加
With ActiveSheet.Range("A1:B2")
    ActiveSheet.Shapes.AddShape msoShapeDiamond, .Left, .Top, .Width, .Height
End With

セルと同じ高さで横幅だけ指定して矩形を追加する

' B2 のセルに横幅 100 ポイントの矩形を左寄せで追加
With ActiveSheet.Range("B2")
    ActiveSheet.Shapes.AddShape msoShapeRectangle, .Left, .Top, 100, .Height
End With

作成したオートシェイプ(Shape オブジェクト)の参照を取得する

AddShape 関数を Function として呼び出せば、作成された Shape オブジェクトの参照を戻り値として受け取ることができます。 Shape オブジェクトの参照を使って、オートシェイプの書式設定などを行うことができます。

Private Sub SetShapeStyle(ByRef sp As Shape)
    '枠線の設定
    sp.Line.Visible = msoFalse

    '塗りつぶしの設定
    With sp.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 225, 139)
        .Transparency = 0
        .Solid
    End With
End Sub

Sub Main()
    Dim sp As Shape
    With ActiveSheet.Range("A1")
        Set sp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
            .Left, .Top, .Width, .Height)
    End With
    SetShapeStyle sp
End Sub

枠線を設定する

枠あり/なしを切り替える

Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.Line.Visible = msoTrue

枠線の色、透過度を指定する

Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0)
Selection.ShapeRange.Line.Transparency = 0

図形の位置を変更する

絶対位置で指定(左上を 0, 0 として 100, 30 へ移動)

Selection.ShapeRange.Left = 100
Selection.ShapeRange.Top = 30

移動量で指定(左へ50ポイント、下へ30ポイントだけ移動)

Selection.ShapeRange.IncrementLeft -50
Selection.ShapeRange.IncrementTop 30

図形のサイズを変更する

ポイントでサイズ指定

Selection.ShapeRange.Width = 200
Selection.ShapeRange.Height = 50

現在サイズからの倍率で指定(横方向、縦方向にそれぞれ1.5倍)

Selection.ShapeRange.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 1.5, msoFalse, msoScaleFromTopLeft