実行画面
■期間を検索する入力された元データ
■先月の日付から行番号を検索した結果
見つかった日付は、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