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

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

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

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


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

実行画面

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

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

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


実行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

'先月ボタン
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


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

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


Copyright (c) Excel-Excel ! All rights reserved