線を引いてみた
今日は、線を引くところまでを目指します。
まずは、横軸です。
4時から翌日2時までの枠を作ります。
Excelの列を10分きざみに見立てて、1時間おきに罫線を入れて行きます。
列の幅は試行錯誤で決めました。
Sub 時刻設定(cnt) Columns(1).ColumnWidth = 14 cl = 2 For hr = 4 To 25 Cells(2, cl).Value = hr Cells(2, cl).HorizontalAlignment = xlLeft Range(Cells(2, cl), Cells(cnt, cl)).Borders(xlEdgeLeft).LineStyle = xlContinuous For i = 1 To 6 Columns(cl).ColumnWidth = 5.66 cl = cl + 1 Next Next Range(Cells(2, cl), Cells(cnt, cl)).Borders(xlEdgeLeft).LineStyle = xlContinuous End Sub
次に縦軸です。
よくある方法は駅間の距離に基づいて決めるのですが、実はそれだと駅間が短い時に、ちょっとスロー走行することが多くて、その結果ダイヤが詰まり気味になります。
今回は駅間を所要時間で作ってみました。
そうすると直線になりやすくて、見た目が整います。
Sub 駅間設定(dataSheet As Worksheet) rw = 2 Range(Cells(rw, 1), Cells(rw, 6 * 22 + 1)).Borders(xlEdgeBottom).LineStyle = xlContinuous rw = rw + 1 Do While dataSheet.Cells(rw, 1).Value <> "" Rows(rw).RowHeight = dataSheet.Cells(rw, 2).Value * 5 Range(Cells(rw, 1), Cells(rw, 6 * 22 + 1)).Borders(xlEdgeBottom).LineStyle = xlContinuous rw = rw + 1 Loop End Sub
そして、スジを引きます。
誤差の少ない時は一本の直線で引けるように、ちょっと工夫しています。
X座標はどうしても誤差が出るので、できるだけ誤差を作らないように列の座標を基準に決めています。
Sub スジ(dataSheet As Worksheet) rw = 2 ox = dataSheet.Cells(rw, 3).Value tx = ox oy = Rows(rw + 1).Top rw = rw + 1 Do While dataSheet.Cells(rw, 3).Value <> "" dx = dataSheet.Cells(rw, 3).Value dy = Rows(rw + 1).Top tx = tx + TimeSerial(0, dataSheet.Cells(rw, 2).Value, 0) If tx > dx Or tx <= dx - TimeSerial(0, 1, 0) Then ActiveSheet.Shapes.AddConnector msoConnectorStraight, X座標(ox), oy, X座標(tx), dy ox = dx tx = ox oy = dy End If rw = rw + 1 Loop If oy <> dy Then ActiveSheet.Shapes.AddConnector msoConnectorStraight, X座標(ox), oy, X座標(dx), dy End If End Sub Function X座標(tm) h = Hour(tm) If h < 4 Then h = h + 24 End If m = Minute(tm) dm = m \ 10 rm = m Mod 10 cl = (h - 4) * 6 + dm bs = Columns(cl + 2).Left of = (Columns(cl + 3).Left - bs) * rm / 10 X座標 = bs + of End Function
結果はこんな感じです。
さて、スジらしくなりました。
この後は、後から改造しやすくするために、ソースの見直しをしたいと思います。