excel VBA For~Next構文で行き詰っていませんか?|Excel VBA Tips

このQ&Aのポイント
  • Excel VBAのFor~Next構文について質問です。特定の条件で処理をスキップしたい場合、GoTo文を使う方法がありますが、もっとシンプルな方法はないか検討しています。
  • 現在、下記のようなマクロがあります。 For i = 4 To 178 Cells(i, 16).FormulaR1C1 = "=RC[-2]-'" & Lm & "'!RC[-2]" Next i ここに、「もしCells(i, 1)が空白ならば次の行にスキップする」という指示を追加したいと思っています。
  • 現在、GoTo文を使用して条件に該当する場合にワープするように処理を追加していますが、もっとスマートな方法はないでしょうか?
回答を見る
  • ベストアンサー

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  これで一応こちらの求めている処理はできたのですが、もっと簡単に(もしくはすっきりと) できる方法はないでしょうか?  以上、よろしくお願いいたします。   

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>もし と言えばIfでしょう。 for i = 4 to 178  if celsl(i, 1) <> "" then   cells(i, 16).formula = …  end if next i

AMEFURIO
質問者

お礼

早速のご回答、ありがとうございました。 <> というのを知りませんでした。 実際のマクロでもスムーズにいきました。 ありがとうございました。

関連するQ&A

  • For ~ Next の使い方

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

  • 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っていらないんじゃないでしょうか?

    For i = 1 to 9 Next i と Do i = i + 1 Loop Until i = 9 はほとんど一緒じゃないのでしょうか? For Nextは使わなくてもDo Untilで代用できるんじゃないでしょうか?

  • 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 がうまくいきません。

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

  • VBAのfor...next構文で i = A to Z としたい。

    VBAでfor...next構文で通常  for i = 1 to 100 などとしますが、それをA~Zまでとする場合どのようにすればよいでしょうか?

  • For next使う場合、next iはできない?

    vbsでFor next使う場合、next iはできないのですか? for i = 1 to 2 msgbox "" next i をすると "ステートメントの末尾が不正です"800A401 になります。 しかし for i = 1 to 2 msgbox "" next にすると、問題ないです。 VBAではnext iでも実行できるけどVBSではだめなのでしょうか? 理由を教えてください。

  • エクセルマクロの【For・・・Next】で、

    エクセルマクロの【For・・・Next】で、以下のような文を作ってます。 Sub 空欄を消す() For i =1 To 50 If Cells(i + 3,8) = "" Then Rows(i + 3).Hidden = True End If Next End Sub この繰り返す回数【50回】を、シート上の任意のセルの値の回数に変えることはできますか。 例えば「A1」のセルの値が30なら30回繰り返す。 「A1」のセルの値が20なら20回繰り返す。 といったような具合に。

  • For Next構文について

    こんにちは、For Next構文について質問させてください。 F列に0~5の数字が入ったデータがあります。(データが入っているのは AG列までです。F列以外には数字以外に色々データが入っており、A列は空白です。) このデータをF列0~5でオートフィルタをして、A列にそれぞれの数字ごとに 連番を振りたいのですが、どう頑張っても0~5まで連番で番号が振られてしま います。(やりたいのは、数字の0のデータが終わったら次は1のデータでまた 「1」から、1のデータが終わったら次は2のデータで「1」から番号を振るという作業です。) 色々試行錯誤して、一番下の値になったら1の値に戻るとしてみましたが、だめでした…。(If Cells(ビスケット, 3) = スパゲティ Then 和菓子 = 1の部分です。) どなたか、どの記述が悪いのか、ご教授いただけると嬉しいです!よろしくお願いいたします!(T_T) Dim マシュマロ As Integer Dim 和菓子 As Integer Dim ビスケット As Long Dim スパゲティ As String For マシュマロ = 0 To 5 Range("A2:AG" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=6, Criteria1:=マシュマロ スパゲティ = Range("C1").End(xlDown).Value 和菓子 = 1 For ビスケット = 2 To Range("A2").End(xlDown).Row If Cells(ビスケット, 3) <> "" Then Cells(ビスケット, 1) = 和菓子 和菓子 = 和菓子 + 1 End If If Cells(ビスケット, 3) = スパゲティ Then 和菓子 = 1 End If Next Next マシュマロ

  • 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

専門家に質問してみよう