【发布时间】:2018-01-31 11:49:06
【问题描述】:
我正在尝试检查大小为“i”的动态数组中是否有任何值大于零,其中“i”是用户输入。如果为 false,则数组中第一个元素的值将显示在下一列中。如果为真,则数组的值通过本质上向下移动一个元素来更新。我相信我已经在 java here 中找到了这个问题的答案,但在 vba 中找不到任何运气。我相信这可以像 here 那样使用 for 循环来完成,但如果它存在的话,我希望它更有效。由于我不知道任何可能有效的语法,因此代码挂在“If any x > 0 Then”
Dim i, z, u As Integer
Dim fir As Integer
Dim las As Integer
Dim n As Long
Dim x As Variant
'SET VALUE OF ROWS FOR ARRAY
i = Worksheets("INPUTS").Range("C6").Value
Set s = Worksheets("DATA")
'FIND LAST VALUE IN DATA
n = s.Cells(s.Rows.Count, "A").End(xlUp).Row
'BEGIN LOOP THROUGH DATA SET
For z = 1 To n
'SET/RESET RANGE TO CHECK FOR CONSECUTIVE VALUES LESS THAN ZERO
fir = z
las = i + z - 1
x = (s.Range("C" & fir, "C" & las).Value)
u = s.Range("C" & UBound(x)).Value
If any x > 0 Then
Else: s.Cells(4, z) = x(1, 1).Value
End If
Next z
我是论坛的新手和新手,所以请随时在任何违反与代码或问题相关的最佳实践的问题上给我一个新的,谢谢。
【问题讨论】:
-
你应该在 YouTube 上观看这个系列:Excel VBA Tutorial。第 5 集和第 25 集是相关的。
-
您介意分享您所拥有的屏幕截图以及您的预期输出以可视化您的目标吗?
-
Dim i, z, u As Integer仅将u声明为整数。其他的将被声明为变体。此外,几乎不需要整数类型。请改用long。请参阅 SO 和“网络”中的讨论以获取解释。 -
不要将范围误认为是数组。后者更快,但需要更多编码。
-
感谢您的意见。 @sktneer 屏幕截图不能很好地解释目标,但要点只是识别一列数据中的多个连续负值,并将连续负值的数量作为用户的输入。一旦满足该条件,数据集中的第一个值将显示在下一列中。