質問: TestID 'A列のみ End If Next End With End Sub コード ```
回答: 現状出来ている部分を少し扱いやすいよう修正し、コード中で????となっていた色変更部分を補完しました。 ``` Enum COL ID = 2 LV = 3 End Enum ' プロジェクトネットワーク図作成マクロ Sub test() ' 変数宣言 Dim RoopCount As Long ' ループカウンタ Dim ID_Count As Long ' ループカウンタ Dim LastRow As Long ' ID最終行取得 Dim TestID As String ' ID取得 With Worksheets("Sheet2") ' B列が空欄であればfor文を抜ける ⇒ 正しくは、B列の最終データ行までループ処理を行う RoopCount = .Cells(Rows.Count, COL.ID).End(xlUp).Row Dim clShapes As New Collection For ID_Count = 4 To RoopCount ' B列にIDが記入されていれば処理を行う If .Cells(ID_Count, COL.ID).Value <> "" Then ' 表のB列試験ID最終行を取得 LastRow = .Cells(Rows.Count, COL.ID).End(xlUp).Row ' B列試験ID取得 TestID = .Cells(ID_Count, COL.ID).Value ' オブジェクト追加 'Set myDocument = Worksheets(2) 'myDocument.Shapes.AddShape msoShapeRoundedRectangle, 50, 50, 88, 37 '' シェイプを選択 'ActiveSheet.Shapes(1).Select Dim shp As Shape Set shp = .Shapes.AddShape(msoShapeRoundedRectangle, 50, 50, 88, 37) '文字色の設定 shp.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbBlack shp.TextFrame2.VerticalAnchor = msoAnchorMiddle shp.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter '罫線色の設定 shp.Line.ForeColor.RGB = vbGreen 'vbGreenのような予約語でなく、RGB(0,255,0)という記述も可能です '塗りつぶしの設定 shp.Fill.ForeColor.RGB = vbWhite '文字列を入れる 'Selection.Characters.Text = TestID 'A列のみ shp.TextEffect.Text = TestID 'A列のみ '作成したシェイプをコレクションに追加しておく clShapes.Add shp, TestID End If Next '矢印を引く(ルールはわからないのでとりあえず"A001"から"A002"への引き方) Dim shp1 As Shape Dim shp2 As Shape Dim shpAllow As Shape Set shp1 = clShapes("A001") Set shp2 = clShapes("A002") '矢印の作成 Set shpAllow = .Shapes.AddConnector(msoConnectorStraight, 353.25, 51.25, 384.5, 88) shpAllow.Line.EndArrowheadStyle = msoArrowheadOpen '始点の設定(A001の右辺) shpAllow.ConnectorFormat.BeginConnect shp1, 4 '終点の設定(A002の左辺) shpAllow.ConnectorFormat.EndConnect shp2, 2 End With End Sub ``` 他にも内容に応じて配置を変更したり、矢印を設置する必要があるのだと思いますが、配置のルールも提示いただいていないようですし、あとは自力で頑張ってみてください。 (矢印の引き方はサンプルとして1本だけ記述しました。) (配置の方法は他の方からサンプルコードが提示されているようですので、組み合わせてご利用ください。) 「開発」メニューの中にある「マクロの記録」で操作内容をマクロ化すると開発がはかどる場合があります。 今回でいうと、シェイプを作成してから「マクロの記録」を開始し、シェイプの色や位置などを変更して記録終了すると、シェイプの色や位置を変更した操作を自動的にVBAで作成してくれます。 (一度にたくさんの操作をしたり余分な操作をしたりすると、目的の命令がどこにあるのかわかりにくくなるので、細かい単位で記録することをお勧めします。) 参考になれば幸いです。