• ベストアンサー

エクセルの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文を二つ用いて関数二つあれば出来そうなのですが・・・。 ご教授お願いいたします。

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

  • ベストアンサー
noname#140971
noname#140971
回答No.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)
回答No.1

こんな感じでしょうか? 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

simaotoko
質問者

お礼

ありがとうございます。 なんとかやってみたら自分でも出来ました!! 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

simaotoko
質問者

補足

For y = 1 To 93 の誤りでした。

関連するQ&A

専門家に質問してみよう