引用具有多个条件的表格

我会尽可能准确地解释我的情况。

1 2 3 4 5 1 3352 3635 4458 4137 4690 2 3352 3635 4458 4137 4690 3 3352 3635 4458 4137 4690 4 3352 3635 4458 4137 4690 5 3352 3635 4458 4137 4690 

所以上面的表格纯粹是为了说明我的问题。 我的实际表格将包含更改的值。

我有另一个函数提供了一些值,例如:2和5。

所以基本上我只想在编号为2和5的列中search。我想知道最小值。

现在对于棘手的部分,我希望它旁边的最小成本返回值相应的行号(左侧1-5)。 现在最重要的一切。 如果有两个值相同,则应select行号最高的值。 所以最小值将是相同的,但它会返回最高的行号。

我一直在试用这个定期的excel函数几个星期,没有得到我想要的。 这个想法是有一个function,可以拖动和计算多次不同的input(不同的列引用)。 虽然我可以find复制的所有function。

我希望有人有一个想法。 我目前正在看VBA,但在那里我还没有能够build立一些工作。

提前致谢!

创build一个列的数组来检查,然后得到这些列的整体最小值:

 Sub MinFromColumns() Dim ColumnsToCheck(1 To 3) As Long Dim wf As WorksheetFunction Set wf = Application.WorksheetFunction ColumnsToCheck(1) = 2 ColumnsToCheck(2) = 5 ColumnsToCheck(3) = 7 overallmin = wf.Min(Columns(ColumnsToCheck(1))) For i = 2 To 3 If wf.Min(Columns(ColumnsToCheck(i))) < overallmin Then overallmin = wf.Min(Columns(ColumnsToCheck(i))) Next i MsgBox overallmin End Sub 

编辑#1:

以下是从工作表单元格中获取列select器的示例:

 Sub MinFromColumns() Dim ColumnsToCheck(1 To 3) As Long Dim wf As WorksheetFunction Set wf = Application.WorksheetFunction ColumnsToCheck(1) = Sheets("Sheet3").Range("K1") ColumnsToCheck(2) = Sheets("Sheet3").Range("L1") ColumnsToCheck(3) = Sheets("Sheet3").Range("M1") overallmin = wf.Min(Columns(ColumnsToCheck(1))) For i = 2 To 3 If wf.Min(Columns(ColumnsToCheck(i))) < overallmin Then overallmin = wf.Min(Columns(ColumnsToCheck(i))) Next i MsgBox overallmin End Sub 

编辑#2:

周一抵达比预期的更早。
删除旧的代码并将其replace为:

 Sub MinFromColumns() Dim OverallMin As Variant Dim ColumnsToCheck(1 To 3) As Long Dim wf As WorksheetFunction, r As Range Dim addy As String, rColumn As Range Set wf = Application.WorksheetFunction ColumnsToCheck(1) = Sheets("Sheet3").Range("K1") ColumnsToCheck(2) = Sheets("Sheet3").Range("L1") ColumnsToCheck(3) = Sheets("Sheet3").Range("M1") OverallMin = wf.Min(Columns(ColumnsToCheck(1))) For i = 2 To 3 Set rColumn = Columns(ColumnsToCheck(i)).Cells If wf.Min(rColumn) < OverallMin Then OverallMin = wf.Min(rColumn) Set r = rColumn.Find(what:=OverallMin) addy = r.Address(0, 0) End If Next i MsgBox OverallMin & vbCrLf & addy End Sub 

addy给出了最小值的确切位置(行和列)