• 締切済み

For Next がうまくいきません。

VBを勉強中の初心者です。 For i = 2 To 8 For n = 3 To m Cells(4, i) = Sheets("1").Cells(3, n) Next n Next i 上記のようにつくってはみましたが、うまくいきません。 Forのうえにはmを求める式が入っています。 自分がやりたいのは、 4,2 3,3  |  | 4,8 3,9 --------- 4,3 3,3  |  | 4,8 3,8 --------- 4,4 3,3  |  | 4,8 3,7 --------- 4,5 3,3  |  | 4,8 3,6 --------- 4,6 3,3  |  | 4,8 3,5 --------- 4,7 3,3 4,8 3,4 --------- 4,8 3,3 --------- 上記のようにしたかったのですが、 どうしてもうまくいきません。 どなたか宜しくお願します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

外ループは For i=2 To 8 For n=i To 8 で良いでしょう。 左辺のc(4,n)で i=2 (n=2,n=3,n=4,n=5,n=6,n=7,n=8) i=3 (n=3,n=4,n=5,n=6,n=7,n=8) i=4 (n=4,n=5,n=6,n=7,n=8) i=5 (n=5,n=6,n=7,n=8) i=6 (n=6,n=7,n=8) i=7 (n=7,n=8) i=8 (n=8) 右辺の=c(3,x)のxをiとjからどう表現するか難しい。 数は i=2のとき7通り i=3のとき6通り ・・・ i=8のとき1通りと 上記左辺と一致している(当然)。 特徴は3から始まることである。 i=2でn=2-8のとき3-9 i=3でn=3-8のとき3-8 i=4でn=4-8のとき3-7 n-i+3で良い。 即ち=c(3,n-i+3) 総体では、組み合わせは下記を実行して見てください。 mを1づつ増やして、変化がすべて残るようにしました。 Sub test01() m = 1 For i = 2 To 8 For n = i To 8 Cells(m, "A") = "Cells(4," & n & ")" Cells(m, "B") = "Cells(3," & n - i + 3 & ")" m = m + 1 Next n Next i End Sub 質問には上記mの要素がないので、後からの結果がかぶさり 何をやっているのか判らなくなるのでは。#1のご指摘 のことかな??

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 「やりたいこと」を見る限り、Cells(4, 2)~Cells(4, 8)の全部に、 Sheets("1")のCells(3, 3)の値を代入しているだけにしか見えませんが。 (全部上書きしているから) 本当にこういうことがやりたいんでしょうか? それとも代入後に何かの処理が入っているのでしょうか? あと、コードでは、外のループのiの1個1個に、内のループがあるから、Cells(4, i)の1個1個に、内のループの回数分(3~mまで)値を代入していることになります。 この場合は、結局、最後のCells(3, m)の値が入るので、ループが無駄になっています。 それから、 >Forのうえにはmを求める式が入っています。 どこにどのように記述してあるんでしょうか? ここは、内ループの上限を決める重要な部分では? とにかく1行実行して、順番にどのような動作になっているのか、セルの値とかも確認しましょう。

guts
質問者

お礼

有難う御座いました。自己解決いたしました。

guts
質問者

補足

早速の助言有難う御座います。 自分で見ていてもおかしなForだと思います。 もう少し詳しく説明しますと、 mはifでもとめています。9から3まで。 o = Weekday(sunday, 1) + 1 If o = 2 Then m = 9 If o = 3 Then m = 8 If o = 4 Then m = 7 If o = 5 Then m = 6 If o = 6 Then m = 5 If o = 7 Then m = 4 If o = 8 Then m = 3 For i = o To 8 For n = 3 To m Cells(4, i) = Sheets("1").Cells(3, n) Next n Next i カレンダーの第1週目を求めたかったのです。 Sheets("1")のCells(3,3)に1日が入っていて           Cells(3,4)に2日・・のようになっています。 それを別のシートに抜き出したいのです。 Cells(3,2)は日 Cells(3,3)は月・・・ とカレンダーのようになっているので、 その曜日の下に日付を抜き出したかったのです。