• ベストアンサー

エクセル セルにデータを打ち込んだ時点でマクロを起動できるか?

いつもお世話になります。 数千行ある表の列A,Bに数値を打ち込むセルを用意しており、打ち込まれた瞬間に、列Cに関数を使って答えを出したいのですが、列Cに予め関数を入力しておくと、計算が非常に遅く、また容量も重くなってしまいます。 そこで、 「列A,B両方にデータが打ち込まれた瞬間にマクロで列Cに数式を入力し、答えを出してから値で貼り付ける」 ということが出来ないかと思うのですが、可能でしょうか。 以上宜しくお願い致します。

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> 「列A,B両方にデータが打ち込まれた瞬間にマクロで列Cに数式を入力し、答えを出してから値で貼り付ける」 > ということが出来ないかと思うのですが、可能でしょうか。 ワークシートの変更が起こった時のイベントWorksheet_Changeのイベントのタイミングで処理可能ですが、 A1,B1に値が入っているか? A2,B2に値が入っているか? ・ ・ A????,B????に値が入っているか? と、数千行分の検査を行うことになります。 また、打ち込み以外の方法での変更、10行分貼り付けした場合などの処理も検討する必要があります。 -- [ツール]-[オプション] 「オプション」ダイアログ 「計算方法」タブ で、 「計算方法」を「手動」にする。 ってのが妥当な対応方法だと思います。

7-samurai
質問者

お礼

いつもお世話になります。 お礼が遅くなりまして大変申し訳ありませんでした。 いただいた回答を試してから質問やお礼をしようと思っていたのですすが、ここ1ヶ月急に入った仕事に追われて試せておりません・・・。 ですが、回答の内容は必ず活用させていただきます。 ありがとうございました。

その他の回答 (1)

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.2

最初の行に ブランクだったら Exit を書けば そんなに時間が かからないと思いますが? (6000行でやってみました)  (関数を60000行に入れたときと 再表示した場合は時間がかかりますが) こんな感じ C5 に =xxx(A5:B5) として Function xxx(in1 As Range) If in1.Cells(1, 1).Text = "" Or in1.Cells(1, 2).Text = "" Then xxx = "" Exit Function End If xxx = in1.Cells(1, 1).Value * in1.Cells(1, 2).Value End Function もし =yyy($A$1:$B$2000) 等と されたら 括弧の中の値が変更されたたびに すべての関数(2000行分)が実行されてしまうので 凄くおそくなるので 関数の変更が必要だとおもいます。

7-samurai
質問者

お礼

いつもお世話になります。 お礼が遅くなりまして大変申し訳ありませんでした。 いただいた回答を試してから質問やお礼をしようと思っていたのですが、ここ1ヶ月急に入った仕事に追われて試せておりません・・・。 ですが、回答の内容は必ず活用させていただきます。 ありがとうございました。

関連するQ&A

専門家に質問してみよう