見出し画像

#22 自分流 架空鉄道のダイヤ・運用・時刻表の作り方④【時刻表編】

この記事では、ここまで作成してきたダイヤグラム・運用表を元に、縦型時刻表・駅時刻表を作るために開発したシステム(といってもExcelですが)を紹介します。
なお猛烈に端折って説明しているのでもはや解説の体を成していませんが、架空鉄道のダイヤを作りたいという気持ちがここまで突き動かしているということが伝わればOKです。

○生データ

生データシートです。

このシートに種別や時刻など、列車の情報を入力します。はじめに駅や配置を設定しておきます。なお、縦型時刻表で発着両方の時刻を載せる場合、発車の方の駅名には「発」を冠します。
時刻が1列おきになっているのは、完成した縦型時刻表のシートではセル結合を用いて、2列で1列車となるためです。またこの空白の列を使用した効率化も行なっています。
列車番号と行先に入力した内容は縦型時刻表に表示されます。

種別、両数、始発駅、行先は駅時刻表に表示するために用います。また運転日や備考に特定の記号を入力すると、駅時刻表に反映される内容が変わります(備考欄は準備工事にとどめています)。


時刻欄2行目以降の各セルには以下のような関数が入っています。

=IF(COUNTIFS(D$3,$D$142,D11,"<>・・",D11,<>"),SUM(D11,$D144,E12),"・・")

時刻欄2列目以降
駅間所要時間の自動計算スペースです。

これは、指定した種別が入力されると、始発駅の時刻を元に以降の停車駅の時刻を自動で出せるようにする仕組みです。優等列車は普通列車に追いついてしまって標準の駅間所要時間よりも伸びることがあるためこの機能を使う意味は薄いですが、普通列車は標準の駅間所要時間で走ることが多く、また入力する駅数、列車数も膨大なため自動化しています。通勤時間帯や待避による時間調整は、各駅右隣のセルに時刻を入力することで、自動計算してくれます。


時刻欄の下部です。

時刻欄の下に、もう一つ同じような行列があります。入力欄との違いは、時刻表示が「:」を用いない4桁になっていることです。これは実際に縦型時刻表で見る形式です。入力欄で最初から4桁表示にしていないのは、前述した時刻の自動表示が、時刻形式でないと使えないためです。また、駅時刻表を自動で作成するためにも、4桁の方が都合が良いのです。

以下の関数を用いることで、時刻表示を変更しています。

=IF(ISTEXT(D11),D11,VALUE(TEXT(D11,"hmm")))

○完成時刻表


縦型時刻表の完成形

完成時刻表は前述の通り、2列で1列車となっています。ただし、列車名の欄以外は2列を結合しています。また列車名の欄は行も多めに取っています。これによって、列車名を2列に分けて書くことができます(2列に分けて書かない場合は横にセル結合します)。

行き先は生データから自動入力していきますが、下記の関数を用いることで、6文字まで3行使用して均等に割り付けすることが出来ます(例は1501M列車の行き先行1行目)。

=IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=0,"",IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=1,"",IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=2,LEFT(INDEX(生データ!$B$6:$VK$6,生データ!D$191),1),IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=3,LEFT(INDEX(生データ!$B$6:$VK$6,生データ!D$191),1),IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=4,CONCAT(" ",LEFT(INDEX(生データ!$B$6:$VK$6,生データ!D$191),1)),IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=5,CONCAT(MID(INDEX(生データ!$B$6:$VK$6,生データ!D$191),4,1),LEFT(INDEX(生データ!$B$6:$VK$6,生データ!D$191),1)),IF(LEN(INDEX(生データ!$B$6:$VK$6,生データ!D$191))=6,CONCAT(MID(INDEX(生データ!$B$6:$VK$6,生データ!D$191),4,1),LEFT(INDEX(生データ!$B$6:$VK$6,生データ!D$191),1)))))))))

時刻の欄ですが、生データのセルをそのまま載せるのではなく、INDEX関数を使用して生データの列車を挿入・削除で増減させた時にその変更が反映されるようにしてます。

このような関数が入っています。
INDEX用のスペースです。

=INDEX(生データ!$B$2:$VK$52,生データ!$D194,生データ!D$191)

運転日の行には、生データの運転日の記号によって臨時列車に◆を表示します。ヨーロッパの時刻表のように、曜日で運転日を載せることもできるでしょう。またこの記号によって、条件付き書式で臨時列車を斜体にすることが出来ます。
ちなみに、種別ごとに色付けする仕組みはJR時刻表型のこの縦型時刻表にはありませんが、生データの種別を表示させれば条件付き書式で設定できます(あるいは行の非表示で作れるかもしれません)。

○路線生時刻表

このシートは、駅時刻表に載せる内容の下書きになります。
上部はすでに駅時刻表のような状態になっていますが、装飾はしていません。各時間帯には非表示になっている行が5行あります。

まずは、各時間帯ごとに発車時刻を並べる方法です。
シート中部にFILTER関数で表示された行列があります。これは、駅名欄に表示したい駅名を、運転日に平日/土休日/臨時を含むかどうかを入力することで、生データからその駅の発車時刻を抽出してくれます。
駅名を元に抽出したもの(①)を再度FILTER関数にかけ、運転日別に抽出(②)。もう一度FILTER関数を用いて、分岐駅において支線の列車を表示させないようにします(③)。


①入力された駅名の時刻を抽出
②入力された運転日のものを①から抽出
③ ②のうち、支線が分岐する駅でその支線行きのものを除外。

抽出したものを、今度は時間帯ごとに並べていきます。
時刻欄をFILTER関数で1時間ごとに抽出しますが、ここでSORT関数を併用することで、発車時刻が早い順に並べ直します。そして上部に、その時刻の列車の情報を抽出していきます。

1時間ごとに並べています。列車の情報は前述の③から時刻を元にFILTER関数で抽出します。

関数は以下の通りです。

=SORT(FILTER($C$264:$ID$264,($C$264:$ID$264>=$C291*100)($C$264:$ID$264<$C298*100)),1,1,TRUE)

この関数はその時間と7行下にある1時間後の数字を100倍するという考え方なので、23時・0時・3時台は注意が必要です。23時台の下は2400を入力、0時台はその時間を>=0にして、3時台は下に4時台が来ないので400を入力しています。

上のものに1列おきに空白を挟んでいます。

最下部には、並べ直した時刻&情報を1列おきに再度並べ直しています。これは駅時刻表において、時刻の右隣に記号を付与するためです。


さて、最上部の駅時刻表下書きスペースに戻ります。


ここまでの並べ替えの結果がここに現れます。

各時刻は2×2の4マスを使用しています。左上が種別と行き先、右上が両数、左下が時刻、右下は空欄です。
種別・行き先と両数はHLOOKUPを用いて、参照スペースから検索して表示させています。

=IFERROR(CONCAT(HLOOKUP(D447,$E$168:$AH$169,2,FALSE)," ",HLOOKUP(D450,$E$170:$AK$171,2,FALSE)),"")

ここを変えれば時刻欄の文字や記号も変わります。

分割併合によって途中駅で両数が変わる列車は、両数とは一致しない専用の数値を使用し、IF関数で分岐させます。


参照スペースを元に作成しています。

時刻・凡例の下に、駅時刻表の完成ページに載せる用の凡例を駅によって変えられるようにするためのスペースを置いています。
左側、駅名が並んでいるものは、無印が使われる行先をよりも手前の駅でのみ、凡例に表示されるようにする仕組みです。しかしあまり意味をなしていません。
種別元データは、種別の略称とその正式名称です。count欄では、その駅でその種別が使用されているかどうかを調べ、1つでも使われていたら右端の種別欄で略称と正式名称を表示します。行先元データ、記号元データも同じです。ちなみに、略称を変更してもいいように、TRANSPOSE関数で横並びのものを縦に並び直した上で引用しています(記号元データを除く)。

count欄の関数は以下のとおりです(快タの個数を調べます)。

=COUNTIF($E$4:$BL$167,J179)

○路線駅時刻表

99%関数で自動入力されます。

実際に駅で使用されるような駅時刻表です。
1行目で駅名、「発」を除いた駅名、平日/土休日/臨時を含む含まないの指定を行います。
3行目から、路線生時刻表の時刻をそのまま引用した上で、条件付き書式を使用して種別の色分けをします。
なお、シートを跨いだ引用を簡単にするために、時刻表の下にシート名を入力する欄とINDIRECT関数で時刻を表示していきます

略称で色もつけられます。


各時刻の引数を変えるのは絶望的に手間ですが、シート名を変えれば時刻の部分も全部変わります。

4時台1本目の時刻を表示させる関数は以下のとおりです。

=CONCAT(IFERROR(INDIRECT($D$60&D$61&$E62),""),INDIRECT($D$60&E$61&$E62))

凡例は右側に記載しています。ISBLANK関数を用いながら、路線生時刻表で作成した凡例を、その駅で使用されていなければ=路線生時刻表で表示されていなければ空欄、表示されていればそれをそのまま表示しています。

INDIRECT関数を使用していませんがスピルしてくれるので変更箇所は3箇所で済みます。
路線生時刻表の凡例スペースから引用していることがわかるかと思います。

関数は以下の通りです。

=IF(ISBLANK(路線生時刻表!M178:O178),"",路線生時刻表!M178:O178)

今回はJR東日本の駅掲載時刻表をモデルにしたデザインにしていますが、路線生時刻表の体裁を変更すれば、完成版も容易に変更できます。

自分流架空鉄道の作り方は今回で一応終わりです。今後補足や大きな仕様変更があれば、またまとめていこうかなと思います。

ここまでお読みいただきありがとうございました!

いいなと思ったら応援しよう!