Excel 2010 - Visual Basic 在彩色单元格中查找最小值和最大值
Excel 2010 - Visual Basic to find minimum and maximum values in colored cells
- 我想找到 excel 范围内的最小值和最大值
- 仅在黄色单元格中,没有颜色的单元格不会被考虑用于查找最大值和最小值**
- 彩色单元格的范围是范围A:A**
我已经制作了这段代码,但它只是 returns D5 和 E5 单元格中的一个空单元格。
有人知道我在这里遗漏了什么吗?
非常感谢
编辑
我进行了调试,所有变量都是空的,除了 amarelosMin
和 i_max
都具有值 2 - 我不明白为什么。
我在 A:A 中的范围值从 1 到 20,黄色值是 2、3、4 和 5。如果代码正确,它应该给我 2 和 5,有最小值和最大值值。
Dim amarelosMin As Range
Dim vAmarelosmMin As Variant
ReDim vAmarelosmMin(Range("A1:A3").Rows.count - 1)
For Each amarelosMin In ActiveSheet.Range("A:A")
If amarelosMin.Interior.ColorIndex = 6 Then
i_min = LBound(vAmarelosmMin)
i_max = UBound(vAmarelosmMin)
Max = vAmarelosmMin(i_min)
Min = vAmarelosmMin(i_min)
For i = i_min + 1 To i_max
If vAmarelosmMin(i) > Max Then
Max = vAmarelosmMin(i)
ElseIf vAmarelosmMin(i) < Min Then
Min = vAmarelosmMin(i)
End If
Next
End If
Next amarelosMin
ActiveSheet.Range("C5") = "Minimo dos valores a amarelo"
ActiveSheet.Range("D5") = Min
ActiveSheet.Range("E5") = Max
你的问题是你的变体数组是不必要的,并且在你循环时实际上没有存储任何值。
您可以将代码简化为这个范围循环,它也只查看 A 列的已使用部分,而不是每个单元格
Sub Recut
Dim amarelosMin As Range
Dim dbMin As Double
Dim dbMax As Double
dbMin = Application.Max(Range("A:A"))
dbMax = Application.Min(Range("A:A"))
For Each amarelosMin In Range([a1], Cells(Rows.Count, "A").End(xlUp))
If amarelosMin.Interior.ColorIndex = 6 Then
If amarelosMin.Value < dbMin Then
dbMin = amarelosMin.Value
Else
If amarelosMin.Value > dbMax Then dbMax = amarelosMin.Value
End If
End If
Next amarelosMin
ActiveSheet.Range("C5") = "Minimo dos valores a amarelo"
ActiveSheet.Range("D5") = dbMin
ActiveSheet.Range("E5") = dbMax
End Sub
- 我想找到 excel 范围内的最小值和最大值
- 仅在黄色单元格中,没有颜色的单元格不会被考虑用于查找最大值和最小值**
- 彩色单元格的范围是范围A:A**
我已经制作了这段代码,但它只是 returns D5 和 E5 单元格中的一个空单元格。
有人知道我在这里遗漏了什么吗?
非常感谢
编辑
我进行了调试,所有变量都是空的,除了 amarelosMin
和 i_max
都具有值 2 - 我不明白为什么。
我在 A:A 中的范围值从 1 到 20,黄色值是 2、3、4 和 5。如果代码正确,它应该给我 2 和 5,有最小值和最大值值。
Dim amarelosMin As Range
Dim vAmarelosmMin As Variant
ReDim vAmarelosmMin(Range("A1:A3").Rows.count - 1)
For Each amarelosMin In ActiveSheet.Range("A:A")
If amarelosMin.Interior.ColorIndex = 6 Then
i_min = LBound(vAmarelosmMin)
i_max = UBound(vAmarelosmMin)
Max = vAmarelosmMin(i_min)
Min = vAmarelosmMin(i_min)
For i = i_min + 1 To i_max
If vAmarelosmMin(i) > Max Then
Max = vAmarelosmMin(i)
ElseIf vAmarelosmMin(i) < Min Then
Min = vAmarelosmMin(i)
End If
Next
End If
Next amarelosMin
ActiveSheet.Range("C5") = "Minimo dos valores a amarelo"
ActiveSheet.Range("D5") = Min
ActiveSheet.Range("E5") = Max
你的问题是你的变体数组是不必要的,并且在你循环时实际上没有存储任何值。
您可以将代码简化为这个范围循环,它也只查看 A 列的已使用部分,而不是每个单元格
Sub Recut
Dim amarelosMin As Range
Dim dbMin As Double
Dim dbMax As Double
dbMin = Application.Max(Range("A:A"))
dbMax = Application.Min(Range("A:A"))
For Each amarelosMin In Range([a1], Cells(Rows.Count, "A").End(xlUp))
If amarelosMin.Interior.ColorIndex = 6 Then
If amarelosMin.Value < dbMin Then
dbMin = amarelosMin.Value
Else
If amarelosMin.Value > dbMax Then dbMax = amarelosMin.Value
End If
End If
Next amarelosMin
ActiveSheet.Range("C5") = "Minimo dos valores a amarelo"
ActiveSheet.Range("D5") = dbMin
ActiveSheet.Range("E5") = dbMax
End Sub