[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『図形と図形を矢印でつなげる』(koko)
お世話になります。 図形を作成して図形のテキストをセルに入力された値にするコードです。 調べ調べ、どうにか書けたのですが 次にこの図形達を矢印の図形 (直線矢印コネクタ 1707)で結びたいのですが、全く進みません。 どう書けばいいのかお教え下さい。 宜しくお願い致します。
Sub 図形作成()
Dim i As Integer
Dim j As Integer
Application.ScreenUpdating = False
For j = 2 To 11
For i = 4 To 15
Cells(j, i).Select
If Cells(j, i).Value = "" Then
Else
ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, ActiveCell.Left, ActiveCell.Top, 90#, 40#).Select
Selection.Characters.Text = ActiveCell.Value
Selection.ShapeRange.Line.Weight = 1.2
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 1
With Selection.Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 11
.ColorIndex = 1
End With
End If
Next i
Next j
Range("c1").Select
Application.ScreenUpdating = True
End Sub
OS:XP エクセル2007
残念なことに2007ではマクロの記録でここら辺の記録が取れないようですね。 (2010で復活したようです。) ネットで検索すれば例はありますので、「直線矢印コネクタ」という正確な用語が 分かっているのでしたら、調べれば参考になるコードは見つかると思います。
今回はどのように線をつなぐかの説明がありませんでしたので、単純に縦につないだ例です。
Sub 図形作成()
Dim r As Long
Dim c As Long
Dim sSh As Shape
Dim eSh As Shape
Dim cRng As Range
Application.ScreenUpdating = False
For c = 4 To 15
Set sSh = Nothing
For r = 2 To 11
Set cRng = Cells(r, c)
If cRng.Value <> "" Then
Set eSh = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, cRng.Left, cRng.Top, 90#, 40#)
eSh.TextFrame.Characters.Text = cRng.Value
eSh.Line.Weight = 1.2
eSh.Fill.ForeColor.SchemeColor = 1
With eSh.TextFrame.Characters.Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 11
.ColorIndex = 1
End With
If Not sSh Is Nothing Then
ConnectShape sSh, eSh
End If
Set sSh = eSh
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Sub ConnectShape(startSh, endSh)
Dim lineShape
Set lineShape = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 416.25, 120#, 3#, 35.25)
lineShape.Flip msoFlipHorizontal
lineShape.Flip msoFlipVertical
lineShape.ConnectorFormat.BeginConnect startSh, 3
lineShape.ConnectorFormat.EndConnect endSh, 1
lineShape.Line.EndArrowheadStyle = msoArrowheadTriangle
End Sub
(Mook)
Mookさんへ 説明不足で大変申し訳ありません。 ご提示のコードは線が縦ですが この線を横にしていただけないですか? msoConnectorStraight(この直線)を矢印線(→)に帰るのは調べれば 何とかなりそうな気がしますが 縦を横に変えるのは自信ありません。 コードの加工にチャレンジもしないで大変心苦しいのですが この機を逃さずにコードを確保したいという気持ちが先に走っています。 (koko)
>コードの加工にチャレンジもしないで大変心苦しいのですが >この機を逃さずにコードを確保したいという気持ちが先に走っています。 まぁ、ある意味正直なのかもしれませんがw、やはりコードを理解しましょうよ。
線を結んでいるのは
lineShape.ConnectorFormat.BeginConnect startSh, 3
lineShape.ConnectorFormat.EndConnect endSh, 1
の部分ですが、
最後の引数が接続位置です。
1・・・図形の上の点
2・・・図形の左の点
3・・・図形の下の点
4・・・図形の右の点
なので、どう変えればいいかはわかりますよね?
上の行が開始のShape、下の行が終端のShapeです。
あとは、縦ではなく横に処理するために
For c = 4 To 15
:
For r = 2 To 11
:
を
For r = 2 To 11
:
For c = 4 To 15
:
のように入れ替えて完成です。
分からない点はフォローしますから、がんばってみてください。
〜〜〜〜
追伸:
先のコードで矢印の修正はしています。
lineShape.Line.EndArrowheadStyle = msoArrowheadTriangle
がそれです。
(Mook)
Mookさんへ 自力ではなく、教えてもらっての結果とはいえ 加工ができました これで作業時間が格段に短縮できます。誠に助かります。 有難うございました。 (koko)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.