直線の設定


ちょっと難しい仕組みを書きます。

ActiveSheet.Shapes.AddConnector

で挿入されるのは、Shapeオブジェクトです。Shapeオブジェクトには、このページで取り上げている"直線"だけでなく、"四角形"や"テキストボックス"などもあります。そうしたShapeオブジェクトの中は、さらに多くのパーツ(オブジェクト)に分かれています。"四角形"や"テキストボックス"などの枠線は、LineFormatオブジェクトで表されます。"直線"は"四角形"や"テキストボックス"などとは違い、線しかありません。したがって、"直線"自体がLineFormatオブジェクトといえます。そのLineFormatオブジェクトは、ShapeオブジェクトのLineプロパティで表されます。

ActiveSheet.Shapes.AddConnector(…).Line  ''←LineFormatオブジェクト

最後の「LineFormatオブジェクトは、ShapeオブジェクトのLineプロパティで表されます」というのは、多くの人が「???」と感じるでしょう。そんな方は、難しく考えずに「.Lineって書けば、直線の書式などを設定できるんだ」と思ってください。

太さ

直線の太さは、Weightプロパティに数値を指定します。

Sub Macro1()
    Dim BeginX As Single, BeginY As Single
    Dim EndX As Single, EndY As Single
    Dim i As Long
    For i = 1 To 20
        BeginX = Cells(i, 2).Left
        BeginY = Cells(i, 2).Top + Cells(i, 2).Height / 2
        EndX = Cells(i, 3).Left
        EndY = BeginY
        ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
            BeginX, BeginY, EndX, EndY).Line.Weight = Cells(i, 1)
    Next i
End Sub

直線の色は、ForeColorのRGBプロパティにRGB値を指定します。

Sub Macro2()
    Dim BeginX As Single, BeginY As Single
    Dim EndX As Single, EndY As Single
    BeginX = Range("B2").Left
    BeginY = Range("B2").Top + Range("B2").Height / 2
    EndX = Range("C2").Left
    EndY = BeginY
    With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
            BeginX, BeginY, EndX, EndY).Line
                .Weight = 5
                .ForeColor.RGB = RGB(255, 0, 0)
    End With
End Sub

実線/点線

DashStyleプロパティに次の定数を指定します。

定数 種類
msoLineSolid 1
msoLineSquareDot 2
msoLineRoundDot 3
msoLineDash 4
msoLineDashDot 5
msoLineDashDotDot 6
msoLineLongDash 7
msoLineLongDashDot 8
msoLineLongDashDotDot 9
msoLineSysDash 10
msoLineSysDot 11
msoLineSysDashDot 12
Sub Macro3()
    Dim BeginX As Single, BeginY As Single
    Dim EndX As Single, EndY As Single
    BeginX = Range("B2").Left
    BeginY = Range("B2").Top + Range("B2").Height / 2
    EndX = Range("C2").Left
    EndY = BeginY
    With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
            BeginX, BeginY, EndX, EndY).Line
                .Weight = 3
                .DashStyle = msoLineSysDot
    End With
End Sub

一重線/多重線

Styleプロパティに次の定数を指定します。

定数 種類
msoLineSingle 1
msoLineThinThin 2
msoLineThinThick 3
msoLineThickThin 4
msoLineThickBetweenThin 5
Sub Macro4()
    Dim BeginX As Single, BeginY As Single
    Dim EndX As Single, EndY As Single
    BeginX = Range("B2").Left
    BeginY = Range("B2").Top + Range("B2").Height / 2
    EndX = Range("C2").Left
    EndY = BeginY
    With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
            BeginX, BeginY, EndX, EndY).Line
                .Weight = 5
                .Style = msoLineThinThin
    End With
End Sub

矢印

矢印は、直線の"始点"と"終点"に、それぞれ設定できます。

【始点に設定する矢印】

  • BeginArrowheadStyle プロパティ
  • BeginArrowheadLength プロパティ
  • BeginArrowheadWidth プロパティ

【終点に設定する矢印】

  • EndArrowheadStyle プロパティ
  • EndArrowheadLength プロパティ
  • EndArrowheadWidth プロパティ

「○○Style」は、矢印の種類(スタイル)を指定します。

定数 種類
msoArrowheadNone 1 矢印なし
msoArrowheadTriangle 2 三角矢印
msoArrowheadOpen 3 開いた矢印
msoArrowheadStealth 4 鋭い矢印
msoArrowheadDiamond 5 ひし型
msoArrowheadOval 6 円形矢印

「○○Length」は、矢印の長さを指定します。

定数 長さ
msoArrowheadShort 1 短い
msoArrowheadLengthMedium 2 普通
msoArrowheadLong 3 長い

「○○Width」は、矢印の幅を指定します。

定数
msoArrowheadNarrow 1 狭い
msoArrowheadWidthMedium 2 普通
msoArrowheadWide 3 広い