- ベストアンサー
Excel VBAで繰り返し計算を行い、指定したデータを出力する方法
- ExcelのVBA機能を利用して、繰り返し計算を行い指定したデータの出力を行いたい。現在は手作業でデータをコピー&ペーストしているため、時間がかかっている。
- 繰り返し計算には初期条件値y0セルと、初期条件からhステップした値y0+hセルが使用される。hステップごとに計算値を初期条件のセルにコピー&ペーストし、計算結果が出力される。
- 指定したデータy0+n*hを得るための計算回数nが多く、手作業でデータをシート2にコピー&ペーストする作業が時間を要している。VBAを利用して、計算中にステップデータを出力する方法を教えてほしい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足 (蛇足、無駄足かも) 250の整数倍の時にデータを取り出すのでしたら If i >= 250 And i Mod 250 = 0 Then 計算結果をシート2にコピーするコード End If というコードをループの最後に付け加えるということも考えられます。
その他の回答 (2)
- kmetu
- ベストアンサー率41% (562/1346)
Range("T(yi)+h").Valueに最終データがはいっているのではないのでしょうか。T(yi)+hはセル番地が入っている変数と考えていいわけですよね…。 具体的にセル番地と数値を示していただければわかりやすいのですが…たとえばループが3回だとどこのセルに何が入るとかは分かると思います。 シート1のy0+hセル(y0+hはセル番地を表す変数と考えれば)ということは、データの出力されるセルは毎回違うという感じなのですが、ただ文面からすると同一のセルに計算結果が出力されて、それをループの250回目、500回目…の時にシート2のどこかのセルに書き出したいとも思えます 頭が悪くてすみません(笑) 同一のセルなら ループの最後に Select Case i Case 250 Sheets("シート2").Range(シート1で算出したy0+250*hを貼り付けたい場所(セル)).Value = Range(計算結果の出力されているセル).Value Case 500 Sheets("シート2").Range(シート1で算出したy0+500*hを貼り付けたい場所(セル)).Value = Range(計算結果の出力されているセル).Value End Select とかしておけばいいと思われますが 複数のセルに出力されるのでしたら、範囲指定でコピー貼り付けのコードが必要ですね。 Select Case i Case 250 Range(Cells(row1, Column1), Cells(row2, Column2)).Copy Sheets("シート2").Range(貼り付けたい範囲の一番左上のセル).PasteSpecial 中略 End Select
お礼
詳細な返答ありがとうございます。 教えていただいたコードを記述することで、自動的にシート1の計算結果をシート2にコピーすることが出来ました。
- kmetu
- ベストアンサー率41% (562/1346)
シート2のどのセルのコピーしてるのか分からないのでxとしますが ループの最後に Sheets("シート2").Range(x).Value = Range("T(yi)+h").Value と入れておけばいいのではないでしょうか
お礼
早速の回答ありがとうございます。 私の説明が良くなかったのですが。。。 シート1のy0+hセルに、計算結果が出力されるようになっています。 For i = 1 To 指定したデータy0+n*hを得るための計算回数n で、n回コピー&ペーストを繰り返しn時間後の値y0+n*hを得ます。そして、シート1にある計算結果(y0+n*h)をコピーしてシート2に貼り付けます。 シート2はシート1のy0+n*hの結果を貼り付けただけのシートになります。 シート2に貼り付ける作業は手作業であるため、例えば、シート1で1000回計算する中で、250回計算した時の結果y0+250*h、500回計算した時の結果y0+500*hをシート2に貼り付けていき、最終的に1000回計算した結果y0+1000*hも、手作業なしでシート2に貼り付けたいと考えています。 回答頂きました Sheets("シート2").Range(x).Value = Range("T(yi)+h").Value で、1000回計算する途中で、250回計算した時の結果をシート2に貼り付けたい場合、 Sheets("シート2").Range(シート1で算出したy0+250*hを貼り付けたい場所(セル)).Value = Range("250").Value として試してみたのですがうまくできませんでした。 せっかく回答を頂いたのですが、どのように記述すれば良いのでしょうか。 よろしくお願い致します。
お礼
別のコードも教えていただきありがとうございます。 コードがシンプルなので条件が変更しやすく使いやすいです。