オートシェイプの直線を引いてみます。まずは、マクロ記録してみましょう。

Sub Macro1()
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 79, 31, 175, 63).Select
End Sub
直線を引くには、ShapesコレクションのAddConnectorメソッドを使います。直線は"コネクタ"のひとつなんですね。AddConnectorメソッドの引数は、最初に「どんな種類のコネクタ」を引くかという、コネクタの種類を定数で指定します。指定できる定数は、次のとおりです。
| 定数 | 値 | 種類 |
|---|---|---|
| msoConnectorStraight | 1 | 直線コネクタ |
| msoConnectorElbow | 2 | カギ線コネクタ |
| msoConnectorCurve | 3 | 曲線コネクタ |
今回は「直線」ですから、定数msoConnectorStraightです。
AddConnectorメソッドでは、直線の始点と終点を、4つの数値で指定します。
AddConnector(種類, BeginX, BeginY, EndX, EndY)
「BeginX」と「BeginY」は始点、「EndX」と「EndY」は終点です。「~X」はワークシートの左端からの距離を表し、「~Y」は上端からの距離を表します。

「始点」は、直線を引くとき、最初にマウスのボタンを押し下げるところです。ワークシートの画面上で"左端"になるとは限りません。直線を引くときに、右から左にドラッグすれば、"右端"が「始点」になります。
「画像を挿入する」や「画像を揃える」のように、こうした図形やオートシェイプなどを純粋な数値で指定することは希です。一般的には、どこかのセルに合わせるか、既存の図形やオートシェイプに合わせます。ここでは、セル範囲B2:C4内に、斜めの直線を引いてみましょう。
まず始点を考えます。これは簡単ですね。セルB2の左上です。セルB2の「ワークシート内で左端からの距離」は、Leftプロパティで分かります。同様に「ワークシート内で上端からの距離」はTopプロパティです。
Sub Macro2()
ActiveSheet.Shapes.AddConnector msoConnectorStraight, Range("B2").Left, Range("B2").Top, EndX, EndY
End Sub
さて、右下の終点はどうでしょう。普通に考えれば、終点はセルC4の"右下"です。しかし、セル(Rangeオブジェクト)には、左を表すLeftプロパティと上を表すTopプロパティしかありません。な~に、難しく考えることはありません。セルC4の右下って、セルD5の左上と同じですよね。
Sub Macro2()
ActiveSheet.Shapes.AddConnector msoConnectorStraight, Range("B2").Left, Range("B2").Top, Range("D5").Left, Range("D5").Top
End Sub

もし、始点や終点の位置を一度変数に入れて、AddConnectorメソッドにはその変数を指定するようなときは、格納する変数を単精度浮動小数点型(Single)で宣言してください。
Sub Macro3()
Dim BeginX As Single ''始点(左からの距離)
Dim BeginY As Single ''始点(上からの距離)
Dim EndX As Single ''終点(左からの距離)
Dim EndY As Single ''終点(上からの距離)
BeginX = Range("B2").Left
BeginY = Range("B2").Top
EndX = Range("D5").Left
EndY = Range("D5").Top
ActiveSheet.Shapes.AddConnector msoConnectorStraight, BeginX, BeginY, EndX, EndY
End Sub
セルの四隅ではなく、セルの途中から引いてみましょう。ここでは、次のような直線を引きます。

始点の左端は、セルB2の左端です。始点の高さは、セルB2の中間にしました。終点の上端は、セルC5の上端で、終点の右端は、セルC5の中間です。まぁ、これはコードを見れば分かるでしょう。
Sub Macro4()
Dim BeginX As Single ''始点(左からの距離)
Dim BeginY As Single ''始点(上からの距離)
Dim EndX As Single ''終点(左からの距離)
Dim EndY As Single ''終点(上からの距離)
BeginX = Range("B2").Left
BeginY = Range("B2").Top + Range("B2").Height / 2
EndX = Range("C5").Left + Range("C5").Width / 2
EndY = Range("C5").Top
ActiveSheet.Shapes.AddConnector msoConnectorStraight, BeginX, BeginY, EndX, EndY
End Sub
応用すると、こんなこともできますね。
Sub Macro5()
Dim i As Long, FC As Range
For i = 2 To 9
Set FC = Range("C2:C9").Find(What:=Cells(i, 1), Lookat:=xlWhole)
If Not FC Is Nothing Then
ActiveSheet.Shapes.AddConnector msoConnectorStraight, _
Cells(i, 1).Offset(0, 1).Left, _
Cells(i, 1).Top + Cells(i, 1).Height / 2, _
FC.Left, _
FC.Top + FC.Height / 2
End If
Next i
End Sub
