我是vba的新手,所以想对我目前的项目提出一些建议。
我有一系列数据如下,但有更多的材料编号,例如:1002,1003,1004 ...
Material Process Time (mins)
1001 a.1 0.00
1001 a.2 0.00
1001 a 0.50
1001 b 0.70
1001 c 1.00
1001 d 2.50
1001 e 1.00
1001 f 0.30
1001 g 0.50
1001 h 0.90
1001 h.1 0.00
1001 h.2 0.00
我需要的第一件事是让程序从范围A4:C11中找到最大时间并更改范围内的其他时间<最大为零。
然后我需要它重复其余数据的过程。 我已经通过录制宏(使用IF函数)成功地完成了它,但宏不是那么灵活,因为某些数据可能具有不同的范围。所以我希望能够得到一些帮助。
答案 0 :(得分:0)
首先,您要为每列创建动态范围。您需要为要检查的每个列添加一个类似于您的VBA代码的行。我正在使用B列(流程)和C(时间)。
LastRowB = Cells(Rows.Count, "B").End(xlUp).Row
LastRowC = Cells(Rows.Count, "C").End(xlUp).Row
...
接下来,我们需要在变量中添加第一个值,以将其与其他值进行比较。
varC = Range("C2").Value
现在我们可以有效地检查变量到其他值,如果值更大,我们将它分配给变量。
'Look for the MAX value in this particular column
For i = 2 To LastRowC
If Range("C" & i).Value > varC Then
varC = Range("C" & i).Value
End If
Next i
一旦它通过varC
循环,它应该包含该范围内的最高值。我们可以重用相同的循环,只需改变条件。因为您只想保留第一个MAX值,所以我将使用另一个变量varMAX
。 varMAX
用来说'嘿,我已经找到了一个MAX值'。
'Set all values that don't match MAX to 0 and only keep the first MAX value
varMAX = 0
For i = 2 To LastRowC
If Range("C" & i).Value < varC Then
Range("C" & i).Value = 0
Else
If Range("C" & i).Value = varC And varMAX < 1 Then
varMAX = varMAX + 1
Else
Range("C" & i).Value = 0
End If
End If
Next i
现在为您想要的每一列重复此操作。
PS:如果有人能告诉我如何在我的FOR循环中添加正确的格式(获得正确的对齐方式),请在评论中告诉我! :)