【问题标题】:Excel VBA Find cell address in range based on min to max for where classExcel VBA根据哪里类的最小值到最大值查找范围内的单元格地址
【发布时间】:2016-11-26 07:31:29
【问题描述】:

请协助我处理以下情况

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

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

这是我想要申请的课程

        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

从另一个 if 语句传递的第一个“MyColNum”值,然后它将获取函数输出。它一直有效,直到范围有一个最小值。

请协助我进行其他选择

【问题讨论】:

  • MyColNum 应该给你这个最小值的列,然后你想检查这个列和MyRow 行中是否存在值“排除”,对吗?
  • @Limak 感谢您对此进行调查。是的,你说的没错。

标签: excel excel-formula vba


【解决方案1】:

好的,所以我可以建议在范围内找到最小值,然后遍历该范围内的每一列,并检查该最小值是否出现在那里以及值“排除”是否出现在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

【讨论】:

  • 感谢您的回复。我使用了相同的代码;但是,当我遍历数百行时,这并没有给出正确的最小值列。我将在我的问题上更清楚一些。 MyColRange 将是 A1:Z1 并且范围内的数据将是 1,2,3,4,0,1,2,3,0,1,0...等等 所以一次有多个最小值是可能的;但是单元格中的最小值列(MyRow,Minimus Value Column)可能没有“排除”。然后我需要进入下一个最小值列,即这里的值保持为零..它可能会有所不同..我认为,上面的代码需要一些修改。我绑了,你能验证一下吗..
  • 尝试在存储数据的整个范围内设置MyColRange(如我的代码中所示),例如:`Set MyColRange = wksSkill.Range("A1:Z10000")。我不明白怎么可能不止一个最小值。也许一些屏幕(不是你的全部数据,但是,比如说,前 10 行)可以让我清楚。
  • 这是一个团队算法,每列代表一个人,假设10人。所有列中的起始数据将为零。一旦“MyRow”对应的Person Data 中满足条件,即MyColRange 数据不断变化。因此,MyColRange 中可能存在重复数据;问题是,并非所有时间 MyRow 条件都匹配;因此我需要继续使用 MyColRange 中的下一个最小数据(例如 A1 中的值 = 1,B1 中的值 = 1 ..这里我首先检查 A1 中的条件,如果失败我需要移动到 B1)..我认为,数组可能对我不擅长VBA有帮助。任何帮助将不胜感激。
  • 对不起,你的描述有点太乱了,还是抓不到你需要的。我想我遗漏了一些对你来说很明显的东西,因为我看不到我们正在谈论的工作表。所以请给我一些屏幕解释,什么是MyColRange,什么是MyRow,什么是Person Data,以及算法的结果应该是什么。你可以通过编辑你的主帖来做到这一点。
  • @Limark,我找到了替代方案;但是我对数组公式感到震惊。假设,我的 Range 具有像 A1:F1 = {1,0,2,1,0,3} 这样的值。我想动态使用一个数组公式来查找第一个小为“0”的值,第二个小为 1,3rd 为 2 和第四个为 3。公式 =Small(A1:F1,k) 将第二个小为 0。任何公式删除重复项会很有帮助。我试过这个, SMALL(IF(A1:F1>SMALL(A1:F1,B1),A1:F1,""),B1) ,这里 B1 代表我输入的小值
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 2014-11-14
  • 2013-03-26
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多