【问题标题】:Referencing a table with multiple criteria引用具有多个条件的表
【发布时间】:2015-06-07 04:11:02
【问题描述】:

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

    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 的列中搜索。我想知道最小值。

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

我已经用常规的 excel 函数尝试了几个星期,但没有得到我想要的。这个想法是有一个函数,可以用不同的输入(不同的列来引用)多次向下拖动和计算。虽然所有功能我都可以找到复杂的地方来复制。

我希望有人有想法。我目前正在研究 VBA,但我还没有能够构建有效的东西。

提前致谢!

【问题讨论】:

    标签: excel vba sorting selection


    【解决方案1】:

    制作一个要检查的列数组,然后获取这些列的总最小值:

    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:

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

    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:

    星期一比预期来得早。
    删除旧代码并将其替换为:

    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 给出最小值的准确位置,(行和列)

    【讨论】:

    • 非常感谢您的快速答复!我想知道的是如何将 ColumnsToCheck 链接到电子表格中的某些单元格。
    • @Confusion752 查看我的EDIT#1
    • 你是救生员!使用常规的 excel 功能进行了数周的刺激,但无济于事。我想再问一件事。如果我想通过说我想限制行输入来使这更复杂一点。这意味着某些选定的单元格正在限制列,而其他一些单元格正在限制行。例如,如果我要选择第 2 行和第 3 行(行只需要 2 个输入限制),那么我希望它返回限制列中具有相应最小值的行号(对于两行中的每一行)。以及该值来自的列号。
    • @Confusion752 这将需要更多代码......周一回来看看。
    • 非常感谢您到现在为止的帮助。我会在星期一回来查看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2015-02-15
    • 1970-01-01
    • 2012-10-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多