こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルで検索した2個のセルの間を範囲指定する。

エクセルのVBA初心者です。(excel 2007使用)
初投稿にて至らない部分もありますが、どうぞ宜しくお願い致します。
下の様なデータが1分おきにずっと続いています。

時間(A列)個数(B列)
13:00:00   19
13:01:00   4
13:02:00   0
13:03:00   8
13:04:00   16
13:05:00   2
13:06:00   1
13:07:00   32

このデータで
何処かに時間の最初と最後を入力する箇所を設けて、マクロを実行するだけでその合計を出したいです。
指定する時間帯が場合によって変わる為、
Range("最初の時間を検索しヒットしたセル : 最後の時間を検索しヒットしたセル").Select
Selection.Offset(0, 1).Select

を考え、cells.findを使おうとするも、うまく実行出来ませんでした。
何かよい方法はございますでしょうか。

何卒宜しくお願い致します。

投稿日時 - 2013-01-24 15:54:36

QNo.7908464

すぐに回答ほしいです

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

もちろん、関数だけで何とでも出来る話ではありますが、

> 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

こんな流れでいかがでしょう?
ここに、開始と終了の時刻が逆転している時だとか、
片方が入っていない時にどう対処するかを加えると良いかもしれませんね。

投稿日時 - 2013-01-24 18:59:46

お礼

皆様迅速な対応を誠に有難う御座いました。
tubuyukiさんの仰るとおり時間の問題が有りましたが、
一番私にとってわかりやすく、excel2003でも出来て、かつ拡張が楽でしたので、
ベストアンサーに選ばせて頂きました。

大変有難う御座いました。

投稿日時 - 2013-01-29 18:12:19

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんばんは!
すでに回答は出ていますが・・・

時刻などに関しては浮動小数点誤差の関係できっちり計算できないような気がします。
そこで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

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2013-01-24 21:05:51

補足

み、皆様ありがとうございます!
これほど早くご回答頂けるとは思っておりませんでした!

これから頂いた方法を試してみたいと思います!

投稿日時 - 2013-01-25 08:42:07

ANo.1

エクセル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])

投稿日時 - 2013-01-24 16:22:22

あなたにオススメの質問