Excelでダイヤグラム:スジを複数引く
少し間が空いてしまいましたが、再開です。
今日のテーマはスジを複数引くことです。
同時に、途中駅発とか、途中駅終着とかの対応もしましょう。
データはこんな感じです。
既に縦横は変数にしてあったので、対応は限定的でした。
Sub スジ(路線() As 路線情報, dataSheet As Worksheet, diagSheet As Worksheet) dlta = 0.000001 For i = 0 To UBound(路線) cl = 3 Do brw = 路線(i).下りデータ行 irw = 1 Do While irw < 路線(i).駅数 And dataSheet.Cells(brw + irw, cl).Value = "" irw = irw + 1 Loop If dataSheet.Cells(brw + irw, cl).Value = "" Then Exit Do End If ox = dataSheet.Cells(brw + irw, cl).Value tx = ox oy = brw + irw irw = irw + 1 Do While irw <= 路線(i).駅数 If dataSheet.Cells(brw + irw, cl).Value = "" Then Exit Do End If dx = dataSheet.Cells(brw + irw, cl).Value tx = tx + TimeSerial(0, 路線(i).駅間(irw - 2), 0) If tx > dx + dlta Then diagSheet.Shapes.AddConnector msoConnectorStraight, _ X座標(ox, diagSheet), diagSheet.Rows(oy + 1).Top, _ X座標(dx, diagSheet), diagSheet.Rows(brw + irw + 1).Top ox = dx tx = dx oy = brw + irw ElseIf tx <= dx - TimeSerial(0, 1, 0) + dlta Then diagSheet.Shapes.AddConnector msoConnectorStraight, _ X座標(ox, diagSheet), diagSheet.Rows(oy + 1).Top, _ X座標(tx, diagSheet), diagSheet.Rows(brw + irw + 1).Top ox = dx tx = dx oy = brw + irw End If irw = irw + 1 Loop If oy <> brw + irw - 1 Then diagSheet.Shapes.AddConnector msoConnectorStraight, _ X座標(ox, diagSheet), diagSheet.Rows(oy + 1).Top, _ X座標(dx, diagSheet), diagSheet.Rows(brw + irw).Top End If cl = cl + 1 Loop Next i End Sub
横はclが増えていく感じで、空白の列に達すると終了するようにします。
縦はデータが見つかったら開始行で、データがなくなったら終了行にします。
このへんになると、VBA書いた瞬間は何かと境界条件とかが怪しくなりがちで、
実行結果を見ながらデバッグします。
これで大丈夫そうです。