Excel VBA 質問スレッド №2078 (解決済)

指定した行範囲をループする方法

投稿者 : るふぃ     投稿日時 : 2025/02/08(Sat) 01:12:57     OS : 未指定     EXCEL : 未指定
下記画像のように、縦に日付が続くシートがあります。
この日付列の第1週だけをループするマクロを作りたいのですが、ご教授いただけないでしょうか?
イメージは、4行目~10行目ループした後step25し、35行目~41行目ループした後step25し.....最終行まで繰り返すです。
そもそも無理なことなのかもしれませんが、よろしくお願いします。

画像:https://ibb.co/s9VZQ1CX

作成マクロ:
Sub macro()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim count As Long
    Dim test As String

    test = "大阪"
    
    Set ws = ThisWorkbook.ActiveSheet
    
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    count = 0
    
    For i = 1 To lastRow
        If ws.Cells(i, 2).Value = test Then
            count = count + 1
        End If
    Next i
 
    ws.Cells(1, 3).Value = count
End Sub

スポンサーリンク
[返信 1] Re : 指定した行範囲をループする方法
投稿者 : とおりすがり     投稿日時 : 2025/02/08(Sat) 04:59:16
Forステートメントのいろんな使い方を覚えましょう

Sub sample()
  For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row Step 31
      For j = i To i + 6
          Debug.Print j; Cells(j, "B")
      Next
  Next
End Sub

[返信 2] Re : 指定した行範囲をループする方法
投稿者 : ピロリ     投稿日時 : 2025/02/08(Sat) 11:33:45
■[質問] るふぃさん(2025-02-08 01:12:57)の記事
> イメージは、4行目~10行目ループした後step25し、35行目~41行目ループした後step25し.....最終行まで繰り返す
1つのループで上のような考え方なら↓下のようにも記述できますが、[返信 1] とおりすがりさんの2重ループの方が
分かり易いコードですね。

Sub macro()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim count As Long
    Dim test As String
    Dim d As Long                           'これを追加
    
    test = "大阪"
    
    Set ws = ThisWorkbook.ActiveSheet
    lastRow = ws.Cells(ws.Rows.count, "A").End(xlUp).Row
    
    count = 0
    d = 1                                   'これを追加
    For i = 4 To lastRow                    '4行目からループさせましょう
        If ws.Cells(i, 2).Value = test Then
            count = count + 1
        End If
        
        If d = 7 Then                       'ここから、
            i = i + 24
            d = 0
        End If
        d = d + 1                           'ここまで追加
    Next i
    
    ws.Cells(1, 3).Value = count
End Sub

[返信 3] Re : 指定した行範囲をループする方法
投稿者 : 通行人     投稿日時 : 2025/02/09(Sun) 14:40:21
CountIf関数を使って、こんな感じでも。

Sub macro2()
    Dim ws As Worksheet
    Dim i As Long
    Dim count As Long
    Dim test As String
    
    test = "大阪"
    Set ws = ThisWorkbook.ActiveSheet
    count = 0
    For i = 4 To ws.Cells(Rows.count, "A").End(xlUp).Row Step 31
        count = count + WorksheetFunction.CountIf(ws.Cells(i, "B").Resize(7, 1), test)
    Next i
    ws.Cells(1, "C").Value = count
End Sub

[返信 4] Re : 指定した行範囲をループする方法
投稿者 : るふぃ     投稿日時 : 2025/02/12(Wed) 12:12:51
とおりすがり様
ピロリ様
通行人様

おかげさまで解決いたしました。
ありがとうございます。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-05 17:32:55 )
タイトルとURLをコピーしました