- ベストアンサー
VBAで図形同士をコネクタで繋いでいく方法
end-uの回答
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についての処理はマクロ記録からでも参考になると思います。
関連する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の直線コネクタだけをマクロを使って消したい(すでに組んであるマクロの関係で、直線コネクタの番号は毎回変わります)のですが、可能でしょうか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- 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つのグラフを混じってしまいます。これってどこがおかしいのでしょうか? どなたか助けて下さい。 お願いいたします。
- ベストアンサー
- Visual Basic
- 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枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。
- 締切済み
- オフィス系ソフト
お礼
ありがとうございました! 理想通りの動きで助かりました。 細かいアレンジは自力で頑張ってみます。