Excel VBA でアプリケーションを作成しています。
あるサイトの閲覧時間の平均を出したいのですが、例えば、7日分の閲覧時間をData型変数に加算していって、それを7日分の平均で割るみたいな計算をするのはどうしたらいいのでしょう?
日付型に対して、加算と減算はあるのですが、掛け算、割り算はないですよね。。。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答3件
2
VBAでの日付型は
1900年01月01日00時00分00秒からの経過分を表すシリアル値です。
整数部が日数で
小数部が時分秒です。
平均を出すため、各日の閲覧時間を算出するのに下記で算出できます。
VBA
1Dim Duration As Single 2Dim StartDateTime As Date 3Dim EndDateTime As Date 4 5Duration = EndDateTime - StartDateTime
各算出時間を合計し、日数で割れば平均が出来ます。
但し、時分秒が小数になっていますので、
利用の仕方によっては下記の様に整数化が必要です。
VBA
1Dim valAve As Single 2valAve = #2:03:18 AM# ' 平均が 2時間3分18秒 の例 3 4Dim valHours As Integer 5Dim valMinutes As Integer 6Dim valSeconds As Integer 7 8valHours = Hour(valAve) ' Int(valAve * 24) 9valMinutes = Minute(valAve) ' Int((valAve * 24 - valHours) * 60) 10valSeconds = Second(valAve) ' Int((((valAve * 24 - valHours) * 60) - valMinutes) * 60)
コメントにしている部分は冗長ですが
シリアル値を自分で計算する場合の計算方法です。
以上、参考になりますでしょうか?
投稿2016/06/28 15:44
総合スコア396
2
ベストアンサー
Excelでは、日時はシリアル値という値で管理されていて内部的には浮動小数です。
設定にもよりますが、1900年1月1日をから1日を1として、時間は小数で表しています。
なので、お昼の12時は0.5です。
つまり7日分で割りたいということであれば、7で割れば結果が出せるはずです。
私が念のため確認で簡単に書いたプロシージャを載せておきますね。
VBA
1Public Sub dateTypeTest() 2 3 Dim d As Date 4 Debug.Print CDbl(d) 5 6 d = d + "6:00" 7 Debug.Print CDbl(d) 8 9 d = d + "6:00" 10 Debug.Print CDbl(d) 11 12 d = d + "6:00" 13 Debug.Print CDbl(d) 14 15 d = d + "6:00" 16 Debug.Print CDbl(d) 17 18 Debug.Print CDbl(d / 2) 19 20End Sub
実行結果
0
0.25
0.5
0.75
1
0.5
参考ページ
Excelで時間と数値の掛け算をする
> 7日分の平均で割る
を7日で割ると捉えましたが、この認識が間違って無ければの回答です。
投稿2016/06/28 15:32
総合スコア2208
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
1
VBAはよくわからないのですが、扱うのは「時刻」(hh時mm分)ではなくて「時間」(h時間m分間) ですよね?
時刻から時刻を引き算して時間にした時点で、すでにDate型ではないのでは。Pythonならtimedeltaです。
そこまでくれば、普通の実数の平均と考え方は同じはず。
投稿2016/06/28 14:54
総合スコア2493
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
関連した質問
Q&A
解決済
実行時エラー"1004"「"Range"メソッドは失敗しました:"_Global"オブジェクト」
回答2
クリップ0
更新
2015/11/11
Q&A
解決済
DDE通信のサーバー名取得
回答1
クリップ0
更新
2023/03/30
Q&A
解決済
エクセルのセルの参照の仕方について
回答3
クリップ0
更新
2023/03/14
Q&A
解決済
VBA 文字列と認識されてしまっているセルを数字に変換したい
回答3
クリップ0
更新
2023/03/16
Q&A
解決済
VBA 文字を数値として計算
回答2
クリップ0
更新
2023/03/30
Q&A
受付中
デシクショナリーオブジェクトを利用して、重複データを格納したい
回答7
クリップ0
更新
2023/03/29
Q&A
解決済
【VBAマクロ】入力規制(プルダウン)を使用して、画像の切り替えを行いたい
回答1
クリップ0
更新
2023/03/14
Q&A
解決済
VBA フィルター後の最終行の行番号を取得したい
回答1
クリップ0
更新
2023/03/24
同じタグがついた質問を見る
VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2016/06/29 16:47