[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『図形と図形を矢印でつなげる』(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.