有人可以帮助我解决以下问题吗? 基本上我必须使用inputbox创建一个动态数组,它要求一系列数字'til值为空(你按Enter或sth)。然后我必须确定平均值和总和。 在此先感谢!:)
答案 0 :(得分: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
,因为它已经是动态构造。
答案 1 :(得分:1)
可以这样做,例如使用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