- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私の今まで考えてきたことと違うので(私が大誤りかもしれないが) (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の時間で処理はすみました。 これは疑問。私がエクセル・インサイド情報は無知なのですが。
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ウチで試してみた所では、 式が計算されました。 どんな式だったのでしょうか? 再計算させるには Range(Cells(1, 1), Cells(3, 10)).Calculate すればいいと思います。
お礼
こんにちは、ご回答ありがとうございます。 結論から言いますと自動計算を処理に入る前に止めておかな かったために速度が遅くなったみたいでした。 それで結局、ループですませました。 ただ、3台ほどでテストしましたが、Calculateでは計算 されませんでした。 数式は 一般的な AVGとSTD,Max,Minといったものです。 =Max(Sheet1!A1:C150) とか こんな感じです。 これのアドレスを少しずつ変えたものがテキスト配列 に入っていて、一気に貼り付けられないかと考えました。
お礼
こんにちは、ご回答ありがとうございます。 結論から言いますと自動計算を処理に入る前に止めておかな かったために速度が遅くなったみたいでした。 これにより4分30秒かかっていたものが10秒ですむようになり ました。 データ数は10,000*15 で、それのAVGやSTDなどを取得するもの でしたが、対象範囲が一定でないので範囲を自動的に取得する ようなVBAを書いて、それを元に式を変化させようと思いました。 範囲の変更が必要な式が数百あるもので自動でと考えました。