こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel 「For … Next」のやり方

Excel画面のA1~A10を10~1の表示にさせるため、VBAを

Sub ***()
Worksheets("Sheet1").Activate

Cells.Clear

Dim i As Integer, n As Integer

For i = 10 To 1 Step -1
Cells(i, 1).Value = i
Next i

End Sub

としたのですが、実際に表示するとA1から1~10と1ずつ加算されてしまいます。
マイナス値は-1の表示で可能だといろいろ調べてわかったのですが、実際にやるとうまくいきません。
どこが間違っているのでしょうか?
学習不足ではありますが、よろしくお願いします。

投稿日時 - 2011-11-18 13:01:44

QNo.7140114

すぐに回答ほしいです

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

しまった

For i = 10 To 1 Step -1
Cells(i, 1).Value = (11-i)
Next i

ではなく
For i = 10 To 1 Step -1
Cells(i, 1).Value = (11+i)
Next i

でした

投稿日時 - 2011-11-18 13:18:23

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(8)

既にたくさんの回答が出ていますが、だめ押しに

sub macro()

m = 1

for i = 10 to 1 step -1
cells(m,1) = i
m = m + 1
next

end sub

投稿日時 - 2011-11-18 21:32:13

ANo.7

>どこが間違っているのでしょうか?
 ⇒プログラムは評価(デバッグ)が終わって完成です、ご質問者のように
  途中で投げ出して他者に頼る姿勢は頂けません。
  先ずは、自分でデバッグできるようになって下さい。
 
  ■ステップインで1ステップずつ確認
   マクロの先頭にカーソルを合わせ、F8キーを押下していけば1ステップずつ
   確認できるので一度お試しください
   今回はこの方法で十分問題点を見つける事ができると思う

  ■変数等の内容をDebug.Printで表示
   例えば、For文の直後に「Debug.Print i」を挿入するとVBE画面のイミディ
   エート欄にiの変遷データが表示できます

投稿日時 - 2011-11-18 14:58:04

ANo.6

実際質問のようになるし、改善を考えたら仕舞いではないか。こんなところに質問するようなことかな。
エクセルの特別の仕組みによるものでもなく、エクセルや、システムが介入した結果ではないのは判るでしょう。
自分で計算した結果ではないか。
10行には10
9行目には9
・・
を入れているのだから、そうなる。
ーー
改善は
・ソートするとか
・一旦1-10を入れて真中を軸に交換するとか
・その他の方法が
あるだろうから考えて。
ーー
Sub test01()
Worksheets("Sheet1").Activate
Cells.Clear
Dim i As Integer, n As Integer
For i = 10 To 1 Step -1
Cells(i, 1).Value = 10 - i + 1
Next i

End Sub
がとりあえずの改善か。

投稿日時 - 2011-11-18 13:40:20

ANo.5

>どこが間違っているのでしょうか?

「入れる場所と入れる値が同じ」って部分が間違ってます。

質問者さんのプログラムは、

10を10の所に入れて、Step -1で1つ減らして9を9の所に入れて、Step -1で1つ減らして8を8の所に入れて…

になっています。

これでは

1を1の所に入れて、Step 1で1つ増やして2を2の所に入れて、Step 1で1つ増やして3を3の所に入れて…

と、まったく同じ結果になります。

違うのは「下から順にやるか、上から順にやるか」だけです。

やりたいのは

10を1の所に入れて、Step -1で1つ減らして9を2の所に入れて、Step -1で1つ減らして8を3の所に入れて…
10を1の所に入れて、Step 1で1つ増やして9を2の所に入れて、Step 1で1つ増やして8を3の所に入れて…
1を10の所に入れて、Step -1で1つ減らして2を9の所に入れて、Step -1で1つ減らして3を8の所に入れて…
1を10の所に入れて、Step 1で1つ増やして2を9の所に入れて、Step 1で1つ増やして3を83の所に入れて…

と言うように「入れる場所と、入れる値が逆」の筈です(上記4つは、どれも同じ結果になります)

結局は「10なら1に、9なら2に、8なら3に、7なら4に(略)2なら9に、1なら10になる式」を考え、それをValueに代入してやればよい事になります。

投稿日時 - 2011-11-18 13:39:59

ANo.3

変数iは、For~Nextによって、10、9、8、…、2、1 と変化しますよね。
セルに入れる部分のコードはCells(i, 1).Value = i と、なっていますから
Cells(10, 1).Value = 10
Cells(9, 1).Value = 9
Cells(8, 1).Value = 8
:
:
Cells(2, 1).Value = 2
Cells(1, 1).Value = 1

と、入ります。
でもやりたい事は
Cells(1, 1).Value = 10
Cells(2, 1).Value = 9
:
:
Cells(9, 1).Value = 2
Cells(10, 1).Value = 1
ですよね、Cellsの行を指定する部部分を変更しましょう

Cells(i, 1).Value = i

Cells(11-i, 1).Value = i

投稿日時 - 2011-11-18 13:17:34

ANo.2

最初にマクロの動作を確認

For i = 10 To 1 Step -1
Cells(i, 1).Value = i
Next i

1周目
i=10
Cells(i, 1).Value = i ⇒Cells(10, 1).Value = 10

2周目
i=9
Cells(i, 1).Value = i ⇒Cells(9, 1).Value = 9

3周目
i=10
Cells(i, 1).Value = i ⇒Cells(8, 1).Value = 8




10周目
i=1
Cells(i, 1).Value = i ⇒Cells(1, 1).Value = 1

になります

目的の動作はCells(i, 1)に 11-i の数値を代入なので
For i = 10 To 1 Step -1
Cells(i, 1).Value = (11-i)
Next i

とか
For i = 1 To 10
Cells(i, 1).Value = (11-i)
Next i

と言った形式になります

投稿日時 - 2011-11-18 13:16:43

ANo.1

For i = 1 To 10
Cells(i, 1).Value = 11-i
Next i

とか

投稿日時 - 2011-11-18 13:14:31

あなたにオススメの質問