• 締切済み

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 --------- 上記のようにしたかったのですが、 どうしてもうまくいきません。 どなたか宜しくお願します。

  • guts
  • お礼率52% (13/25)

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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)は月・・・ とカレンダーのようになっているので、 その曜日の下に日付を抜き出したかったのです。

関連するQ&A

  • FOR~NEXTで

    よろしくお願いします。 条件が2個あるときの、繰り返し動作を下記のようにマクロにて組みましたが、うまく作動しません。 目的 Cells(q, 1)が空白で無い時で Cells(q, 2)が空白ならば、Cells(q, 2)に”○”を記入する 上記を300回行う で、作ったつもりなんですが、Cells(q, 1)が空白の箇所で終了してしまいます。 q = 1 For I = 1 To 300 If Cells(q, 1) = "" Then Exit For If Cells(q, 2) = "" Then Cells(q, 3) = "○" q = q + 1 Next I よろしくお願いします。

  • VBA For~Next 

    「wsData」の値を「wsInv」の指定セル(=●●●=16)から4つおきに処理したい。 01:Cells(16 + i * 4, 1) とすると「i」が大きいときに   「""」があると16からスタートしない 02:「For k = 0 To 50」を作成したが、何処に入れても上手く処理出来ない。 For i = 0 To 50 '行 For j = 6 To 28 '列 If wsData.Cells(10 + i, 3).Value = "" Then wsInv.Cells(●●●, 1).Value = wsData.Cells(10 + i, 1).Value wsInv.Cells(●●●, j - 2).Value = wsData.Cells(10 + i, 23 + j).Value End If Next j Next i お力添えをお願いいたします。

  • EXCEL VBAのFor...Nextについて

    VBA初心者です。よく理解していませんので、質問も的を得ていないかもしれませんが、ご指導宜しくお願いいたします。  現在、For...Nextを使った表計算をしています。 A列に「す」という文字が含まれていたら、B列の「す」の行に「あ」と「い」と「え」「か」のセルの合計をだす。C列、D列・・・最終列まで計算する。 上記VBAを作成する方法を教えて下さい。 A  B  C  D  E   F  G  H  I  J  K  L 1 2    3    4   5    6    7    8    9    10    11 12 あ  1 2 3 4   5 6 7 8 9 10 11 い 10 20 30 40  50 60 70 80 90 100 110 う 20 30 40 50   60 70 80 90 100 110 120 え 40 50   60  70 80 90  10 20 120 130 30 お 50 60   70  80 90 10  20 30 130 140 40 か 60 70   80  90 10 20  30 40 140 150 50 す 私は表に1~12まで数字をインプットし下記のようなコードを考えました。 Sub 列合計() Dim i, k, l, m, n As Long j = 2 For i = 6 To 120 For k = 6 To 120 For l = 6 To 120 For m = 6 To 120 For n = 6 To 120 If Cells(i, 1) = "す" And Cells(k, 1) = "あ" And Cells(l, 1) = "い" And Cells(m, 1) = "え" And Cells(n, 1) = "か" Then Do While j <= Range("A2").End(xlToRight) Cells(i, j) = Cells(k, j) + Cells(l, j) + Cells(m, j) + Cells(n, j) j = j + 1 Loop Else: End If Next n Next m Next l Next k Next i End Sub この内容だとエラーが出てしまいます。 補足ですが、あいうえおかの順番はかわったり、間に他の行が入ったりします。 また今回はL列の間としましたが、もっと列が増え、最終列まで計算する方法を知りたいのですが、どうぞ宜しくお願い致します。 ※ofice2013です。

  • EXCEL VBA のFor~Next文で質問です。

    お世話になります。VBA初心者です。 環境はWIN2000,EXCEL2000です。 下記のようなマクロを組んだらNextに対するForがありませんと、エラーが出てしまいました。 申し訳ありませんが、手直しお願いします。 やりたいことは、D97へコピーが終わったら、次はM7からコピーをし、M97へのコピーが終わったらV7からコピーを始めたいのです。 With sheetGR For ii = 7 To 97 Step 10(行の指定) For iii = 4 To 31 Step 9(列の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If Exit For If Cells(97, iii) <> "" Then Next iii End If Next ii End With

  • 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の表示で可能だといろいろ調べてわかったのですが、実際にやるとうまくいきません。 どこが間違っているのでしょうか? 学習不足ではありますが、よろしくお願いします。

  • For ~ Next の使い方

    for ~ next 構文の途中でカウンターを進めることはできますか。 For I=1 to 10 処理 if ~ then next 処理 next このようにすると、エラーになります。 仕方なく次のようにしていますが、もっと良い方法はありますか。 For I=1 to 10 処理 if ~ then goto 次の行へ 処理 次の行へ: next

  • excel VBA For ~Next構文について

    excel VBA For ~Next構文についての質問です。 以下のようなマクロがあります(実際はもう少し複雑なことをやっていますが)     For i = 4 To 178      Cells(i, 16).FormulaR1C1 = "=RC[-2]-'" & Lm & "'!RC[-2]"     Next i これに「もし、『Cells(i, 1)』が空白なら、この処理は行わずに、次の行にすすめ」という指示を加えたいのですが、こんな簡単なこと(?)で行き詰ってしまっています。 とりあえず以下のように修正をしてみたのですが・・・    For i = 4 To 178    If Cells(i, 1) = "" Then GoTo ワープ:    Cells(i, 16).FormulaR1C1 = "=RC[-2]-'" & Lm & "'!RC[-2]"    ワープ:   Next i  これで一応こちらの求めている処理はできたのですが、もっと簡単に(もしくはすっきりと) できる方法はないでしょうか?  以上、よろしくお願いいたします。   

  • For Next構文を使ったVBA

    こんにちは、VBAについて質問をさせてください!(>_<) 同じブックにシート「テスト」と「Sheet1」があり、「テスト」にはデータの入力欄、「Sheet1」には「テスト」に入力するためのデータが入っています。「テスト」の入力欄は「Sheet1」のデータの並び順と同じですが、入力したデータ同士に4行3列ずつデータを入力しないセルを作らなくてはなりません。 また、データを入力するセルは「テスト」の5列目8行目=「Sheet1」3列目2行目~「テスト」の20列目8行目=「Sheet1」8列目2行目のように、まず列番号を増やし、列番号が最大になったら行番号が増え、列番号はまた初期値から増えます。したがって、次は「テスト」の5列目9行目=「Sheet1」の3列目3行目~「テスト」の20列目9行目=「Sheet1」の8列目3行目になります。 上記を踏まえてVBAを作成してみたのですが、このままではi,j,k,l全ての値がNextで増えてしまいます。Ifを使ったりするのかと色々ネットで調べて考えてみましたが、行き詰まってしまいました。どなたかご教授いただけるととても嬉しいです。説明が長く申し訳ないです、わかりづらければ補足させていただくので、おっしゃってください! Dim i, j, k, l As Integer For i = 5 To 20 Step 3 'シート「テスト」の列 For j = 8 To 116 Step 4 'シート「テスト」の行 For k = 3 To 8 'シート「Sheet1」の列 For l = 2 To 39 'シート「Sheet1」の行 Cells(j, i).Value = Sheets("Sheet1").Cells(l, k).Value Next l Next k Next j Next i

  • For Next 式の結果をセル表示

    Dim i, p  For i = 1 To 9   For p = 1 To 9     Cells(i, i * p).Value = i * p    Next p   Next i  End Sub ↑の式ではA、1~I、9に  結果が出るのですが  その結果を縦にひとつづつ表示したいのです  (たとえばA1~A81へ)  その場合はもうひとつ変数を宣言して  変数に表示したいセルの情報を記入するのですか?  もしくは変数を宣言しなくても可能ですか?    できれば双方のサンプルを教えていただければ  幸いです

  • Excel上で関数を入れるコード For Next

    C列にExcel上で関数を上から下へ入れるコードを教えて下さい。 お世話になっています。 いつも質問ばかりですみません。 A列に項目、B列に日付が入っているリストがあります。 今回、C列にその月の第何周目かを求める関数 =WEEKNUM(B1)-WEEKNUM(DATE(YEAR(B1),MONTH(B1),1))+1 を入力したいです。 このエクセルシート上の関数のB1をB2、B3、B4と変化させて行きたいのですが 以下私のコードを書きましたが、 記載した時点で「"=WEEKNUM」から二行が赤字で表示されてしまいます。 ------------------------------------------------------ Sub 私の書いた第何週目かをC列に求めるコード() Dim i As Integer For i = 1 To Range("a1").End(xlDown).Row Sheets("Sheet1").Cells(i, "3").Formula = _ "=WEEKNUM(" & "(Cells(i, 2)"&")-WEEKNUM(DATE(YEAR(" & "(Cells(i, 2)" &),MONTH(" & "(Cells(i, 2)" & "),1))+1)" Next i End Sub ------------------------------------------------------ 方法を教えていただけないでしょうか。 すみませんが、よろしくお願い致します。

専門家に質問してみよう