dポイントプレゼントキャンペーン実施中!

いつも大変お世話になっております。今回も教えてください。測定時間の換算で切り上げする方法なのです。

計測データをCSV変換し、同時に秒を分に切り上げたい。

シートに手作業でB2からC3セルに数式を入れた場合。

A2セルに14401(秒)

B2セルに'=$A2/24/3600  → 4:00:01 

C2セルに'=CEILING(B2,"00:01")  → 4:01

この関数と同じ事をマクロでC2セルよりC100セルまで変換できるようにしたいのです。

Range("C2").Value = Application.WorksheetFunction.Ceilingを使ったのですが上手くいきません。

Ceilingの扱いがマクロでは使えないのか困ってます。

秒単位で切り上げ計算するマクロの方法はありますでしょうか?いろんな方法を教えてください。

(1秒切り上げで、上記例の「4:00:01」だった場合は「4:01」としたいのです。)

A 回答 (4件)

こんにちは!



>秒単位で切り上げ

すなわち秒が0より大きい場合はすべて切り上げて分単位に表示する!というコトですよね?

>上手くいきません
とはどのように上手くいかないのかこちらでは判らないのですが、
この手の問題として浮動小数誤差が考えられます。
(他の原因ならごめんなさい)

その解決策として、B列の小数点以下の数値を5桁程度で丸めてみてはどうでしょうか?
尚、秒単位の場合は丸めた桁数でも誤差が生じるかもしれませんので、
念のために「秒」が0以外の場合にのに切り上げとしてみた方が良いかもしれません。

関数で簡単にできますが、今回はマクロがご希望のようなので一例です。


Sub Sample1()
With Range("B2:B100")
.Formula = "=ROUND(A2/24/60/60,5)"
.NumberFormatLocal = "[h]:mm:ss"
End With
With Range("C2:C100")
.Formula = "=IF(SECOND(B2)>0,CEILING(B2,""0:01""),B2)"
.NumberFormatLocal = "[h]:mm"
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さん有難うございます。誤差もなく思うような動作してくれました。教えていただき有難うございます。

お礼日時:2013/08/05 12:38

sub macro1()


 dim r as long
 for r = 2 to cells(rows.count, "A").end(xlup).row
  cells(r, "C") = application.ceiling(cells(r, "B"), timevalue("0:1"))
 next r
end sub

計算の仕方は同じですが,「全く同じ式で出来る」ワケでは勿論ありません。
    • good
    • 0
この回答へのお礼

keithinさん いつも教えていただき有難うございます。上手く動作しました。

お礼日時:2013/08/05 12:33

私なら


C2=(INT(($A2-1)/60)+1)/1440
と同じことだから,VBAでも
Range("C2").Value=(CLng((Range("A2").Value-1)/60)+1)/1440
とします。
    • good
    • 0
この回答へのお礼

f272さん教えていただき有難うございました。0秒のときにも切り上がりました。

お礼日時:2013/08/05 12:42

ご例示のマクロで問題ないと思いますよ。


うまくいかない点を記載しないと何のことか判りませんので補足して下さい。
    • good
    • 0
この回答へのお礼

mu2011さん回答いただき有難うございます。

お礼日時:2013/08/05 12:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!