• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 指定行飛ばしてLOOP処理したい。)

VBAでループ処理を行いたい

このQ&Aのポイント
  • VBAで指定行をスキップしてループ処理を行いたいです。具体的には、Retsu_01の処理を15ずつずらして、Retsu_02の処理を行いたいです。
  • Excelの特定のセルに日付が入力されている場合に、隣のセルの背景色を変更する処理を行いたいです。
  • ループ処理の中で特定の条件に合致する場合に処理を行いたいです。具体的には、指定したセルが日付であり、その隣のセルが空白の場合に、別のセルの背景色を変更する処理です。

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.4

ANo.3です。 勘違いしていた部分がありましたのでコードを訂正します。 Sub SAMPLE_work()   Dim Gyo_01 As Integer, Retsu_01 As Integer   For Gyo_01 = 3 To 1300     For Retsu_02 = 10 To 23       nStart = Retsu_02 * 16 - 134       For Retsu_01 = nStart To (nStart + 14)         If TypeName(Cells(Gyo_01, Retsu_01).Value) <> "Date" Then              'ここの処理は?         ElseIf Cells(Gyo_01, Retsu_01).Value >= Date And Cells(Gyo_01, Retsu_01 + 1).Value = "" Then           Cells(Gyo_01, Retsu_02).Interior.ColorIndex = 20         End If       Next Retsu_01     Next Retsu_02   Next Gyo_01 End Sub

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

>For Retsu_01 = 26 To 41 >’★ ↑このループの次の処理を 42 to 57 ・ 58 to 73 ....と15づつズラシテ処理したい。 外側の「For Gyo_01 = 3 To 1300 ・・・・ Next Gyo_1」ループとの関係は? 「指定行飛ばしてLOOP処理したい。」との希望が何を意味しているかが分かりません。 フローチャートを書いて仕事の流れを明確にしないと無駄な悪足掻きをすることになります。 >For Retsu_02 = 10 To 23 >’★ ↑この数値はRetsu_01の1回の処理につき一つづつ増加(画像のG1.G2.G3.....) G1~G16をRetsu_01のループで条件に見合うとき塗りつぶしを行っているようですが、無駄なチェックをしているようです。 >Next Retsu_●● '★ ←これがをどうしたら良いかわかりません Next Retsu_02 が必要です。 尚、Next Retsu_01 も提示のコードにはありませんので追加が必要でしょう。 他に「ElseIf Cells(Gyo_01, Retsu_01).Value = Date And Cells(Gyo_01, Retsu_01 + 1).Value = "" Then」の論理式「Cells(Gyo_01, Retsu_01).Value = Date」は再確認が必要かと思います。(タイプミス?または値の勘違い?) 当方で動作確認した範囲で添削した結果は次のとおりです。 Sub SAMPLE() Dim Gyo_01 As Integer, Retsu_01 As Integer For Gyo_01 = 3 To 1300 For Retsu_01 = 26 To 41 If TypeName(Cells(Gyo_01, Retsu_01).Value) <> "Date" Then ElseIf TypeName(Cells(Gyo_01, Retsu_01).Value) = "Date" And Cells(Gyo_01, Retsu_01 + 1).Value = "" Then For retsu_02 = 10 To 23 Cells(Gyo_01, retsu_02).Interior.ColorIndex = 20 Next retsu_02 End If Next Retsu_01 Next Gyo_01 End Sub 但し、「指定行飛ばしてLOOP処理したい。」との要望は意味不明のため加味されていません。

wata_oc3
質問者

補足

迅速に対応頂きありがとうございます。 勉強になりました。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

出所が解らないExcelブックは怖いのでダウンロードしていません。 こういう事がやりたいのでしょうか? Sub SAMPLE_work() Dim Gyo_01 As Integer, Retsu_01 As Integer For Gyo_01 = 3 To 1300   For Retsu_02 = 10 To 23     For Retsu_01 = Retsu_02 To (Retsu_02 + 15)       'ここで良いのかな?       If TypeName(Cells(Gyo_01, Retsu_01).Value) <> "Date" Then            'ここの処理は?       ElseIf Cells(Gyo_01, Retsu_01).Value = Date And Cells(Gyo_01, Retsu_01 + 1).Value = "" Then         Cells(Gyo_01, Retsu_02).Interior.ColorIndex = 20       End If     Next Retsu_01   Next Retsu_02 Next Gyo_01 End Sub

wata_oc3
質問者

補足

連絡ありがとうございます。 不慣れなもので、申し訳ございません。 上手く処理できませんでしたが、近いと思います。 勉強不足で原因もわかりません。 グループ01の計算は以下で出来ます。 Dim Gyo_01 As Integer, Gyo_02 As Integer For Gyo_01 = 3 To 1300 For Retsu_01 = 26 To 39 If TypeName(Cells(Gyo_01, Retsu_01).Value) <> "Date" Then ElseIf Cells(Gyo_01, Retsu_01).Value >= Date And Cells(Gyo_01, Retsu_01 + 1).Value = "" Then Cells(Gyo_01, 10).Interior.ColorIndex = 20 End If Next Retsu_01 Next Gyo_01 グループ02.03..と13迄処理を続けたいです。 G1 検索範囲 26 To 39 反映セル 10 G1 検索範囲 42 To 57 反映セル 11 G1 検索範囲 58 To 73 反映セル 12 ・・・・ G1 検索範囲 234 To 249 反映セル 23 お力添えをお願いいたします。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

現コードを生かすなら Sub SAMPLE()  Dim Gyo_01 As Integer, Retsu_01 As Integer  Dim BlocCount as integer  BlocCount = 0  For Gyo_01 = 3 To 1300   For Retsu_01 = 26 To 249    if ((Retsu_01 - 10) mod 16 = 0) then     BlocCount = BlocCount + 1    end if    for Retsu_02 = (BlocCount-1 + 10) To (BlocCount-1 + 10 + 13)    Next Retsu_02   Next Retsu_01  Next Gyo_01 End Sub といった感じでしょうか。 動作確認はしていません。悪しからず。

wata_oc3
質問者

補足

現コードをいかさなくても問題ありません。 勉強不足につきそもそもの定義が違う可能性があります。 グループ01の計算は以下で出来ます。 Dim Gyo_01 As Integer, Gyo_02 As Integer For Gyo_01 = 3 To 1300 For Retsu_01 = 26 To 39 If TypeName(Cells(Gyo_01, Retsu_01).Value) <> "Date" Then ElseIf Cells(Gyo_01, Retsu_01).Value >= Date And Cells(Gyo_01, Retsu_01 + 1).Value = "" Then Cells(Gyo_01, 10).Interior.ColorIndex = 20 End If Next Retsu_01 Next Gyo_01 グループ02.03..と13迄処理を続けたいです。 G1 検索範囲 26 To 39 反映セル 10 G1 検索範囲 42 To 57 反映セル 11 G1 検索範囲 58 To 73 反映セル 12 ・・・・ G1 検索範囲 234 To 249 反映セル 23 お力添えをお願いいたします。

noname#232800
noname#232800
回答No.1

Swith Case は使え・・While Wend で良いと 処理しようと、終いと50回まわす場合は For loop_i=0 to 49 ってやるけど、条件が合うなら入る・・・って言うのは For 使わない。

wata_oc3
質問者

補足

連絡ありがとうございます。 「Swith Case」勉強してみます。 今後ともよろしくお願いいたします。

関連するQ&A