- ベストアンサー
エクセルのVBA初心者が時間の範囲指定でデータを合計する方法は?
- エクセルのVBA初心者ですが、時間の範囲を指定してデータを合計する方法を知りたいです。
- VBAを使って、「最初の時間から最後の時間まで」の範囲を指定し、その範囲内のデータを合計する方法について教えてください。
- エクセルで特定の時間範囲のデータの合計を求めるために、VBAを使ってセルの範囲を指定する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
もちろん、関数だけで何とでも出来る話ではありますが、 > cells.findを使おうとするも、うまく実行出来ませんでした。 との事ですから、折角なのでコレを使って考えてみました。 日付・時刻は表示そのまま(MM/DD とか hh:mm)だと使いづらいので、 日付型の変数を宣言して、そこに格納して使うと楽です。 踏まえて、A列に時刻が、B列に個数が並んでいるときに D2セルに開始時刻を、E2セルに終了時刻を入力し、 F2セルに合計を書き出すようにすると考えると、 Sub Test() Dim SCell As Range, ECell As Range Dim STime As Date, ETime As Date '開始・終了時刻を変数に格納 STime = Range("D2").Value ETime = Range("E2").Value '変数を基に検索し、ヒットしたセルの右隣のセルを変数に格納 Set SCell = Columns(1).Find(STime).Offset(0, 1) Set ECell = Columns(1).Find(ETime).Offset(0, 1) 'SUM関数で合計を算出 Range("F2") = WorksheetFunction.Sum(Range(SCell, ECell)) End Sub こんな流れでいかがでしょう? ここに、開始と終了の時刻が逆転している時だとか、 片方が入っていない時にどう対処するかを加えると良いかもしれませんね。
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! すでに回答は出ていますが・・・ 時刻などに関しては浮動小数点誤差の関係できっちり計算できないような気がします。 そこでF列を作業用の列として使用し、小数点以下5桁で丸めてみました。 ↓の画像のようにE1・E2セルにそれぞれの時刻、E3セルに合計を出す場合です。 Sub Sample1() Dim i As Long, k As Long, vL1, vL2 On Error Resume Next i = Cells(Rows.Count, "A").End(xlUp).Row Range(Cells(2, "F"), Cells(i, "F")).Formula = "=ROUND(A2,5)" vL1 = WorksheetFunction.Round(Range("E1"), 5) vL2 = WorksheetFunction.Round(Range("E2"), 5) i = WorksheetFunction.Match(vL1, Range("F:F"), False) k = WorksheetFunction.Match(vL2, Range("F:F"), False) Range("E3") = WorksheetFunction.Sum(Range(Cells(i, "B"), Cells(k, "B"))) Range("F:F").ClearContents End Sub ※ E1・E2セルが未入力等の諸々のエラーは考えていません。 こんな感じではどうでしょうか?m(_ _)m
補足
み、皆様ありがとうございます! これほど早くご回答頂けるとは思っておりませんでした! これから頂いた方法を試してみたいと思います!
- mu2011
- ベストアンサー率38% (1910/4994)
エクセル2007なので、SUMIFS関数を利用しては如何でしょうか。 仮にC2に開始時刻、D2終了時刻とすると、E2に=SUMIFS(B:B,A:A,">="&C2,A:A,"<="&D2) これをVBAでは次の様な感じです。 MsgBox Application.SumIfs([b:b], [a:a], ">=" & [c2], [a:a], "<=" & [d2])
お礼
皆様迅速な対応を誠に有難う御座いました。 tubuyukiさんの仰るとおり時間の問題が有りましたが、 一番私にとってわかりやすく、excel2003でも出来て、かつ拡張が楽でしたので、 ベストアンサーに選ばせて頂きました。 大変有難う御座いました。