【问题标题】:I need help in creating dynamic arrays in VBA [closed]我需要帮助在 VBA 中创建动态数组 [关闭]
【发布时间】:2015-01-03 20:05:35
【问题描述】:

有人可以帮我解决以下问题吗? 基本上我必须使用输入框创建一个动态数组,它要求输入一系列数字,直到值为空(你按回车或某事)。然后我必须确定平均值和总和。 提前致谢!:)

【问题讨论】:

  • 你能告诉我们你的尝试吗?
  • 为什么需要一个“动态数组”开始?

标签: arrays vba inputbox


【解决方案1】:

为什么要为此使用数组?它变得一团糟,ReDim 的开销相当大。

一个简单的循环可以做到这一点(注意缺少验证,但你明白了):

Dim valuesEntered As Integer
Dim total As Integer

valuesEntered = 0
total = 0

Dim inputValue As String
Do
    inputValue = InputBox("Enter a number or leave empty to stop.")

    If inputValue <> "" Then
        valuesEntered = valuesEntered + 1
        total = total + CInt(inputValue)
    End If
Loop Until inputValue = ""

MsgBox "Total: " & total & " / Average: " & (CDbl(total) / CDbl(valuesEntered))

但是如果您必须对数组执行此操作,至少考虑使用 Collection,因为它已经是一个动态构造。

【讨论】:

    【解决方案2】:

    它可以做到,例如通过使用Application.InputBox 函数,然后使用Application.WorksheetFunction.AverageApplication.WorksheetFunction.Sum

    Application.InputBox 的两个用法示例。

    • Type = 1 (带有 do-loop 的示例,这可能是您要求的)
    • Type = 64 (此处示例如何一步插入所有数组值)

    有关Application.InputBox 用法的更多信息,例如这里: http://codevba.com/excel/application_inputbox.htm#number (注意:此链接适用于 Excel,如果此问题与 Excel 无关,请忽略它)。

    Option Explicit
    
    Sub WithInputBoxType1()
        Dim value, values
        Dim averageValue As Double
        Dim sumValue As Double
    
        On Error GoTo errHandler
    
        Do
            value = Application.InputBox(Prompt:="Enter number:", Type:=1)
            If value <> False Then
                If IsArray(values) Then
                    ReDim Preserve values(UBound(values) + 1)
                Else
                    ReDim values(0 To 0)
                End If
                values(UBound(values)) = value
            End If
        Loop While value
    
        If Not IsArray(values) Then _
            Exit Sub
    
        averageValue = Application.WorksheetFunction.Average(values)
        sumValue = Application.WorksheetFunction.Sum(values)
    
        Debug.Print "average = '" & averageValue & "', sum = '" & sumValue & "'"
    
        Exit Sub
    
    errHandler:
        MsgBox Err.Description, vbExclamation
    End Sub
    
    Sub WithInputBoxType64()
        Dim values
        Dim averageValue As Double
        Dim sumValue As Double
    
        On Error GoTo errHandler
    
        values = Application.InputBox(Prompt:="Enter {1;2;3} etc. including the curly braces.", Type:=64)
    
        If values = False Then _
            Exit Sub
    
        averageValue = Application.WorksheetFunction.Average(values)
        sumValue = Application.WorksheetFunction.Sum(values)
    
        Debug.Print "average = '" & averageValue & "', sum = '" & sumValue & "'"
    
        Exit Sub
    
    errHandler:
        MsgBox Err.Description, vbExclamation
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2011-03-08
      • 2013-12-08
      • 2021-06-29
      • 2010-11-08
      • 2012-12-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多