質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

7887閲覧

Excel VBAで時間(時刻ではなく、計測の時間)はどんな変数の型で扱うのが妥当なのでしょう。

GiveAHand

総合スコア286

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/06/28 10:11

EXCEL VBAでアプリケーションを作成しています。

その再、あるサイトの表示時間を計算して、合計を出したり、平均を出したりしたいと考えています。

ただ、その時間というのは、"13分15秒"のような感じのテキストデータです。

時間の表記は3種類で、

1分 15分 99分

のうような、分だけの表記。

1秒 59秒

のような秒だけの表記。

1分13秒 78分16秒

のような、分と秒の表記の3種類です。

時刻の場合であれば、TimeValueを使って計算したらいいのかなという感じですが、これは時刻ではなく、何か扱うのに妥当な変数は無いものでしょうか?

とりあえず今思いつくのは、まずは一旦全部を秒に変換し、それをIntegerに格納して、合計やら平均やら出した後で、また分、秒を付けて元の表記に戻すこと考えていますが、もっとスマートにやる方法は無いものかなと思いまして。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

時刻を扱うのであればTimeValueの戻り値と同じくDate型で良いでしょう。
単純な秒や分の数値に変換したいのであれば、DateDiff関数を使うなど工夫すれば
期待する値が得られると思います。
場合によっては、Hour, Minute, Second などの日付関数も役に立つでしょう。

VBA

1'Date型利用サンプル 2 Dim dtmTarget As Date 3 Dim lngSecond As Long 4 Dim lngMinute As Long 5 Dim lngHour As Long 6 Dim lngSecoendTotal As Long 7 Dim lngMinTotal As Long 8 Dim lngHourTotal As Long 9 10 dtmTarget = CDate("01:02:03") 11 12 lngSecond = Second(dtmTarget) '3 13 lngMinute = Minute(dtmTarget) '2 14 lngHour = Hour(dtmTarget) '1 15 16 lngSecoendTotal = DateDiff("s", 0, dtmTarget) '3723 17 lngMinTotal = DateDiff("n", 0, dtmTarget) '62 18 lngHourTotal = DateDiff("h", 0, dtmTarget) '1

投稿2016/06/28 10:55

nakit

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GiveAHand

2016/06/28 12:03

nakit様 ご回答ありがとうございます! 時間の計算について、時刻と同じでいいとの事なのですが、ただ、表記としては分と秒だけで、59分を過ぎた場合でも、1時間とならず、60分、61分と増やしていきたいのですが、その場合でも、これらの関数でいいのでしょうか?
nakit

2016/06/28 12:16

良いと思ってサンプル付きで回答しました。 サンプルに記載しました通り「DateDiff("n", 0, 日付型の値)」で得られる値が 期待値(単位が分の数値)として使えると思いますが違うのでしょうか。
GiveAHand

2016/06/28 13:04

nakit様 大変失礼致しました! サンプルどおりでうまくいきました! 本当にここまでしてくださって、助かりました。 ありがとうございました!
guest

0

やり方はいろいろあるので、あくまでも好みの問題ですが、そもそも処理対象の「時刻データ」がどのような形式でインプットされるかによっても、方針が変わるかもしれません。

まずは一旦全部を秒に変換し、それをIntegerに格納して、合計やら平均やら出した後で、また分、秒を付けて元の表記に戻す

というのも一つの方法ですが、「一旦秒に変換する」というのも手間が掛かりますよね?

折角Excelを使うのであれば「時刻の計算」にもExcelの機能を利用出来た方が、プログラムの可読性やメンテナンス性も良くなるのではないでしょうか?(と、個人的には考えます)

Excelでは、日付・時刻をシリアル値で表すのが基本ですから、TimeValue関数でバリアント型の値に変換しておけばそのまま計算できますし、グラフ化したりする場合にも都合が良いと思います。

これは時刻ではなく

とのことですが、時刻も時間の長さ(2つの時刻の間隔)も、人間にとっての意味合いは異なるとしても、計算上の「数値」としては全く同じですので、「Excelを使用するのであれば」シリアル値で表すのが自然だと思います。

投稿2016/06/28 10:41

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GiveAHand

2016/06/28 12:01

pi-chan様 ご回答ありがとうございます! あと、ひとつお聞きしたいのですが、 表記としましては、分と秒だけで、例えば59分以上は、 1時間とならず、60分、61分とあとはどれだけ増えても分で増やしていきたいのですが、その場合でも、TimeValueで大丈夫なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問