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

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

Step11で先週と今週の日付に対応する、行範囲を検索しました。
今回は、先月と今月の日付に対応する、行範囲を検索します。

実行方法は、先週と今週と同様に開始日と終了日を引数に、MyFindDateを実行します。

メニューに戻る


スポンサードリンク



実行画面

■期間を検索する入力された元データ
家計簿の期間データの日付検索

■先月の日付から行番号を検索した結果
  見つかった日付は、2009/07/02〜2009/07/31 で 15〜26行の範囲に該当しています。
先月のデータ範囲を検索

■今月の日付から行番号を検索した結果
  見つかった日付は、2009/08/01〜2009/08/31 で 27〜28行の範囲に該当しています。
今月のデータ範囲を検索

スポンサードリンク



実行コード

'期間内の行の範囲を調べる
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

'先月ボタン
Private Sub CommandButton4_Click()
    Dim stdt As Date
    Dim endt As Date
    Dim strow As Long
    Dim enrow As Long
    
    ExGetAgoMonth stdt, endt

    Debug.Print stdt & "  〜  " & endt

    MyDataSort
    
    '期間内の行の範囲を調べる
    MyFindDate stdt, endt, strow, enrow

End Sub

'今月ボタン
Private Sub CommandButton5_Click()
    Dim stdt As Date
    Dim endt As Date
    Dim strow As Long
    Dim enrow As Long
    
    ExGetThisMonth stdt, endt

    Debug.Print stdt & "  〜  " & endt

    '期間内の行の範囲を調べる
    MyFindDate stdt, endt, strow, enrow
End Sub

スポンサードリンク





メニューに戻る

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


関連コンテンツ

Copyright (c) Excel-Excel ! All rights reserved