• ベストアンサー

エクセル マクロ 計算時間を短縮したい

=SUMPRODUCT(min((f:f>=s2)*(f:f<s2+730)*r:r)) 上記の関数を、オートフィルで数百行下までコピーするというマクロを作りました。 しかしかなり計算時間がかかります。 計算時間を短縮する方法があれば教えてください。 計算結果が同じで時間が短縮するなら上記の関数を使わなくてもいいです。 f:fとr:rの範囲はこのマクロを使うファイルによって異なりますが、 最上行から最下行まで空白はありません。 エクセル2010です。 cpuはcore2duo E6400です。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

お示しの式そのものが正しいようには思いませんね。かなりの時間がかかるのは当然で、少なくともF:Fなどの指定は止めてF1:F100などのように範囲を限定したうえで行うことでしょう。それにしてもどんなことをやりたいのでしょう。

4rd
質問者

お礼

どうもありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【現在処理時間45分】EXCEL関数での時間短縮をさせたい。

    お世話にまります。 ■相談概要 AccessからADO接続で下記のDBシートと、計算シートの作業者と作業者番号作成させますここまでの処理は問題はないのですが ■問題点 計算シートで計算させる時に時間が約45分くらいかかります 原因は計算シートに700列ぐらいあり行数は55あります 計算すると38500のセルに関数を入れているのが原因です。 関数は=SUMPRODUCT((DB!$C$1:$C$60000=$C21)*(DB!F$1:$F$60000=$F$17)*(DB!E$1:$E$60000))です 関数はVBAで自動に作成させています ■規則 計算シートは決められたフォーマットなので変更したくてもできません DBシート 日付|管理番号|作業者番号|数量 6/3 |00100001|01 |1 6/4 |00100001|01 |2 6/3 |00100001|04 |2 6/3 |00100002|04 |3 6/5 |00100001|08 |3 6/6 |00100001|08 |1 6/8 |00100001|08 |6 6/3 |002F000 |01 |1 計算後シート 作業者番号|01  |04 |08 | 作業者  |太郎|次郎|三郎| 管理番号 | 00100001 |3 |2 |10 | 00100002 |  |3 | | 002F001 |  | | |   00105006 |  | | | 002F000 |1 | | | どなたか計算の時間短縮等わかる方ご教授よろしくお願い申し上げます。

  • エクセルVBA プログレスバー表示について

    いつもお世話になります。 ワークシート関数の計算中に、プログレスバーの目盛りを進めることは出来るでしょうか。 というのは、マクロで約1200行×50列=60000個のセルにワークシート関数(SUMPRODUCT関数などの、かなり時間のかかる関数が多く含まれています)を書き込んでいるのですが、中々計算が終わらないので、固まっているように見えるのです。 以上宜しくお願い致します。

  • エクセル2010 繰り返しマクロ

    (1)g列の空白の最上行に =SUMPRODUCT(min((a:a>=f2)*(a:a<f2+730)*e:e)) と入力。 そのセルをコピーし、同じセルに値を上書き貼り付け ↓ (2)a列に(1)のセルの左隣のセル以下の数値がある行の、b列を削除 (画像の場合、(1)のセルがg1の場合、b2,b3を削除する) というのを、f列に数値がある行だけ繰り返すマクロの構文を教えてください。 大変お手数おかけいたしますが、どうぞよろしくお願いします。

  • 行の自動カウントと複数の関数式をマクロで実行したい

    EXCELの初心者です。今後の事も考えて、 マクロで右側のセルの値($J$4~$V$4から下方へ数万行)が入っている行数を自動カウントさせて、複数の関数もマクロの中に記載して、 『値形式』の値を張り付けと、自動で左側の各項目に集計した数値が表示されるようにしたいのですが、マクロに全く慣れておらず、マクロを書く為に使用するsheetの種類も分かっていません。 行数を自動カウントし、複数の関数もマクロの中に記載して集計を 自動計算するマクロの書き方をどなたか教えて頂けないでしょうか。 値の集計はマクロは使っておらず、 右側のセル($J$4~$V$4から下方へ数万行)に『値形式』で値が張り付けて、左側のセルに項目毎の合計を下記のような複数(48行)の計算式を入れ込んむ事で求めています。 <$B$11のセルに入れている関数式> =SUMPRODUCT((($Q$4:$Q$10000=B$10)*($S$4:$S$10000<>"自主運用"))/COUNTIFS($Q$4:$Q$10000,$Q$4:$Q$10000&"",$S$4:$S$10000,$S$4:$S$10000&"",$T$4:$T$10000,$T$4:$T$10000&"")) <$B$15のセルに入れている関数式> =SUMPRODUCT((($Q$4:$Q$10000=B$14)*($S$4:$S$10000<>"自主運用"))/COUNTIFS($Q$4:$Q$10000,$Q$4:$Q$10000&"",$S$4:$S$10000,$S$4:$S$10000&"",$O$4:$O$10000,$O$4:$O$10000&"")) <$B$21のセルに入れている関数式> =SUMPRODUCT((($Q$4:$Q$10000=$B$20)*($S$4:$S$10000=$B$19))/COUNTIFS($Q$4:$Q$10000,$Q$4:$Q$10000&"",$S$4:$S$10000,$S$4:$S$10000&"",$T$4:$T$10000,$T$4:$T$10000&"")) <$B$24のセルに入れている関数式> =SUMPRODUCT((($Q$4:$Q$10000=$B$23)*($S$4:$S$10000=$B$22))/COUNTIFS($Q$4:$Q$10000,$Q$4:$Q$10000&"",$S$4:$S$10000,$S$4:$S$10000&"",$T$4:$T$10000,$T$4:$T$10000&"")) 2月分の集計時は、右側の値の行は9753行でしたが、 3月分の集計時は、右側の値の行は10648行となり10000行を超えていた為、上記の関数式では正しい集計を出す事が出来ませんでした。 今回は置換を利用して、以下のように関数中の$10000→$20000へ変更しました。 $B$11 =SUMPRODUCT((($Q$4:$Q$20000=B$10)*($S$4:$S$20000<>"自主運用"))/COUNTIFS($Q$4:$Q$20000,$Q$4:$Q$20000&"",$S$4:$S$20000,$S$4:$S$20000&"",$T$4:$T$20000,$T$4:$T$20000&"")) $B$15 =SUMPRODUCT((($Q$4:$Q$20000=B$14)*($S$4:$S$20000<>"自主運用"))/COUNTIFS($Q$4:$Q$20000,$Q$4:$Q$20000&"",$S$4:$S$20000,$S$4:$S$20000&"",$O$4:$O$20000,$O$4:$O$20000&"")) 説明が上手く表現出来ず申し訳ありませんが、どうぞ宜しくお願い致します。

  • エクセルマクロ中の再計算について

    A1 -> 11(初期値) A2 -> if(A1>10,1,2) 上記の様に表にデータが入っている場合に以下のマクロを実行した時に再計算されずにマクロの処理が進み遅くなって再計算が実行されるため正確なマクロが実行されないのですが、どうしたら確実に再計算を実行したあとにマクロが処理を継続するようにさせる事が出来るのでしょうか、よろしくお願いします。なお、実際のマクロ及び関数は違います。 Range("A1").value = 1 Calculate if Range("A2").value = 1 then  msgbox "OK" endif end 以上の場合に『OK』メッセージが表示されるものと理解していますが、表示されずに終了してしまいます。

  • Excelの時間の計算

    時間の計算の算出方法について質問です。 セルE16に 2015/11/25  17:59 という日付けと時間が入力されています。 セルH16に同じような形式で日付けと時間が入力された場合 セルK16に経過時間を表示する方法を教えて下さい。 ちなみにK16の経過時間は30分以上いくことは絶対にないので 分表示のみで大丈夫です(○○min と表示したい) またE16、H16ともに、マクロにて、セルの所でダブルクリックすると日付けと時間が 入るようになっています。 理想としてはH16の所でダブルクリックしたときにH16に日付けと時間が入力され K16に経過時間を表示という形にしたいです。 このような計算をした箇所が20行あります。 列は変わりません。 16から35行まで。 ご指導の程、宜しくお願いします。

  • 休憩時間がある場合の時間計算

    経営時間は9時から22時までです。 17時から時給が変更になります。 休憩時間はそれぞれとる時間帯が違います。 素人なりに色々勉強して下記の式までは作ったのですが、 題:E21出勤時間・F21休憩開始時間・O21休憩終了時間・P21退社時間 22行目より日々の勤務時間を入力します。 <前半の勤務状態を集計します> ・17時までの勤務時間 G22 =IF(ISERROR(MIN("17:00",F22)-E22),"",MIN("17:00",F22)-E22) ・17時以降の勤務時間 H22 =IF(ISERROR(MAX("17:00",F22)-"17:00"),"",MAX("17:00",F22)-"17:00") <後半の勤務時間を集計します> ・17時までの勤務時間 Q22 =IF(ISERROR(MIN("17:00",P22)-O22),"",MIN("17:00",P22)-O22) ・17時以降の勤務時間 R22 =IF(ISERROR(MAX("17:00",P22)-O22),"",MAX("17:00",P22)-O22) 上記内容ですと、17時をすぎてからの出社の場合###がでてしまいます。 また、18時から19時の出勤の場合、 17時以降の勤務時間が1時間ではなく、2時間となってしまいます。 マクロはわからないので、関数でつくりたいのですが、どうしてもうまくできません。 前半、後半、1日の計をそれぞれ17時前と、後で集計し、1ヶ月の集計もおこないたいと思っています。 本当に素人ですので、わかりやすくご説明お願い致します。

  • エクセルの時間計算教えて欲しいです。

    エクセルで勤怠管理したいです。 【例】 (1)14:01に出勤した (2)18:05に退勤した ※実際の勤務時間4時間4分 条件:15分刻み 上記の条件に基づいた場合 (1)14:15から計算 (2)18:00として計算 ※勤怠整理した場合の勤務時間、3時間45分 必ず15分刻みとして計算したいです。 そこで知りたい関数があります。 (1)エクセルに14:01と入力した場合、自動的に14:15分からとして認識できる関数 (2)逆に18:05と入力した場合、自動的に18:00として認識できる関数 (3)時給を25ドルとした場合、3時間45分×25ドルで計算したい。 上記(1)~(3)の関数を教えていただけますか。 よろしくお願いします。

  • EXCELで時間の計算

    EXCELで時間の計算をしたいのです。(和) A1→15  B1→30  C1→22  D1→00 A2→16  B2→30  C2→21  D2→00 A3→ 5  B3→00  C3→12  D3→30 と入力してあります。 A1とB1でひとつの時刻です。 つまり1行目は15:30と22:00です。 まずは後ろの時刻から前の時刻を差し引いたもの つまり1行目でいうところの22:00から15:30を引いたものの結果6時間30分を E1→6 F1→30とするにはどうしたらよいですか? またその合計 1行目→6時間30分 2行目→4時間30分 3行目→7時間30分を足したもの18時間30分を E4→18 F4→30とするにはどうしたらよいですか? そもそも時と分を分けたところに失敗があるのですが それはもうどうしようもありません。 それでは不可能なんでしょうか? E1、F1に入れる式、 E4、F4に入れる式を教えてください。 よろしくお願いいたします。

  • エクセルマクロ 横向きのオートフィルについて質問

    VBA初心者です。エクセルでオートフィルのマクロに挑戦しています。 セルA2にすでに入力されている関数を横向きにオートフィルを行い、1行目の入力されている最終列まで行いたいです。1行目の最終列は可変です。 いろいろ調べても、「最終行まで」というものはあるのですが、「最終列まで」というものが見つからないので、どなたか助けてください!よろしくお願いします。

このQ&Aのポイント
  • PCを入れ替えた際には、「Movie studio 17.0 Platinum」を新PCに再インストールする必要があります。
  • 具体的な手順は以下の通りです。 1. 旧PCから「Movie studio 17.0 Platinum」をアンインストールする 2. 新PCに「Movie studio 17.0 Platinum」のインストールファイルをダウンロードする 3. ダウンロードしたインストールファイルを実行し、指示に従ってインストールする
  • 以上の手順で、「Movie studio 17.0 Platinum」を新PCにインストールすることができます。
回答を見る

専門家に質問してみよう