重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

年間(1~12月)の勤務日数を集計するVBAを組んでいます。
が、どうも動きません。どこがおかしいかご指摘いただけませんか


For m = 8 To a

Cells(m, "AI") = WorksheetFunction.SumIfs(Range(Cells(m, "BM"), Cells(m, "FP")), Range(Cells(6, "BM"), Cells(6, "FP")), "日", Range(Cells(7, "BM"), Cells(7, "FP")), ">=" & sYMD1, Range(Cells(7, "BM"), Cells(7, "FP")), "<=" & eYMD1)

Next m

 
・BM列からFP列まで3年分保存するようになっています(4年目以降は古いデータから削除)。
・6行目には"日"以外にも"時"が入り、"日"の場合は勤務日数を集計します。
・7行目のsYMDはスタート日(1/1)、eYMDは年末(12/31)
・8行~a行まで従業員を入力しており、全従業員分出すためにForNext


 情報が足りない部分がありましたらご指摘ください。
 宜しくお願いします。

A 回答 (3件)

こんにちは



組込み関数だけで計算できる値のようなので、わかり難い記述法をとるよりも、そのまま関数式を設定する方法にした方が簡単ではないでしょうか?
 Range("AI8").Resize(a-7).FormulaLocal = "=Sumifs(BM8:FP8,・・・
実質的には、上記の一行ですんでしまうはずです。

関数式を残しておくのは都合が悪いのであれば、
 Range("AI8").Resize(a-7).Value = Range("AI8").Resize(a-7).Value
で、定数値化できます。
    • good
    • 0

メモリスタックでうまくいかないと言う事でしょうか?


使用されている関数式をセルAI8にSumIfs関数を=Sumifs(BM8:FP8,・・・・と入力して結果は、期待通りになりますか?期待通りなら数式に間違いが無い事になります。

VBA For Next で WorksheetFunction.SumIfs などの処理をするとデータ量によっては、処理に時間がかかります。
VBAで複数条件で合算するなどする場合、(データ量が多い時などは特に)Dictionaryオブジェクト(連想配列)などを使う事が多いと思います。

>どうも動きません。は、エラーですか?エラーならデバッグの結果をお知らせください。
不具合の状況を具体的にされた方が、良いと思いますよ。
    • good
    • 0

動かないとは?


エラーメッセージは?
どこまで処理されてる?
    • good
    • 0

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