複数枚のワークブックがあります。概要シートを除いて、他のすべてのシートには、日付形式の値を格納する連続セル(列内)のダイナミックレンジがあります。その範囲を動的に選択し、最大の日付値を選択する必要があります。関数はその値を返す必要があります。
これが私が試していたものです:
Function GetMSDate(Counter As Integer, DesignCtrs() As String, NumOfVendors() As Long,
MSDesc() As String, PlanOrActual As String) As Date
GetMSDate = Application.Max(ThisWorkbook.Worksheets(Counter + 1).Range("A:A")
.Find(PlanOrActual, SearchOrder:=xlByColumns, searchDirection:=xlNext)
.EntireRow
.Find(MSDesc(1), SearchOrder:=xlByColumns, searchDirection:=xlNext)
.Offset(1, 0).Address & ":" & _
ThisWorkbook.Worksheets(Counter + 1).Range("A:A")
.Find(PlanOrActual, SearchOrder:=xlByColumns, searchDirection:=xlNext)
.EntireRow
.Find(MSDesc(1), SearchOrder:=xlByColumns, searchDirection:=xlNext)
.Offset(NumOfVendors(Counter) + 1, 0).Address)
MsgBox GetMSDate
End Function
私の意図は、Application.Max()
引数に対して動的に構築された範囲を定義することでした。そうすることで、範囲アンカーを見つけて、正しいシートを選択します(Counter+1
それを正しく許可します)。次に、最初の列で特定の「事前定義された」文字列を見つけます。見つかったセルの行全体を選択し、その範囲内で別の事前定義された文字列を見つけます。次に、そのアンカーセルの下のセルから、次のように定義されるオフセットまでの範囲が定義されます。NumOfVendors(Counter)+1
上記を実行すると、次のようになります。
「GetMSDate="」ステートメントで「不一致エラー」と入力します。