- ベストアンサー
エクセルで、時刻の差を数値として認識したいのです。教えてください。
こんにちは。教えて下さい。 時刻を記録してエクセルに落としたのですが、それらの 一つ一つの時刻の差を数値として認識したいのです。 分かりにくい説明ですみませんが、例えば、 A1 12:34:56:70(12時34分56秒70) A2 12:34:57:80(12時34分57秒80) A3 12:34:58:90(12時34分59秒90) の時刻だったとすると、A1とA2の差は1.10秒で、A2とA3は2.10秒です。 これらの時間の差を数値として、(A1とA2の差だと1.10と言うように) 表示させるには、どの様な数式なら出来るでしょうか? 秒以下も大事で、100分の1秒まで細かく出したいのです。 また、記録した時刻も、1秒間で8セル分ほど細かく記録して、データも1万以上あり、 一つ一つ手直しするのは大変です。 どなたか、お分かりになる方がいらっしゃいましたら教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
12:34:56:70というのは標準の入力の仕方ではないのでそのままでは計算ができません。入力してあるデータを標準のスタイルにして計算に使用することですね。 例えばA1セルとA2セルの時間差をB2セルに表示させるとしたら、また、そのような計算を仮に10000行させるとしたら次のようにすればよいでしょう。 B2セルには次の式を入力します。 =IF(A2="","",VALUE(LEFT(A2,LEN(A2)-3)&"."&RIGHT(A2,2))-VALUE(LEFT(A1,LEN(A1)-3)&"."&RIGHT(A1,2))) つぎにB2セルをコピーします。 名前ボックスにはB2と表示されていることでしょうが名前ボックスにはB2:B10000と入力しEnterキーを押します。これによりB2セルからB10000セルが範囲として選択されます。そこで、右クリックで「貼り付け」を行います。 その後にB列を選択して右クリックし、「セルの書式設定」の「表示形式」のタブで「ユーザー定義」を選び、h:mm:ss.00と入力します。なお、24時間を超えることが考えられる場合には[h]:mm:ss.00と入力します。 これで、お示しのデータではB2セルに00:00:01.10が表示されますね。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 マクロを作っておきました。 これで、差を出せるはずです。あくまでも、テキストデータのみで、:が3つあるものに対して変換します。途中で違うデータが入っていたら、変換しません。 画面下のシートタブで、コードの表示をクリックして、画面が現れたら、以下を貼り付けます。後は、F5 を押せば実行されます。 実行する前に、保存しておいてください。 '------------------------------- Sub Test1() '文字の時間値をシリアル値に換える Dim r As Range Dim v As Variant Dim buf As String Dim ar As Variant Dim i As Long With ActiveSheet Set r = .Range("A1", .Range("A65536").End(xlUp)) ar = r.Value i = 1 For Each v In ar If Len(v) - Len(Replace(v, ":", "", , , 1)) = 3 Then Mid(v, InStrRev(v, ":"), 1) = "." ar(i, 1) = v Else ar(i, 1) = v End If i = i + 1 Next v End With With r r.NumberFormatLocal = "hh:mm:ss.00" r.Value = ar r.Columns(1).AutoFit End With Set r = Nothing End Sub
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! No.1です。 そうですかぁ~~~ 一つ一つ手作業は大変でしょうから、 参考になるかどうか分かりませんが B列を使って B1セルに =SUBSTITUTE(A1,":",".",3) としてオートフィルマークの(+)のところでダブルクリックしてみてください。 (※ 前提として各セルとも「:」が3つ入っているとします) B1セルにちゃんと最後のコロンがピリオドに置換されると思います。 B列すべてを範囲指定 → コピー → A1セルを選択 → 形式を選択して貼り付け これでB列を削除しても大丈夫だと思います。 その後、A2-A1としてオートフィルでコピーする方法はどうでしょうか? もちろんセルの書式設定から表示形式を 前回の回答のようにしておいてくださいね。 お役に立てれば幸いです。m(__)m
お礼
tom04様、どうもありがとうございます! 出来ました!本当に助かります。 皆さん本当に凄いですね。ありがとうございました!!
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No4ですがセルの表示形式でs.00とすれば秒以下の表示だけになりますので1.10と表示させることができます。
お礼
KURUMITO様、どうもありがとうございます! 計算出来ました。本当にありがとうございました!!
》 A1 12:34:56:70 》 A2 12:34:57:80 》 A3 12:34:58:90 計算を最も簡単にするには、次のように入力することです。 》 A1 12:34:56.70 》 A2 12:34:57.80 》 A3 12:34:58.90 なお、書式は hh:mm:ss.00(あるいは h:mm:ss.00)とします。 》 A2とA3は2.10秒です それは間違いですね。しっかりしてください。 s.00 と書式設定したセルに入力した式 =A2-A1 および =A3-A2 は、何れも 1.10(秒)を返します。これでは駄目ならその理由をお知らせください。 ちなみに、h:mm:ss の記号「:」の直後の分(mm)、秒(ss)は六十進数ですが、秒未満は十進数なので、12時34分56秒70 の意味で 12:34:56:70 とするのは奇妙だと思います。
補足
ご回答、どうもありがとうございます。 計算ミスのご指摘ありがとうございます。 こちらの表示の問題のようで、秒以下もコロンになってしまっています。皆様に指摘いただいた、書式の変更でもうまく出来ませんでした。#VALUE!と表示されています。
- 374649
- ベストアンサー率38% (203/527)
以下のURLを参考にして下さい。 http://www.sophia3.com/school/chie/ex09.htm 12時34分56秒70は "=TimeValue("12:34:56.70")"で100/1秒が表示できます、 書式設定で秒表示に設定して下さい。 データが1万件ということはマクロで対処でしょうね、記録してある書式を上の書式に変換できればあとは足し算、引き算のレベルと思います。 秒のところの":"を"."に置換すれば後は簡単です、頑張ってください。
お礼
ご回答、どうもありがとうございます。 上記HP,参考になりました。しかし、やはり秒以下のこちらの表示の問題で、すべて手打ちでなければうまくいかない?ようです。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか分かりませんが・・・ ↓の画像のように A列のセルの表示形式を ユーザー定義から h:mm:ss.00 としてみてください。 ss の後はコロン「:」ではなく、ピリオッド「.」にします。 これでC2セルを =A2-A1 としてオートフィルで下へコピーすれば、希望に近い形にならないでしょうか? 尚、↓の表のC列のセルの書式設定の表示形式は mm:ss.00 にしていますが、 ss.00 にすれば 00.01となるはずです。 但し、質問の A3-A2 は 00.01 ではないでしょうか? 以上、参考になれば幸いです。m(__)m
お礼
tom04様、わざわざ画像までおつくりいただきましてありがとうございます。 計算も間違っていました。すみません; ご指摘いただいた内容ですが、こちらのデータでは秒以下もコロンで表示されており、これですと一個一個A列を手直ししなければだめのようです。
お礼
Wendy02様、マクロまでわざわざ作っていただき どうもありがとうございました!! これで出来ました。本当に助かります、どうもありがとうございました!!