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書いた瞬間は何かと境界条件とかが怪しくなりがちで、
実行結果を見ながらデバッグします。
これで大丈夫そうです。