- ベストアンサー
エクセルのVBAでFor文がわかりません。
エクセルのVBAで 12列目のセルで縦に93行あるデータ(数字)を利用し、 まずCells(1,12)のデータを18列目のセルの28~36に貼り付け 次はCells(2,12)のデータを18列目のセルの28+48~36+48に貼り付け その次はCells(3,12)のデータを18列目のセルの28+48*2~36+48*2に貼り付け ・ ・ ・ 最後はCells(93,12)のデータを18列目のセルの28+48*92~36+48*92に貼り付け という具合にFor文を作りたいのですがわかりません。 For文を二つ用いて関数二つあれば出来そうなのですが・・・。 ご教授お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No1 さんの回答では、ものスゴーク重要な作法が示唆されています。 質問者の Macro1 を No1 さん流に書けば次のようです。 For ループの前で、Cells(y + 1, 12) の値を 変数 tmp に代入しています。 For ループの前で、y-1 の値を 変数 z に代入しています。 これら tmp、z がどういうエリアに一時的に格納されるかは知りません。 が、For ループの中で参照・計算を繰り返させるより処理が高速化することは間違いないです。 そういう意味では、No1 さんの回答の意味するところは重要です。 ちょっと、横から補足します。 Sub Macro1() Dim x As Integer Dim y As Integer Dim z As Integer Dim tmp As Variant For y = 1 To 9 tmp = Cells(y + 1, 12) z = y - 1 For x = 1 To 9 Sheet1.Cells(x + 27 + 48 * z, 18) = tmp Next x Next y End Sub
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
こんな感じでしょうか? Sub sample() Dim off As Integer Dim i As Integer, j As Integer Dim tmp As Variant For i = 1 To 93 tmp = Cells(i, 12) off = 48 * (i - 1) For j = 28 To 36 Cells(j + off, 18) = tmp Next Next End Sub
お礼
ありがとうございます。 なんとかやってみたら自分でも出来ました!! Sub Macro1() Dim x As Integer Dim y As Integer For y = 1 To 9 For x = 1 To 9 Sheet1.Cells(x + 27 + 48 * (y - 1), 18) = Cells(y + 1, 12) Next x Next y End Sub
補足
For y = 1 To 93 の誤りでした。