Excel VBA根据where类的最小值到最大值查找范围内的单元格地址

Excel VBA根据where类的最小值到最大值查找范围内的单元格地址,excel,excel-formula,vba,Excel,Excel Formula,Vba,请在下面的场景中帮助我 我需要遍历一个范围并找到最小值。若另一个范围中的对应值匹配,那个么我需要找到列号 我可以做以下代码;但是,当存在多个最小值时,以下代码始终给出第一个最小值列编号。即使不满足条件,它也不会移动到下一个最小值列 这是我想申请的课程 MyOrder = 1 Do Until wksSkill.Cells(MyRow, MyColNum).Value <> "Exclude" MyColNum = Applica

请在下面的场景中帮助我

我需要遍历一个范围并找到最小值。若另一个范围中的对应值匹配,那个么我需要找到列号

我可以做以下代码;但是,当存在多个最小值时,以下代码始终给出第一个最小值列编号。即使不满足条件,它也不会移动到下一个最小值列

这是我想申请的课程

        MyOrder = 1
        Do Until wksSkill.Cells(MyRow, MyColNum).Value <> "Exclude"
            MyColNum = Application.Evaluate("=CELL(""col"", INDEX(" & MyColRange.Address(0, 0) & ", MATCH(SMALL(" & MyColRange.Address(0, 0) & ",   " & MyOrder & " ), " & MyColRange.Address(0, 0) & ", 0)))")
            MyOrder = MyOrder + 1
        Loop
MyOrder=1
直到wkskill.Cells(MyRow,MyColNum).值“Exclude”
MyColNum=Application.Evaluate(“=CELL”(“col”),索引(&MyColRange.Address(0,0)和),匹配(SMALL(&MyColRange.Address(0,0)和“&MyOrder&”,&MyColRange.Address(0,0)和“&MyColRange.Address(0)))
MyOrder=MyOrder+1
环
首先从另一个if语句传递“MyColNum”值,然后它将获得函数输出。它一直工作到范围有一个最小值为止


请帮助我找到任何其他备选方案,好的,所以我可以建议,找到范围内的最小值,然后循环遍历该范围内的每一列,检查该最小值是否出现在该列中,以及值“排除”是否出现在
MyRow
中。我的代码中有一些示例值:

Sub mac()
Dim minVal As Double
Dim MyColRange As Range, rng As Range
Dim wksSkill As Worksheet

MyRow = 6
Set wksSkill = Sheets("Arkusz1")
Set MyColRange = wksSkill.Range("A1:E5")

minVal = Application.WorksheetFunction.Min(MyColRange)

For Each rng In MyColRange.Columns
    If Not IsError(Application.Match(minVal, rng, 0)) Then
        If wksSkill.Cells(MyRow, rng.Column) = "Exclude" Then
            MsgBox "Column " & rng.Column
        End If
    End If
Next rng

End Sub

MyColNum
应该为您提供此最小值的列,然后您要检查此列和
MyRow
行中是否存在值“Exclude”,对吗?@Limak感谢您的研究。是的,你说的是对的。谢谢你的回复。我使用了相同的代码;然而,当我在数百行中循环时,这并没有给出正确的最小值列。我将对我的问题再作澄清。MyColRange为A1:Z1,范围内的数据为1,2,3,4,0,1,2,3,0,1,0…等,因此一次可能有多个最小值;但是,单元格中的最小值列(MyRow,Minimus value列)可能没有“排除”。然后我需要转到下一个最小值列,即这里的值保持为零。它可能不同。我认为,上面的代码需要一些修改。我想,你能验证一下吗..试着在存储数据的整个范围内设置
MyColRange
(如在我的代码中),例如:`set MyColRange=wksSkill.range(“A1:Z10000”)。我不明白怎么可能有一个以上的最小值。也许某个屏幕(不是你的全部数据,而是前10行)可以让我明白。这是一个团队的算法,每列代表一个人,假设10个人。所有列中的起始数据都将为零。一旦“MyRow”对应的人员数据满足条件,即MyColRange数据将不断更改。因此,MyColRange中有可能存在重复数据;问题是,并非所有MyRow条件都匹配;因此,我需要继续移动MyColRange中的下一个最小数据(例如,A1中的值=1,B1中的值=1..这里我首先检查A1中的条件,如果失败,我需要移动到B1..我认为,数组可能有助于我不擅长VBA。任何帮助都将不胜感激。对不起,您的描述有点混乱,仍然无法理解您的需要。我想我遗漏了一些对你们来说显而易见的东西,因为我看不到我们正在讨论的工作表。因此,请给我一些屏幕解释,什么是
myclrange
,什么是
MyRow
,什么是
个人数据
,以及算法的结果应该是什么。你可以通过编辑你的主要帖子来做到这一点。@Limark,我找到了另一个选择;但是我在数组公式中被击中了。假设,我的范围有A1:F1={1,0,2,1,0,3}这样的值。我想动态使用一个数组公式来查找值,第一个小到“0”,第二个小到1,第三个小到2,第四个小到3。公式=小(A1:F1,k),第二个小值为0。任何删除重复项的公式都会有帮助。我试过这个,很小(如果(A1:F1>SMALL(A1:F1,B1),A1:F1,“”),B1),这里B1代表我输入的小值