限制数组中元素的值(VBA)

时间:2015-11-21 07:34:05

标签: arrays vba max min

我有一个数字数组,比如[1 2 3 4 5 6 7 8 9 10],我想设置一个限制值,将超过此值的所有数字设置为 - 例如。限制值为5将产生[1 2 3 4 5 5 5 5 5 5]

我希望在更大规模上做到这一点,我需要循环多次; 什么是最有效的资源最少的方法呢?我可以循环它但是有一种内置/更有效的方式吗?

提前致谢!

1 个答案:

答案 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