• ベストアンサー

エクセルVBA残業代計算 コード稼働せず

たとえば17;45を基準として18:00退勤であれば15分の残業として時給1000円とすると0.25*1000の250円の残業代となるわけですが、VBAの一連のコードのなかで それを計算したいので、たとえばセルDに退出時刻 そのときの残業代をセルIに返すのを Cells(i, "I").Value = (Cells(i, "D").Value-17:45)*24*1000 を作ってみましたが 稼働しません

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.1

Cells(i, "I").Value = (Cells(i, "D").Value - TimeValue("17:45")) * 24 * 1000 というやり方もありますがまるめ誤差が出ますので D1を18:45にして実行するとセルの表示は1000ですが数式バーでは999.999999999999になっていると思います。 関数でも1000と表示されますがどこかのセル(たとえばJ1)に1000と手入力して あいているセルに =I1=J1 としたら FALSE となると思います。 ですので一応時間計算は時間を分として整数にして計算する方法でやってみましたので試してみてください。 Cells(i, "i").Value = ((Hour(Cells(i, "D").Value) * 60 + Minute(Cells(i, "D").Value)) - _ (Hour("17:45:00") * 60 + Minute("17:45:00"))) / 60 * 1000

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

式の中に時刻を書く時は、 Cells(i, "I").Value = (Cells(i, "D").Value-#17:45#)*24*1000 のように # で囲みます。

回答No.3

式間違ってた。 (正)C1="=MINUTE(B1-A1)*1000/60" (誤)C1="=MINUTE(A2-A1)*1000/60"

回答No.2

VBAでやらなければいけない理由がないのであれば、excel関数使った方が楽なのでは? A1="17:45:00" B1="18:00:00" C1="=MINUTE(A2-A1)*1000/60" でC1に250と表示されるはず。 時給変動するのであれば、時給額は別の欄に持っておくのがきれいかと思うけど。

関連するQ&A

  • VBAで残業 早退過不足金額の計算コード

    エクセルファイルにおきまして セルDi =退勤時刻としまして 基準退勤時刻を18:00とし、18:00ちょうどに 退勤であれば残業代は0となります 18:45であれば0.25*1000 250円が残業代として 加算となります 時給を1000円として 残業または早退のときの 加算または減算金額を計算したいのですが iが1から31となります VBAで計算する場合は どのようになるでしょうか すみません 宜しくお願い致します win10 office365

  • エクセル 列の合計のVBA

    エクセルの縦の列におきまして たとえば列A1からA31までの セル 数値が 入っています、を 合計してA33に返すとして これをコードのなかの 一連の作業として行いたいので VBAで試行錯誤していますが Cells(33, "A").Value = Application.WorksheetFunction.Sum("Cells(1, "A"):Cells(31, "A")") Cells(33, "A").Value = Application.WorksheetFunction.Sum("A1:A31") いずれも稼働しません 宜しくお願い致します win10 office365

  • VBA 合計金額の計算

    OSは、XPpro Excelは2003を使用しています。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1444918209 を参考にさせて頂いて、 Dim gk As Variant Dim i As Long i = 2 Do While Cells(i, 1).Value <> "" gk = gk + Cells(i, 2).Value If Cells(i, 2).Value = "" Then Cells(i, 2).Value = gk gk = 0 End If i = i + 1 Loop i = 2 Do While Cells(i, 1).Value <> "" gk = gk + Cells(i, 3).Value If Cells(i, 3).Value = "" Then Cells(i, 3).Value = gk gk = 0 End If i = i + 1 Loop として、図の水色のセルの合計までは出来たのですが、 合計行だけDセルにBセルとCセルの合計を入たいのですが、 どの様にすれば良いか どなたか教えて頂けないでしょうか? 説明不足なところがありましたら、追記致します。 どうかよろしくお願い致します。

  • excel VBAでのループの方法

    excel VBAでループの方法がわかりません、何方か教えて頂けませんか。 現在,下記様なコードを作成して一応目的に近くなりましが、1か所方法がわかりません。 sheets(時刻)の、(N6:N45 )の時刻データをsheets(基準値時刻)の(AI5:AI44)に転記して、その 転記されたデータを使い時刻を描画して、またsheets(時刻)を参照してこんどは、4列右の(R6:R45)のデータ読み取り、転記場所は、sheets(基準値時刻)の(AI5:AI44)の前回と同じセルに転記し、 そのノテータ を使い時刻を描画します。この繰り返しを行いたいのですが、 を[ j ≖ worksheets("時刻").cells(cnt2,10).value ] の列の10の数値を10,14,18、・・・と変化させたい のですが、うまくいきません。  読み取るデータは4列ずつ右に移動、転記場所は同じ場所、1回の読み込み、転記、描画が完了 してから、読み取るデータの位置のみ変更(4列右へ移動)、後の動作は同じ。 この繰り返しをしたいのです。 '-----------時刻取得・転記------------ for x = 1 to 50 For cnt2 = 6 To 45 Step 1      '6行から45行を1stepずつ j = Worksheets("時刻").Cells(cnt2, 10).Value '時刻sheetsから時刻取得  Worksheets("基準値時刻").Cells(cnt2 - 1, 35).Value = j '取得時刻を基準値時刻sheetへ   Next cnt2 '---------------時刻を描画-------------- For cnt4 = 5 To 44 Step 2 k = Worksheets("基準値時刻").Cells(cnt4, 38).Value l = Worksheets("基準値時刻").Cells(cnt4, 39).Value m = Worksheets("基準値時刻").Cells(cnt4 + 1, 38).Value n = Worksheets("基準値時刻").Cells(cnt4 + 1, 39).Value With Worksheets("勾配計算").Shapes.AddLine(k, l, m, n) .Line.Weight = 1 .Line.ForeColor.RGB = vbBlue End With Next cnt4 Next x 以上がコードの一部です。よろしくお願いいたします。   環境は, OSは  windows 8.1 です。

  • EXCELのVBAでセル値の移動でエラー

    EXCEL2002のVBAでセル値の移動をVBAでやりたいのですが (1)の様に1行は出来るのですが、(2)の様に2行を移動させるとエラー (実行時エラー1004 アプリケーション定義またはオブジェクト定義のアラーです。)が出てしまいます。 (2)のマクロでどうしてエラーが出るのか分かりません。 エラーを出さずに2行目を移動させる方法を教えてください。 (1)_________________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value datachn = Range("L1").Value End If (2)_______________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value Cells(2, i + 13).Value = Cells(2, i + 12).Value ←ここでエラー i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value Cells(2, 13).Value = Range("L2").Value datachn = Range("L1").Value End If

  • エクセルVBA DateAdd関数の使い方

    お願いいたします・・DateAdd関数の三つ目の引数・・                      ↓ココ DateAdd( 単位, 増減値, 基準となる日付・時刻) ここには変数を使うことは可能でしょうか? また、以下のコードは間違いでしょうか? Cells(6, 4).Value = DateAdd("n", 5, Format(Cells(5, 4), "hh:mm")) ※試したら機能しましたけど・・不安です。 とか Cells(6, 4).Value = DateAdd("n", 5, Cells(5, 4),value) ※これは不正確のようです、時々機能しません。 アドバイスお願いいたします<m(__)m>、エクセルVBAです。

  • エクセル:VBA:マクロコード

    エクセルVBAで、 (質問1) マクロでsheet1のデータを処理して、sheet2に結果を表示するマクロで最初にsheet2をクリアーするというのはどうコードしますか。 (質問2) マクロでsheet1のセル/データを使ったりsheet2のセル/データを使ったりしますが、データはどう切り替えるのですか。 常に今どちらのシートのことを問題にしているか宣言するのですか。 その場合、 例えば今sheet1を扱ってるとした場合にsheet2のデータCells(10, "D")をsheet1のセルCells(10, "D")に入れる場合、 Cells(10, "D")=Sheets("sheet2").Cells(10, "D")こうなりますか。

  • 残業時間を計算したい

    約2年間分の残業時間を計算したいのですが、会社の出退勤システムから出力したCSVファイルから上手く計算する関数などアドバイスください。 表は、下記のような形になっています。 ------------ C列(日付) 2012/10/1 D列(出勤時刻) 10:27 E列(退勤時刻) 19:58 ------------ これだけなら、E列からD列を引けば、会社にいた時間が出てくるので そこから8時間+1時間(昼休憩)引けば残業時間が求められるのですが、日をまたいで働くなどすると ----------- D列(出勤時刻) 10:25 E列(退勤時刻) 03:58 ----------- なんて行も存在するため、計算がめちゃめちゃになってしまいます。 日付をまたいだ行も含めて、その日、出勤~退勤まで何時間会社にいたのかを計算するためにはどんな計算式を入れれば良いでしょうか?

  • エクセル VBAコードの書き方を教えてください。

    エクセル VBAコードの書き方を教えてください。 今回は、VBAで掛け算をしたいのですが、 コードが間違っているためか実行ができません。 VBAコードのどこに不備があるか教えてください。 <条件> *最終行(H列で判断)を選択し、  I2(2行、I列)~I最終行(最終行,最終行のI列)までの  範囲を計算したい。 *たとえば、I2であれば、F2×G2×H2×0.01の値を代入したい。  I最終行であれば、F最終行×G最終行×H最終行×0.01の値 EX) 添付ファイルの場合、I2=500、I4=125、にしたい。 <参考> Sub SURYO() Dim r As Long With Sheets("Sheet1") For r = 2 Cells(r,9).value = Cells(r,6) * Cells(r,7) * Cells(r,8) Next End With End Sub よろしくお願いします。

  • エクセルVBAで複数セルをコピーの制御構文

    エクセルVBAで A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという 処理をしたいと考えています Sub copy() Dim i As Integer i = 7 Do Until Cells(i, 1) = "" Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value i = i + 2 Loop End Sub と作ってみたところエラーで動きませんでした。 上記のプログラムはどこら辺がおかしいでしょうか? よろしくお願いします。

専門家に質問してみよう