プロが教える店舗&オフィスのセキュリティ対策術

VBAの初心者です。
For next 構文でデータを作成しているのですが、何日も考えたとおりにならなくて困り果ててしまいました。以下に例文を記載しました。何が原因なのか全然わからないのです・・・。

Sub フォーネクスト文1行飛ばし()
Dim a As Long 'コピー先
Dim b As Long 'コピー元

With ActiveSheet
For a = 14 To 26 Step 2
For b = 1 To 4
.Cells(a, 1).Value = .Cells(b, 1).Value
Next b 'どうしてもToの最後のデータが指定の行に貼り付けされる?な                  ぜだかがわからない。
Next a
End With
End Sub


よろしくお願い致します。

A 回答 (2件)

> For a = 14 To 26 Step 2


>  For b = 1 To 4
>   .Cells(a, 1).Value = .Cells(b, 1).Value
>  Next b 'どうしてもToの最後のデータが指定の行に貼り付けされる?な
> Next a

内側をforを使わずに書き直すと、

For a = 14 To 26 Step 2
 .Cells(a, 1).Value = .Cells(1, 1).Value
 .Cells(a, 1).Value = .Cells(2, 1).Value
 .Cells(a, 1).Value = .Cells(3, 1).Value
 .Cells(a, 1).Value = .Cells(4, 1).Value
Next a

です。
同じセルに4回上書きしてるんですから、最後に上書きしものだけを反映するのは正しい動作です。


> 何日も考えたとおりにならなくて

何をどうしたいのか、その考えた内容が分からないんだから、こちらについてはアドバイスしようがないです。
    • good
    • 0
この回答へのお礼

上記の理屈を元にいじくりまわしていたら、やっと思い通りになりました。
2度目のForは、1度目のFor を保持した状態で繰り返した後、1度目に戻るという意味だったのですね。
回答していただいた方々、本当にありがとうございました。

お礼日時:2018/06/09 17:28

よろしくお願い致します。



どういう処理をしようとしてるのかわからないですが。

このforの処理を追えば・・・

Cells(14, 1) ← Cells(1, 1)
Cells(14, 1) ← Cells(2, 1)
Cells(14, 1) ← Cells(3, 1)
Cells(14, 1) ← Cells(4, 1)
Cells(16, 1) ← Cells(1, 1)
Cells(16, 1) ← Cells(2, 1)
Cells(16, 1) ← Cells(3, 1)
Cells(16, 1) ← Cells(4, 1)
Cells(18, 1) ← Cells(4, 1)
以下略


Cells(14, 1) から2行おきに26行まで、Cells(4, 1) の値が書き込まれる、
という結果になります。
    • good
    • 0
この回答へのお礼

上記の理屈を元にいじくりまわしていたら、やっと思い通りになりました。
2度目のForは、1度目のFor を保持した状態で繰り返した後、1度目に戻るという意味だったのですね。
回答していただいた方々、本当にありがとうございました。

お礼日時:2018/06/09 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!