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

解決済みの質問

VBA 指定行飛ばしてLOOP処理したい。

LOOP処理で困っております。
お返事をいただけると幸いです。
”★” 部分の構文が判りません。何卒よろしくお願いいたします。

こちらにEXCELBOOKがあります。
https://www.tenpu.me/download/b0zpgttzagnaj11pl9bh8c6ahb0yayji
ファイル解凍PASS:0109

Sub SAMPLE()
Dim Gyo_01 As Integer, Retsu_01 As Integer
For Gyo_01 = 3 To 1300
  For Retsu_01 = 26 To 41
 ’★ ↑このループの次の処理を 42 to 57 ・ 58 to 73 ....と15づつズラシテ処理したい。
  最終が234 To 249 で終わる(画像のグループ01.グループ02......)
   For Retsu_02 = 10 To 23
 ’★ ↑この数値はRetsu_01の1回の処理につき一つづつ増加(画像のG1.G2.G3.....)
  Retsu_01 = 26 To 41 の時は10
  Retsu_01 = 42 To 57 の時は11
  Retsu_01 = 58 To 73 の時は12
  Retsu_01 = 234 To 249 の時は23

 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_●● '★ ←これがをどうしたら良いかわかりません
 Next Gyo_01
End Sub

投稿日時 - 2018-01-09 11:43:23

QNo.9416566

困ってます

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

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

投稿日時 - 2018-01-09 15:57:08

ANo.4

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

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

回答(5)

ANo.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処理したい。」との要望は意味不明のため加味されていません。

投稿日時 - 2018-01-09 23:03:33

補足

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

投稿日時 - 2018-01-10 11:10:33

ANo.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

投稿日時 - 2018-01-09 13:22:54

補足

連絡ありがとうございます。
不慣れなもので、申し訳ございません。
上手く処理できませんでしたが、近いと思います。
勉強不足で原因もわかりません。

グループ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

お力添えをお願いいたします。

投稿日時 - 2018-01-09 15:26:06

ANo.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

といった感じでしょうか。
動作確認はしていません。悪しからず。

投稿日時 - 2018-01-09 13:05:22

補足

現コードをいかさなくても問題ありません。
勉強不足につきそもそもの定義が違う可能性があります。

グループ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

お力添えをお願いいたします。

投稿日時 - 2018-01-09 15:27:11

ANo.1

Swith Case は使え・・While Wend で良いと

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

投稿日時 - 2018-01-09 12:38:55

補足

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

投稿日時 - 2018-01-09 15:28:57