- ベストアンサー
mm:ss.000をmsecに変換
Excelでmm:ss.000で入力されているセルをミリ秒(msec)に変換して平均値や標準偏差を出す方法をご存知の方お教え願いたいのです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
- NuboChan
- ベストアンサー率47% (785/1650)
もう答え出てますが ? mm:ss.000書式を"0:00:00.001"で割る。 54:32.109/"0:00:00.001" ---> 3272108 (ms)
- NuboChan
- ベストアンサー率47% (785/1650)
既に回答がありますが、 コンマ以下の数値も対象にするなら 先のFunction msec()を以下のように訂正して下さい。 書式設定する必要が無いのでその点は手抜きできます。 msec = convss * 1000 + Right(mmss000, 3)
- msMike
- ベストアンサー率20% (364/1804)
- imogasi
- ベストアンサー率27% (4737/17069)
仕事や研究などでミリ秒を使ったことがないので、下記が、誤りなきことを念じつつ。 WEB記事で https://biz-magic.club/excel-milliseconds/ Excel(エクセル)で「ミリ秒」の変換方法 が、本件に関して、良い記事と思う。 ーー さて、シートセルへの入力はここ(記事)で言う既定(一般)のやり方で入力されているのでしょうか。 ここが守られていないと下記は、全部崩れる。 ーー エクセルの日付シリアル値や時刻シリアル値は、1日(=24時間)を1として測って、時、分、秒に数値化している。 例えば、0:21:34と入れると、エクセルは=0/24+21/(24*60)+34/(24*60*60)の計算をして(24*60*60などの両端に、括弧を適切に入れること)、セルの値としては、0.014976852 の値をセットし、表示形式適用後は、0:21:34と表示する。 だからTEXT関数で=TEXT(A4,"hh:mm:ss.000")で表示形式適用後の、数字+記号の文字列を作り その文字列から、時、分、秒、ミリ秒の4数値に切り分けて、ミリ秒単位に変換する(全セルデータを統一する)。簡単にするには、ユーザー関数をVBAで作るが、Splitを使い:で文字列を切り分ける方法もある。 ーー そうすればあとは、平均値や標準偏差は、整数値のデータ群にするのと、変わりない。 ーー しかし4分割の関数式を作る(多分Findのは関数を使う)のは面倒です。そこで、 セルの値は、時刻シリアル値のままで 上記WEB記事にあるように 「ミリ秒単位までの時間」で時間を割る方法 に記されている、1ミリ秒単位の数値で割れば、何ミリ秒かが1発で出そうです。 >先程の「0:00:00.777」を「0:00:00.001」で割ります。 >=A2/"0.00.00.000" 画像の数式バー部の式 を参考にしてください。
- NuboChan
- ベストアンサー率47% (785/1650)
仮セルを利用したくないならVBAで専用関数を作成する。 達人さんはもっとスマートなコードを書くでしょうが 以下は、VBA初心者の幼稚なコードです。 Function msec(mmss000 As String) Dim mm As Long Dim ss000 As String Dim ss As Long Dim hhmmss Dim convss As Long mm = Left(mmss000, WorksheetFunction.Find(":", mmss000) - 1) ss000 = Right(mmss000, Len(mmss000) - WorksheetFunction.Find(":", mmss000)) ss = Left(ss000, WorksheetFunction.Find(".", ss000) - 1) hhmmss = TimeValue("0:" & mm & ":" & ss) convss = Hour(hhmmss) * 3600 + Minute(hhmmss) * 60 + Second(hhmmss) msec = convss * 1000 End Function
補足
imogasi様 お世話になります。 セルの値としては、0.014976852の値をセットしておらず、mm:ss.000の書式でセット(入力)しております。 従って、ご回答頂いているのは嬉しいのですが解決には至っておりません。 さて、どうしたもんだか。 引続き、回答お待ち申し上げます。