アプリ版:「スタンプのみでお礼する」機能のリリースについて

日付無しで時間の足し算引き算がしたいの調べたのですがありませんでした。
constでDatetimeはあったので使い方もよくわかりません、
やりたいイメージは、セルに入力されている行の時刻とパターンで加算したいです

dim a,b
const time1 = time(00:01:01) 1分1秒をconstしたい
const time2 = time(00:02:01) 2分1秒をconstしたい
const time3 = time(00:20:00) 20分をconstしたい
a = cell(2,2)~(22000,3) ここに時刻が12;30のように入っている,各行入っており
b = cell(2,3)~(22000,3) ここにパターンが入っている
最終行は22,000です。
case b =1
time = a + time1
case b =2
time = b + time2
cell(2,4) = time
2万行くらいのデータで関数を使いたくないです。
よろしくお願いいたします。

A 回答 (3件)

const time1=TimeSerial(0,1,1)  あるいは timevalue("00:01:01")



というようにTIMESERIALで時間を指定します。

加算は
a="12:30:00"としたら (秒まで指定)
a=TimeValue(cell(2,2))  で時間の値がAに
dateは普通に足し算できますから
time=a+time1 でOKです。
    • good
    • 0
この回答へのお礼

ありがとうございます。Timevalue使うんですね。

お礼日時:2019/08/20 07:27

こんにちは。



>時間の足し算引き算がしたいの~
既回答にもありますが、時間(シリアル値)であれば、加減算ができます。

ちなみに、エクセルのシリアル値は1日が1に相当し、1時間は1/24、1分は1/24/60・・に該当します。
加算の結果が24時間を越えると、通常の書式では日に繰り上げられますが、書式を設定することで、時間単位で「35時間」のような表示にすることも可能です。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2019/08/20 07:28

VBAでは、日付はできても、時間計算はそのままでは、できないはずです。

小数点演算には、どこかで、浮動小数点誤差丸めが発生してしまいます。計算上のおよそ5割、小数点演算で誤差が発生してしまいます。理由は、PCの計算はバイナリーだからです。

>2万行くらいのデータで関数を使いたくないです。
そのまま考えずにやったら、誤差丸めに直面してしまいます
また、定数の中は計算ができません。リテラル値に限ります。

その中で、文字型定数が一番安定しているのではないかと思います。少なくともTimeValue 計算をする前まで変化はしていません。そのあとに、CDec で、十進型にして上げれば、数式が、10進で計算されるようになるはずです。これは、理論的なことなので、実際に、ふつうの計算をした場合と見かけは変わらないかもしれません。

'//
Sub TimeCalculate()
 Dim i As Long
 Dim LastRow As Long
 Const TIME1 As String = "0:1:1"
 Const TIME2 As String = "0:2:1"
 Const TIME3 As String = "0:20:0"
 Dim ArTime
 ArTime = Array(TimeValue(TIME1), TimeValue(TIME2), TimeValue(TIME3))
 LastRow = Cells(Rows.Count, 2).End(xlUp).Row 最後の行

 Application.ScreenUpdating = False
 '先に書式が来たほうが、貼り付けが安定する。
 Range(Cells(2, 4), Cells(LastRow, 4)).NumberFormatLocal = "[h]:mm:ss" 
 For i = 2 To LastRow
  If (Cells(i, 2).Value > 0 And Cells(i, 2).Value < 4) Then
   Cells(i, 4).Value = Cells(i, 3).Value + CDec(ArTime(Cells(i, 2).Value - 1)) '十進の計算
  End If
 Next i
 Application.ScreenUpdating = True
End Sub
'//

ここは。
>a = cell(2,2)~(22000,3) これは、a = cell(2,2)~(22000,2) と読み替えました。
そして、以下のようになっていると仮定しています。
 B   C
 2  0:10:49
 1  0:06:47
 3  0:05:10
 2  0:09:54
 3  0:09:55
 1  0:07:12
    • good
    • 0
この回答へのお礼

小数点演算で誤差が出るんですね。勉強になりました。ありがとうございます。

お礼日時:2019/08/25 02:01

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A