Excelで家計簿ソフトを作ってみよう

Step 11 先週と今週の期間から日付を検索し行範囲を探す

先週か今週の開始日~終了日が、表内の対応する日付の行範囲を検索します。

手順

1)開始日が日付の最大日内にあるかチェックします。

2)終了日が日付の最小日以上にあるかチェックします。

3)開始日を終了日までループし、期間内の開始日を検索します。
  日付の検索は、Findメソッドで行っています。

4)終了日の行を、ループしさがします。



Homeに戻る > Excelでアプリケーションソフト2 > 家計簿ソフト

実行画面

■期間を検索する入力された元データ
先週の家計簿データ範囲

■今週の日付から行番号を検索した結果
  見つかった日付は、2009/07/13~2009/07/19 で 24~26行の範囲に該当しています。
今週の家計簿データ範囲

実行VBAコード

'期間内の行の範囲を調べる
Private Function MyFindDate(ByVal stdt As Date, _
ByVal endt As Date, ByRef lstr As Long, _
ByRef lenr As Long) As Long     Dim rng As Range
    Dim lpos As Long
    
    MyFindDate = 0
    lstr = 0
    
    '日付が範囲内にあるかどうか。なければぬける
    If Application.Max(Sheets("日々の収入・支出入力").Range("B12:B65536")) < stdt Then Exit Function
    If Application.Min(Sheets("日々の収入・支出入力").Range("B12:B65536")) > endt Then Exit Function
    
    '開始日の日付を検索
    Do
        Set rng = Worksheets("日々の収入・支出入力").Range("B12:B65536").CurrentRegion
        Set rng = rng.Find(Format(stdt, "yyyy年mm月dd日(aaa)"), , xlValues)
        If Not rng Is Nothing Then
            lstr = rng.Row
            Exit Do
        End If
        stdt = stdt + 1
        If stdt > endt Then
            Exit Do
        End If
    Loop
    
    '見つからなければぬける
    If lstr = 0 Then Exit Function
    
    '終了日の行を探す
    lpos = 1
    Do
        If Cells(lstr + lpos, 2) = "" Then
            lenr = lstr + lpos - 1
            Exit Do
        End If
        
        If Cells(lstr + lpos, 2) > endt Then
            lenr = lstr + lpos - 1
            Exit Do
        End If
            
        lpos = lpos + 1
    Loop
    
    'テスト用
    MsgBox stdt & " ~ " & endt & vbCrLf & vbCrLf & "開始行 : " & lstr & "   終了行:" & lenr
End Function


Homeに戻る > Excelでアプリケーションソフト2 > 家計簿ソフト

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved