• ベストアンサー

Excel2000で数式を配列にしてセルに放り込むと計算されない

一定の法則で作成されて数式をセルに放り込む場合、 (1)のようにループさせると非常に時間がかかりま した。(実際の数式セルはもっとたくさんあります。) それで数式を一度、(2)のように配列に入れて放り 込んだところ約1/10の時間で処理はすみました。 ただ、放り込まれた数式が計算されずに式のまま表 示されてしまいます。 セルをダブルクリックして、その後、リターンを押すと計算され ます。 これを自動的に計算させることはできないのでしょうか? (1)    For i = 1 To 3      For j = 1 To 10        Cells(i, j).Formula = "数式"      Next j    Next i (2)    myFomula(3, 10) = "数式" '← この中に数式を入れる。    Range(Cells(1, 1), Cells(3, 10)).Formula = myFomula

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

私の今まで考えてきたことと違うので(私が大誤りかもしれないが) (1)VBAでFormulaをセットするのは、不適(回りくどい)で、自分のプロクラムで、計算して、値をセットするのが早いかも知れない。 式が見れるメリットはあるかも知れないが。 (2)式を作る(アドレス部分の変更)のに時間がかかる からこの部分をプログラムで自作と言う認識は不可解。 (3)エクセルの関数は、人間やプログラムを作っている人には関係ないと判る(関数式の入った)セルも、1セルのデータが変わると、全部再計算してしまうようです。 従って関数式が増えると大変な時間を要すようです。 エクセル側は、系統立てて計算していかないと、どこで計算結果をまた使っているか割り出せないですしね。 (3)配列にいれて 配列が効いているというより、メモリにおくことの処理スピードメリットでは。 (4)やりたいことは For Each Cl in Range(Cells(1, 1), Cells(3, 10)) cl.Formula=myFomula(i) i=i+1 Next で実現することかな。 右辺myFomulaは変化する仕掛けにしないと駄目でしょう。 C言語などの構造体のような記述は許されない?。 多セル範囲指定=値も実行後、多セルは同じ値になりますよね。 >それで数式を一度、(2)のように配列に入れて放り 込んだところ約1/10の時間で処理はすみました。 これは疑問。私がエクセル・インサイド情報は無知なのですが。

urourojp
質問者

お礼

こんにちは、ご回答ありがとうございます。 結論から言いますと自動計算を処理に入る前に止めておかな かったために速度が遅くなったみたいでした。 これにより4分30秒かかっていたものが10秒ですむようになり ました。 データ数は10,000*15 で、それのAVGやSTDなどを取得するもの でしたが、対象範囲が一定でないので範囲を自動的に取得する ようなVBAを書いて、それを元に式を変化させようと思いました。 範囲の変更が必要な式が数百あるもので自動でと考えました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

ウチで試してみた所では、 式が計算されました。 どんな式だったのでしょうか? 再計算させるには Range(Cells(1, 1), Cells(3, 10)).Calculate すればいいと思います。

urourojp
質問者

お礼

こんにちは、ご回答ありがとうございます。 結論から言いますと自動計算を処理に入る前に止めておかな かったために速度が遅くなったみたいでした。 それで結局、ループですませました。 ただ、3台ほどでテストしましたが、Calculateでは計算 されませんでした。 数式は 一般的な AVGとSTD,Max,Minといったものです。 =Max(Sheet1!A1:C150) とか こんな感じです。 これのアドレスを少しずつ変えたものがテキスト配列 に入っていて、一気に貼り付けられないかと考えました。