所以我正在完成这项功课,并完全坚持在我的代码中加入Excel公式。这是提示:
使用代码中的Excel函数(使用Application.WorksheetFunction)进行计算 统计信息并将相应的值分配给double类型的变量。使用 范围名称ScoresData在引用作为参数提供的范围时 到功能。记住 - 在代码中使用Excel函数时,范围 规范需要使用VB语法完成。
- 醇>
打开一个消息框,显示存储在变量中的值(参见图片 下面)。提示:
一个。您可以使用常量vbNewLine来断开提示中的一行。例如: MsgBox“在BIT 311中有太多的资料”& vbNewLine& “Oich!” - 将在311之后放置一个换行符。
湾您可以使用常量vbTab在两个部分之间添加Tab空间 提示。例如:MsgBox“Average:”& vbTab&平均
- 最后,将宏指定给工作表上的按钮。
醇>
我目前的代码(不工作)是:
Sub ScoresStatistics()
Dim Average As Double
Dim StandDev As Double
Dim Min As Double
Dim Max As Double
Dim ScoresData As Range
Range("A1").End(xlDown).Name = "ScoresData"
Average = Application.WorksheetFunction(Average(ScoresData))
StandDev = Application.WorksheetFunction(StDev.P(ScoresData))
Min = Application.WorksheetFunction(Minimum(ScoresData))
Max = Application.WorksheetFunction(Maximum(ScoresData))
MsgBox "Here are summary measures for the scores:" & vbNewLine & "Average:" & vbTab & Average & vbNewLine & "Standard Deviation:" & vbTab & StandDev & vbNewLine & "Minimum:" & vbTab & Min & vbNewLine & "Maximum:" & vbTab & Max
End Sub
答案 0 :(得分:1)
首先为所有变量名添加前缀,以确保您不使用保留字。
Dim dblAverage As Double
Dim dblStandDev As Double
Dim dblMin As Double
Dim dblMax As Double
End(xlDown)是一个方法(即动作/指令),通常用于定位连续列表的地址,行或列号。
如果您正在尝试撰写文字"得分数据"在单元格A1中,正确的语法是 Activesheet.Range(" A1")。value ="得分数据"
如果您尝试将其写入下一个可用的空行,则添加变量以首先查找最后一行。
Dim lRow as long
'*** this is how to use End(xlup) properly
lrow = activesheet.Range("65636").End(xlup).row + 1
Activesheet.Range("A" & lRow).value = "Scores Data"
如果您尝试对A列进行统计,请添加: Dim ScoresData作为范围
' *** Intersect将ScoresData从A1定义为最后一个值 设置ScoresData = intersect(activesheet.usedrange,activesheet.range(" A1")。wholeColumn)
后者就是你所追求的。您的问题不在于如何正确定义用于公式的单元格范围。
答案 1 :(得分:1)
这是一个非常合理的第一次尝试,但我发现你正在混合不同的方法来实现同样的事情。使用一种方法的一半和另一半的方法很少得到正确的结果。通常,程序员会偏爱一种方法而不是另一种方法。这并不意味着其他方法错误或效率低下;只是从一个方法中更容易记住语法和过程,而不是在类似方法之间反弹,并且可能会混淆语法,就像在这里完成的那样。
如果您在A1上并点击了 Ctrl + Shift + ▼看起来您想要处理一系列将要选择的单元格大骨节病>。您可以a)命名范围,b)将范围分配给范围变量,c)直接处理编码范围定义。以下是这三种方法的一些例子(还有其他方法)。 Debug.Print
行将范围的地址输出到VBE的立即窗口。使用 Ctrl + G 或查看►立即窗口查看输出。
' a) Name the range.
' After this you can use the range by referring to Range("ScoresData")
Range("A1:A" & Range("A1").End(xlDown).row).Name = "ScoresData"
Debug.Print Range("ScoresData").Address
' b) Assign the range to a range type variable.
' After this you can use the range by referring to rScoresData
Dim rScoresData As Range
Set rScoresData = Range(Range("A1"), Range("A1").End(xlDown))
Debug.Print rScoresData.Address
' c) There are lots of ways to refer to the range directly
' Here are a few.
Debug.Print Range("A1:A" & Range("A1").End(xlDown).row).Address
Debug.Print Range(Range("A1"), Range("A1").End(xlDown)).Address
Debug.Print Cells(1, 1).Resize(Cells(1, 1).End(xlDown).row, 1).Address
Debug.Print Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).row, 1).Address
正如您可以从立即窗口输出中看到的,所有这些都完全相同。选择其中一个并记住如何使用它。至少现在,你可以忘记所有其他人,但你应该重新审视它们并知道它们是如何工作的,以防你将来遇到它们。
您创建的代码示例的复制和粘贴/重命名方法令人沮丧。在尝试编写VBA代码以重现其结果之前,您至少应该知道正确的Excel工作表函数以及如何在工作表上使用它们。认真;这显示了您的明显缺乏努力。我将提供使用您的一个要求MIN function的正确语法。你将不得不研究和调整我为其他所有人提供的东西。这不是学习如何在电子表格的列中获取最小值的地方。还有很多其他网站。这是一个学习如何编写代码的地方,它从工作表上的列中获得最小值。
' Declare the variable. Note that I am NOT using a reserved word as the variable's name
Dim mn As Double
' a) Use the Named Range.
mn = Application.WorksheetFunction.Min(Range("ScoresData"))
Debug.Print "Minimum value in " & Range("ScoresData").Address(0, 0, external:=True) & " is " & mn
' b) Use the Range type variable.
mn = Application.WorksheetFunction.Min(rScoresData)
Debug.Print "Minimum value in " & rScoresData.Address(0, 0, external:=True) & " is " & mn
' c) Use the full coded range definition
mn = Application.WorksheetFunction.Min(Range("A1:A" & Range("A1").End(xlDown).row))
Debug.Print "Minimum value in " & Range("A1:A" & Range("A1").End(xlDown).row).Address(0, 0, external:=True) & " is " & mn
这应该足以让你入门。如果您有任何问题,请回复,并注明示例,错误消息等。