経路時間を表にまとめる際「1時間18分」など日本語入力されているものを
時間が長い・短い順にしようとしてフィルタをつけると 「思う感じに並び替えられれない」
そこで分に直して計算した列をつけようと思って調べたのでメモ。
#計算工程
セルに「1時間18分」と、半角数字と漢字で時間、漢字で分が入ってる場合、分に戻すには
1. セルに入力されてる文字列から「時間」と表示される前までの数値をとってくる
2. 1の後、『「時間」の後ろ』から『分』が出てくるまでの数値をとってくる
3. 1に60かけて2と足し合わせる
といった工程をすれば良い。
#前提として
大前提として例外処理は考えずにスタートする。とりあえず関数組み合わせてみてその後に考えられる入力パターンを考慮する
1つ目 文字列の左からX文字をとってくる関数はLEFT()。
引数は2つで第一引数は対象の文字列、第二引数は文字数。
LEFT("1時間15分",2)
とすると「1時」がとってこれる。なお、LEFT(1時間,2)とするとエラーとなるので、文字列は""でかこっておく必要がある。
2つ目 右からX文字をとってくる関数はRIGHT()。
使い方はLEFTと同じで引数の指定も(対象文字列,文字数)
なお、LEFTとRIGHTの第二引数は省略可能だが省略したときに得られるのはLEFTは先頭1文字、RIGHTは最後1文字。
3つ目「時間」「分」が出てくるまでを指定しないといけないのでFIND()を使う
FINDの引数は3つで第一が指定したい文字列、第二が対象文字列(分に戻したい対象セル)、第三引数が開始位置
第三引数は省略でき、デフォルトは1が指定されている。
FIND("時間",A2)とする「2」と返ってくる。
#本題
セルA2に「1時間18分」と入っているとする。
・工程1「時間」までの数値をとる
B2を計算結果が表示されるセルとする。セルB2に
LEFT(A2,FIND("時間",A2)-1)
と入力すると1が返ってくる。
・工程2 時間の後ろから分までの数値をとる
1文字目から考えると「"時間"が出てから文字をとっていって"分"が出る前までの文字をとる」だが、
工程2でやりたいのは単純に考えると 「分の部分の数値をとりたい」 なので右から3文字とって分を消せばいい
そこでB2に
LEFT(RIGHT(A2,3),2)
と入力する。RIGHTで右から3文字とってとってきた「XX分」の左2文字をとる。
そうすると18が返ってくる。
・工程3 とってきた時間と分を足して計算
B2に
LEFT(A2,FIND("時間",A2)-1)*60+LEFT(RIGHT(A2,3),2)
とすれば78が得られる。