Excelで乗り継ぎ時刻表の調整を自動化する方法

このQ&Aのポイント
  • Excelを使用して作成した乗り継ぎ時刻表の調整方法を自動化する手法を解説します。
  • 乗り継ぎ時刻表の作成において、関数やマクロを活用することで手動での調整作業を省きます。
  • セルの結合や文字列の整列に加えて、罫線の追加も自動化するための方法を提案します。
回答を見る
  • ベストアンサー

Excelで乗り継ぎ時刻表の調整を自動で行なう方法

現在、Excelで乗り継ぎ時刻表を作成しているのですが、 バスから電車への乗り換えにかかる時間などにあわせた調整を 以下の作業例のように手動で行なっています。 1.これを関数やマクロなどを用いて手早く処理する方法がありましたら教えてください。 2.また、どう乗り継げば良いのかということを分かりやすく示すために、   セルA2~A4やB2~B4のような場合は文字列上揃えで結合、   セルE1~E2のような場合は文字列下揃えで結合、   さらに画像のような場合は文字列中央揃えや   一部のセルを結合しないといった調整を行なった上で   セルに枠(罫線)をかけるという作業も手動で行なっているのですが、   こちらも自動化する方法がありましたら教えてください。 現在の作業例 A列:甲社バス乗車時刻、B列:甲社バス降車時刻、 C列:電車発車(乗車)時刻、D列:電車到着(降車)時刻、E列:乙社バス乗車時刻・・・ ※甲社バスを降りてから電車への乗り換えは3分、  電車を降りてから乙社バスへの乗り換えは5分を要します。  調整前    A   B   C   D   E 1 11:50 12:00 12:07 12:27 12:36 2 11:55 12:05 12:10 12:30 12:40 3 12:02 12:12 12:14 12:34 12:45  調整後    A   B   C   D   E 1 11:50 12:00 12:07 12:27 (空欄) 2 11:55 12:05 12:10 12;30 12:36 3 (空欄) (空欄) 12:14 12:34 12:40 4 (空欄) (空欄) (空欄) (空欄) 12:45 5 12:02 12:12   (以下省略) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

ちゃんとやろうと思うと、結構面倒ですね。 お望みの形とはちょっと違いますがマクロで作ってみました。 変数宣言も適当ですし、エラー処理も適当なのであくまでもサンプルです。 Sub Sample()   Dim dWork As Date   Dim dDate As Date   nConect1 = 3 '甲バス-電車乗り換え時間(分)   nConect2 = 5 '電車-乙バス乗り換え時間(分)   nTime = 20 '電車所要時間(分)      nDia1 = Cells(Rows.Count, 2).End(xlUp).Row   nDia2 = Cells(Rows.Count, 4).End(xlUp).Row   nDia3 = Cells(Rows.Count, 5).End(xlUp).Row   '各交通機関のダイヤ位置調整   Range("A1:D" & nDia3).Insert Shift:=xlDown   Range("A1:B" & nDia2).Insert Shift:=xlDown      Columns("F:F").Insert Shift:=xlToRight '作業列の挿入      '乙バス   For i = 1 To nDia3     'ソート基準時刻に+2秒(ソート上の都合)     Cells(i, 6) = Cells(i, 5) + 2 / 24 / 60 / 60   Next i      '電車   For j = 1 To nDia2     'ソート基準時刻に+1秒(ソート上の都合)     Cells(j + nDia3, 6) = Cells(j + nDia3, 4) + (nConect2 + 1 / 60) / 24 / 60   Next j      '甲バス   dTrainMax = WorksheetFunction.Max(Range("C:C"))   For k = 1 To nDia1     dDate = Cells(k + nDia3 + nDia2, 2) + nConect1 / 24 / 60     If dDate <= dTrainMax Then       dWork = fSearchDate(dDate, 3, 0)       dWork = fSearchDate(dWork + (nConect2 + nTime) / 24 / 60, 6, 1)     Else       dWork = WorksheetFunction.Max(Range("F:F"))     End If     Cells(k + nDia3 + nDia2, 6) = dWork + k / 24 / 60 / 60   Next k      'F列でのソートと作業列の削除   Range("A:F").Sort Key1:=Range("F1"), order1:=xlAscending   Columns("F:F").Delete Shift:=xlToLeft End Sub Function fSearchDate(dDate As Date, nCol As Long, nType As Long) As Date   Dim dWork() As Variant   Dim dData1 As Date   Dim dData2 As Date   fSearchDate = 0   nTarget = Cells(Rows.Count, nCol).End(xlUp).Row   nCount = 0   For i = 1 To nTarget     If nType = 0 Then       'nCol列からdDate以上の中で一番小さい値を返す       dData1 = Cells(i, nCol)       dData2 = dDate     Else       'nCol列からdDate以下の中で一番大きい値を返す       dData1 = dDate       dData2 = Cells(i, nCol)     End If        '誤差の発生を防ぐために一旦「hh:mm:ss」にして比較     If CDate(Format(dData1, "hh:mm:ss")) >= CDate(Format(dData2, "hh:mm:ss")) Then       ReDim Preserve dWork(nCount)       dWork(nCount) = Cells(i, nCol)       nCount = nCount + 1     End If   Next i   If nCount > 0 Then     If nType = 0 Then       fSearchDate = Application.WorksheetFunction.Min(dWork())     Else       fSearchDate = Application.WorksheetFunction.Max(dWork())     End If   End If End Function

kumoyama
質問者

お礼

>お望みの形とはちょっと違いますが とんでもありません。おかげさまで道が見えてきました。 回答の締め切りはもう少し先にしたいと思いますが、 手探りの状態から脱却できました。 お早い回答をありがとうございました。

kumoyama
質問者

補足

思いつきですみませんが、フィルタ機能では無理でしょうか?

関連するQ&A

  • エクセルで10分ごとの時刻の表示 方法

    エクセルで表の送迎表をつくろうかと思っています B2セルに8:20: C2セルに8:30 D2セルに8:40 E2セル8:50 F2セルに9:00 G2セルに9:10 H2セルに9:20…… といったように 2行目に自動的に10分ごとの時刻を入力していく方法は あるのでしょうか?もし あればその方法をおおしえください また 1分ごとの方法も教えて頂けると助かります また その方法があったとして E2セルのみ8:49にしたい場合 その入力方法もあれば教えて頂けるとありがたいのですが…… 基本的なご質問で申し訳ありません  表のイメージとしては 2行目に時刻を10分ごとに入力し A列にお客様名 2行目のB列から時刻 B3 C4などには ドライバー名を入れたいと考えています 何とか あしたまでに 仕上げたいので アドバイス宜しくお願いいたします OSは VISTA でOFFICE2003です

  • エクセルの表作成にあたって

     お世話になります。  エクセルで下記のような表を作成したいのですが、ご教授お願いいたします。  A列には元々時間が入っており、B列にはその時間の数値が入ります。 A1が10時、B1の数値が10 A2が11時、B2の数値が12 A3が12時、B3の数値が40 A4が13時、B4の数値が23 A5が14時、B5の数値は未入力(空欄) A6が15時、B6の数値は未入力(空欄)  A列では元々時間が入っておりますが、実際にその時間が来た時にB列に数値を手入力して行きます。  任意のセルに上記の数値の最新データを表示したい。上記の場合はB4の数値23を任意のセルに表示したい。  時間が過ぎていくことにより、常に最新のB列の数値データを取得して任意のセルに表示するような方法を教えて下さい。 (つまりB列で空欄の一つ前のデータを自動的に取得したい。) 【補足】  最新数値データの下は常に空欄になっています。  説明不足な点があれば補足いたします。  これが出来れば非常に助かります。よろしくお願いいたします。

  • Excel 時刻の計算方法

    Excel 時刻の計算方法 セルA 10/26/2010 06:54:32 セルB 10/27/2010 12:34:56 このような状態で、セルCにhh:mm:ss形式でAの時刻からBの時刻までにかかった時間を表示させたいのですが どうすればいいのでしょう

  • エクセルで時刻を自動入力する方法

    教えてください。 エクセルで、たとえばA1のセルに自分の名前を入力したときB1にそのときの時刻が入力される。5分後、A2に自分の名前を入力したときB2にその時の時刻が自動で入力される。ただしこの時A1の時刻はA2に自分の名前を入力したときのままで固定されている。この操作を100回くらい繰り返しても時刻は入力したときのまま。 上記内容はエクセルでどうやればできるのでしょうか?

  • 西鉄バスの時刻表ってタダでもらえるのですか?

    買い物や図書館行く場所によってなど 行く場所によって バスの乗り換えが必要です。 そこで冊子のようになった時刻表が欲しいのですが (電車の時刻表は 小さな冊子になっているものを もらったことはありますが) バスの時刻表は もらえるのでしょうか?

  • こんな表のExcelグラフの作成方法について

    下記のような表はどのようにグラフを作ればよいでしょうか。 表の範囲はA1からB7です。 B2に"回数"と入力 A2とA3、A4とA5、A6とA7はそれぞれ結合されています。 B2とB3、B4とB5、B6とB7はそれぞれ結合されています A2とA3の結合されたセルに"aさん" A4とA5の結合されたセルに"bさん" A6とA7の結合されたセルに"cさん" Bの列も同様な形でたてに"5","7","9"が入っています。        回数 aさん    5 bさん    7 cさん    9 グラフを作ろうとしましたが結合されたセルであるにもかかわらず、グラフを作ると凡例が"aさん"の行以下6列分出来ています。 このような場合にグラフをつくれる方法があれば教えてください。 よろしくお願いいたします。

  • 勤務表の始業・終業時刻を30分単位に

    いろいろな始業・終業時刻に対応できる、30分単位で自動計算されるエクセル勤務表を作成しています。 例えばA1セルに定時開始時刻の「8:40」B1セルに定時終了時刻の「17:10」と記入し、そこを基準に毎日の始業時間を30分単位で丸めたいときにはどのようにすればよいのでしょうか? 定時は変更されることがあるので、A1とB1セルを変更してもそこを起点に30分単位で丸められるような勤務表を作りたいです。 A列に実際のタイムカード始業時刻 B列に実際のタイムカード終業時刻 C列に、A列の時刻をA1セルの時間を基準に30分単位で丸めたもの D列に、B列の時刻をB1セルの時間を基準に30分単位で丸めたもの 勤務時間、残業時間等は、D列とC列の時間を使って計算します。 FLOOR関数は0:00を基準とする丸め関数ですよね? いい方法がありましたら、よろしくお願いします。

  • エクセルの時刻入力(now)関数を自動更新について

    ご質問させてください。 うまく表現できるかわかりませんが、エクセルにお詳しい方、ご教授くださいませ。 NOW関数をセルに入力して、ファイルを次回開くとその時刻となってしまいますが、 自動更新させずに、値としてセルに残す方法はご存じありませんか? ご存じの方いらっしゃいましたら、ご教授くださいませ。         A    B    C    D 1     開始時刻         終了時刻       所要時間       入力品名         ⇓             ⇓               ⇓ 2 『=IF(D2="","",NOW())』  『=IF(A2="","",A2+1/1440)』 『=B2-A2』    3 ・・・・・・以後続く。 という感じで、D2に品物名を入れたら、A列に開始時刻 B列に終了時刻『1分』 C列に所要時間を自動入力し、その開始時刻(A列)を以後反映させないように(次にファイルを開いても数値が変わらない。)ようにするには、どのようにしたらよいでしょうか? エクセルは初心者の域をでませんので、悩んでおります。ぜひ、ご教授くださいませ。 よろしくお願いいたします。 ※ちなみに、エクセル2003です。                                    

  • エクセルでシフト表を作りたいのですが。

    エクセル初心者です。以下のように1ヶ月のシフト表を作ったのですが、時間帯別の人数を出したいと思っています。色々調べてみたのですがうまくいきません。 ちなみに12時~14時と18時~20時の稼働人数を出したいと思っております。 詳しい方おられましたら、よろしくお願い致します。    A列     B列     C列      D列     E列 ・ ・ ・ ・ BJ列   BK列 1          5/1              5/2               5/31 2         開始時刻  終了時刻   開始時刻  終了時刻   開始時刻  終了時刻 3  Aさん   8:30      17:00   4  Bさん   17:00     25:30  5  Cさん   12:00     21:00 ・   ・       ・        ・ ・   ・       ・        ・ ・   ・       ・        ・ 29 Dさん   18:00      23:00

  • Excelの除算の和の方法について

    Excelの関数を用いて計算ファイルを作成しています。 例えば、 =SUMPRODUCT(A1:G1/A2:G2) とすれば、 =A1/A2+B1/B2+C1/C2+D1/D2+E1/E2+F1/F2+G1/G2 の意味となりますが、 「A1とB1」「A2とB2」を「セルを結合して・・・」数値を入れた場合、 結果は「#DIV/0!」となります。 結合した際の分母にくる「B2=空白=0」と認識しているためと推察しています。 これを改善して数値を出す方法はありますでしょうか。 計算式以外に文章等を入れ込んでいるため、セルを結合してセルの大きさを調整する必要があります。 これをしないと見た目が汚い書類になってしまいます。 ご指導の程、よろしくお願いいたします。

専門家に質問してみよう