引用具有多个条件的表格
我会尽可能准确地解释我的情况。
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给出了最小值的确切位置(行和列)