• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで図形同士をコネクタで繋いでいく方法)

VBAで図形同士をコネクタで繋いでいく方法

このQ&Aのポイント
  • VBAを使用して、表から取得した名前の図形をコネクタで順に繋ぐ方法について教えてください。
  • 図形の幅はDistanceの数によって変えられます。
  • 現在は図形の作成やコネクタの繋ぎ方はわかるが、表から名前を取得する方法が分からない状況です。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Sub pre()   With Worksheets.Add     With .Rectangles       .Add(100, 100, 30, 10).Name = "A"       .Add(200, 200, 30, 10).Name = "B"       .Add(300, 300, 30, 10).Name = "C"       .Add(400, 400, 30, 10).Name = "D"     End With     .Range("A1:C5").Value = [{"name","d","next";"A",10,"B";"B",5,"D";"C",7,"-";"D",15,"C"}]   End With End Sub こんなシートがあったとして、 取り敢えず基準となるA列をLoopして順番に処理する感じです。 セル値を読み取って図形を名前で識別します。 Shape型の変数に受けたほうが解りやすいかと思います。 #セル値には図形の名前を指定するのが前提ですが Sub try()   Dim r As Range   Dim s As Shape   Dim e As Shape   Dim c As Shape   Dim i As Long   With ActiveSheet     For Each r In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))       On Error Resume Next       Set s = .Shapes(r.Value)       If Not s Is Nothing Then         s.Width = r.Offset(, 1).Value         Set e = .Shapes(r.Offset(, 2).Value)         On Error GoTo 0         If Not e Is Nothing Then           '*****Connector処理           Set c = .Shapes.AddConnector(msoConnectorElbow, 0, 0, 0, 0)           c.Line.EndArrowheadStyle = msoArrowheadTriangle           With c.ConnectorFormat             .BeginConnect s, 4             .EndConnect e, 2           End With           '(最短経路で再接続)           'c.RerouteConnections           '*****           Set e = Nothing         End If         Set s = Nothing       End If     Next   End With End Sub Connectorについての処理はマクロ記録からでも参考になると思います。

komattsu
質問者

お礼

ありがとうございました! 理想通りの動きで助かりました。 細かいアレンジは自力で頑張ってみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAの図形について

    図形を使用するVBAをはじめて作成中ですが、わからないことがありましたので質問します。 (1)オートシェイプに独自のプロパティーを設定したいのですが良い方法はありますか? (便宜上、NAMEプロパティーで代用しておりますが複数のプロパティを設定したいのです) (2)ONACTIONプロパティに設定しているマクロに対し、 どの図形から実行されたのか知りたいのですが、良い方法はありますか? (3)ある図形からコネクトされている別の図形を特定する方法はありますか? どれかひとつへの回答でもかまいませんので教えてください。

  • EXCEL 直線コネクタを個別に消すマクロ

    お世話になります。EXCELのデータで、ある条件を満たすと、直線コネクタが入力されるようにマクロが組んであります(一つのデータに複数の直線コネクタがあります)。その中で、必要のない直線コネクタだけを消したいと考えています。 (例)   A B C D E F G・・・・・・・ 1   |     | 2   |     |  3   |     | 4   |     | 5   |     | 6   |     | ・    ・ ・ B1~B6とE1~E6にそれぞれ直線コネクタがあり(例だとB1~B6で別れた線の集合ですが、実際は1本の直線です)、その中で、E1~E6の直線コネクタだけをマクロを使って消したい(すでに組んであるマクロの関係で、直線コネクタの番号は毎回変わります)のですが、可能でしょうか? よろしくお願いいたします。

  • 図形の反転

    2次元図形ABCDEFGHがある。頂点の座標をそれぞれA(0,0),B(0,1),C(4,1),D(4,1.5),E(6,1),F(6,0),G(4,-0.5),H(4,0)とする。 この図形を直線y=2x+1に対して反転せよ。 と言う問いなのですが、 答えはA(0,0),B(2,0),C(2,2),D(3,2),E(2,3),F(0,3),G(-1,2),H(0,2)になりますでしょうか。

  • vba

    excel VBAで 今ある列の連続した範囲(仮に$D$2:$D$8とか、$B$3:$B$7)とかがセレクトされているとする。 そのセレクトされている状態でTestマクロで処理し、それが例えば$D$2:$D$8の場合は、順に1,2,3,4,5,6,7というように1番から順にセルの個数まで数字を表示したい。($B$3:$B$7  なら順に1,2,3,4,5) Testマクロの記述は? なおTest2マクロでは、順に1,2,3,4,5,6,7のかわりに(1)、(2)、-- としたい。 Test2マクロの記述は? よろしく 

  • VBAについて教えてください

    VBA初心者です。下記のような処理を行ないたいのですが、このような処理は可能でしょうか? 【sheet2】   A B   1 あ a       2 い b     3 う c 4 え d 5 お e 【sheet1】 (1)   A B   (2) A B   (3) A B   1  あ a    う c     お e   2  い b    え d (処理内容) 【sheet1】にボタンを作成して、それにマクロを関連付けます。 そのボタンを押した結果が、【sheet2】のデータを2行ずつ【sheet1】にコピーして、ボタンを押していくと【sheet1】の結果が(1)⇒(2)⇒(3)⇒(3)と同じとなる。 このような処理を行いたいのですが、どのように作成したらよいのかわかりません。宜しくお願いいたします。

  • 検索VBAについて

    こんばんわ。いつもお世話になっています。 以下の質問をお願いします。 【A表・A_Book.xls】 A      B    C    D 1 製品番号   製品名 2 A-100    あいうえお 3 B-200    かきくけこ 4 B-210    きくけこ 【B表・B_Book.xls】 A      B    C    D 1 製品番号   入荷者    入荷日 2 A-100     太郎    H20.12.24 3 A-110     次郎    H20.12.15 4 A-100     花子    H21.1.4 5 B-200     三郎    H20.12.30 6 B-210     良子    H21.1.6 7 B-200     四郎    H20.12.15     上記のようなWorkBookが二つあり、 下記のような表をA表内の新しいSheetに作成したい。 A      B    C    D 1 製品番号   製品名    入荷者    入荷日 2 A-100    あいうえお   太郎    H20.12.24 3                花子    H21.1.4 4 B-200    かきくけこ   三郎    H20.12.30 5                四朗    H20.12.15 5 B-210    きくけこ    良子    H21.1.6 検索対象商品番号であるA表の『A-100』『B-200』『B-210』をB表より検索し、該当項目をすべて表示させる。 このようなマクロを組みたいのです。 よろしくお願いします。

  • オートシェイプの図形同士を直線でつなぐ方法について

    こんにちは。 Word2003を使用しています。 オートシェイプについての質問をさせてください。 例えば、四角等の図形を2つ挿入して、その2つを直線でつなぎたいとき、四角の辺と直線がぴったりと合う操作方法はないでしょうか? 描画キャンパスを利用すれば、コネクタが使えることは知っているのですが、他人が作成した文書に挿入されているオートシェイプを直したりするときは、描画キャンパスを利用しないことがほとんどなので、できれば描画キャンパスを利用せずに図形同士を直線でぴったりとつなぐ方法が知りたいと思っています。 よろしくお願い致します。

  • Excel VBAのグラフ化自動マクロがうまくできません。

    Sub 自動グラフ作成() For i = 5 To 32 Step 3 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=distance!R18C1:R1009C1" ActiveChart.SeriesCollection(1).Values = "=distance!R18C" & (i + 2) & ":R1009C" & (i + 2) Next End Sub 上記のように表の中の決められたセルからデータを取り出して自動的にグラフを作成してくれるマクロを作成したのですが、奇数個めのグラフは正常に生成されるのですが、偶数個めのグラフになぜか x= y=distance!$M$18:$M$1009 x= y={1} みたいな必要なグラフ以外に上記の2つのグラフを混じってしまいます。これってどこがおかしいのでしょうか? どなたか助けて下さい。 お願いいたします。

  • vba セレクション

    excellでVBAで 今ある列の連続した範囲(仮に$D$2:$D$8とか、$B$3:$B$7)とかがセレクトされているとする。 そのセレクトされている状態をマクロで処理し、そこに例えば$D$2:$D$8の場合は、順に2,3,4,5,6,7,8という数字を表示したい。その回答として Sub test1() For Each c In Selection c.Value = c.Row Next End Sub あるいはSub test2() With Selection .Formula = "=ROW()" .Value = .Value End With End Sub でできるのですが、 順に2,3,4,5,6,7,8という数字を表示のところを(2),(3),ーー,(8)と( )を付けて表示するにはどうすればいいか。

  • エクセルVBAについて

    前回質問させていただきました件の追加機能になります。以前質問させていただきましたマクロが下記のものです。 Sub TESTa() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("C65536").End(xlUp).Row - 1 For C = 1 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 15) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 6) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 14) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 10) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 13) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("F65536").End(xlUp).Row '0欄の確認 For F = E To 1 Step -1 If Worksheets("Sheet2").Cells(F, 6) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub カウントするとデータ個数がSheet1で約120件になりSheet2においては、4倍になりますので約480件になります。 そこで Sheet1において12件ごとに、Sheet2,3,4...としたいのです。 Sh1 NO.1~12がSheet2 Sh1 NO.13~24がSheet3 ... 10枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。