我有一个数字数组,比如[1 2 3 4 5 6 7 8 9 10]
,我想设置一个限制值,将超过此值的所有数字设置为 - 例如。限制值为5将产生[1 2 3 4 5 5 5 5 5 5]
。
我希望在更大规模上做到这一点,我需要循环多次; 什么是最有效的资源最少的方法呢?我可以循环它但是有一种内置/更有效的方式吗?
提前致谢!
答案 0 :(得分:0)
在项目中添加一个类,只允许值达到预设的最大值。
右键单击VBE项目浏览器中的 ThisWorkbook ,然后选择插入►类模块。将以下内容粘贴到标题为 Book1 - Class1(Code)的新代码表中。
Option Explicit
Private pVAL As Long
Private Const maxVAL As Long = 5 'set the maximum value here
Public Property Get val() As Long
val = pVAL
End Property
Public Property Let val(Value As Long)
If Value > maxVAL Then
pVAL = maxVAL
Else
pVAL = Value
End If
End Property
允许的最大值由页面顶部的const
设置。这允许您在一个地方更改它,而不是在几个地方搜索硬编码值。着眼于您的示例数据,我使用了long
类型。您可能希望切换到另一个数值变量类型声明。粘贴后,打开VBE的“属性”窗口( F4 )并重命名该类。我的示例使用 maxVAL 。
在模块表中,粘贴以下测试代码。
Sub classTest()
Dim a As Long, mVals() As New maxVAL, sVal As New maxVAL
sVal.val = 3
Debug.Print sVal.val
sVal.val = 11
Debug.Print sVal.val
ReDim mVals(1 To 10)
For a = LBound(mVals) To UBound(mVals)
mVals(a).val = a
Next a
For a = LBound(mVals) To UBound(mVals)
Debug.Print mVals(a).val
Next a
End Sub
运行sub并检查VBE的立即窗口以获取结果。它们应该类似于以下内容。
classTest
3
5
1
2
3
4
5
5
5
5
5
5