アットウィキロゴ
播種記録を検索する関数

Function FindSowData(StartDate As Date, _
                     Enddate As Date, _
                     Optional House As Variant = "", _
                     Optional Product As String = "", _
                     Optional Seed As String = "") As Variant
   '播種記録を検索する関数
   '引数
   '   検索開始期間
   '   検索終了期間
   '   ハウス          Option
   '   品目            Option
   '   品種            Option
   '
   '戻り値
   '   播種番号を配列で返す
   '   対応データがない場合Nothing
 
   Dim SrcBook As Workbook
   Dim SrcSheet As Worksheet
   Dim SrcData As Range
   Dim TempSheet As Worksheet
   Dim CriteriaA() As Variant
   Dim CriteriaR As Range
   Dim DistRange As Range
   Dim ResultArray As Variant
   
   
'    Application.ScreenUpdating = False
   On Error GoTo err1
   '元データ範囲
   Set SrcData = Workbooks("播種記録2006.xls").Worksheets("播種記録").Range("$A$6:$N$239")
   '抽出用シートを用意
'    Set TempSheet = Worksheets.Add
   Set TempSheet = Worksheets("Temp")

   'Criteria範囲を設定
   Set CriteriaR = TempSheet.Range("A1:E2")
   '抽出先範囲を設定
   Set DistRange = TempSheet.Range("A5")
   DistRange.Value = "番号"
   ReDim CriteriaA(1 To 2, 1 To 5)
   CriteriaA(1, 1) = "播種日" '開始日
   CriteriaA(1, 2) = "播種日" '終了日
   CriteriaA(1, 3) = "ハウス" '
   CriteriaA(1, 4) = "品目" '
   CriteriaA(1, 5) = "品種" '
   
   CriteriaA(2, 1) = ">=" & StartDate  '開始日
   CriteriaA(2, 2) = "<=" & Enddate    '終了日
   CriteriaA(2, 3) = House      '
   CriteriaA(2, 4) = Product    '
   CriteriaA(2, 5) = Seed       '
   CriteriaR = CriteriaA

   'Criteriaによる抽出
   On Error GoTo err2
   SrcData.AdvancedFilter Action:=xlFilterCopy, _
       CriteriaRange:=CriteriaR, _
       CopyToRange:=DistRange, _
       Unique:=False
   
   Set DistRange = DistRange.CurrentRegion
   Set DistRange = DistRange.Offset(1, 0).Resize(DistRange.Rows.Count - 1, 1)
   Set ResultArray = DistRange
   
   '結果の行数をカウントする
   If ResultArray.Rows.Count > 1 Then
       FindSowData = ResultArray
   Else
       FindSowData = False
   End If

   GoTo WindUp
err1:   '設定時のエラー
   MsgBox "設定時のエラー"
   FindSowData = False
   GoTo WindUp

err2:   'フィルタ時のエラー
   MsgBox "フィルタ時のエラー"
   FindSowData = False
   GoTo WindUp

WindUp: '後始末-終了
myTimer3 = Timer
   CriteriaR.Clear
   DistRange.Clear
   On Error Resume Next
'    Application.DisplayAlerts = False
'    TempSheet.Delete
'    Application.DisplayAlerts = True
   Set SrcBook = Nothing
   Set SrcSheet = Nothing
   Set SrcData = Nothing
   Set TempSheet = Nothing
   Set CriteriaR = Nothing
   Set DistRange = Nothing
   Set ResultArray = Nothing
End Function
最終更新:2007年02月18日 00:17