【发布时间】:2015-01-03 20:05:35
【问题描述】:
有人可以帮我解决以下问题吗? 基本上我必须使用输入框创建一个动态数组,它要求输入一系列数字,直到值为空(你按回车或某事)。然后我必须确定平均值和总和。 提前致谢!:)
【问题讨论】:
-
你能告诉我们你的尝试吗?
-
为什么需要一个“动态数组”开始?
有人可以帮我解决以下问题吗? 基本上我必须使用输入框创建一个动态数组,它要求输入一系列数字,直到值为空(你按回车或某事)。然后我必须确定平均值和总和。 提前致谢!:)
【问题讨论】:
为什么要为此使用数组?它变得一团糟,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,因为它已经是一个动态构造。
【讨论】:
它可以做到,例如通过使用Application.InputBox 函数,然后使用Application.WorksheetFunction.Average、Application.WorksheetFunction.Sum。
Application.InputBox 的两个用法示例。
有关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
【讨论】: