在VBA中需要使用Excel函数的帮助

所以我正在通过这个作业,并完全坚持把我的代码中的Excel公式。 这是提示:

  1. 在代码中使用Excel函数(使用Application.WorksheetFunction)计算统计量并将相应的值分配给doubletypes的variables。 引用作为函数参数提供的范围时,请使用范围名称ScoresData。 请记住 – 在代码中使用Excel函数时,范围规范需要使用VB语法来完成。

  2. 打开一个显示存储在variables中的值的消息框(参见下面的图片)。 提示:

一个。 您可以使用常量vbNewLine在提示符中打破一行。 例如:MsgBox“BIT 311中有这么多的素材”&vbNewLine&“Oich!” – 会在311之后放置一个换行符。

湾 您可以使用常量vbTab在提示的两个部分之间添加一个Tab空格。 例如:MsgBox“Average:”&vbTab&Average

  1. 最后,将该macros分配给工作表上的一个button。

而我目前的代码(不工作)是:

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 

对于初学者来说,前缀所有variables名称以确保您不使用保留字。

 Dim dblAverage As Double Dim dblStandDev As Double Dim dblMin As Double Dim dblMax As Double 

End(xlDown)是一个方法(即动作/指令),通常用于定位连续列表的地址,行或列号。

如果您正在尝试在单元格A1中编写文字“评分数据”,则正确的语法为Activesheet.Range(“A1”)。value =“评分数据”

如果您试图将其写入下一个可用的空行,请添加一个variables以首先查找最后一行。

 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 as range

'*** Intersect从A1定义ScoresData到最后一个值集合ScoresData = intersect(activesheet.usedrange,activesheet.range(“A1”)。entireColumn)

后者就是你所追求的。 您的问题是不理解如何正确定义用于公式的单元格范围。

这是一个相当合理的第一次尝试,但我发现你在一起混合不同的方法来实现相同的事情。 使用一种方法的一半和另一半很less得到正确的结果。 通常,程序员会喜欢一种方法而不是另一种方法。 这并不意味着其他方法是错误的或效率低下的; 只是从一个方法记住语法和过程比在相似的方法之间反弹更容易,并且可能会混淆语法,就像在这里完成的那样。

看起来好像你想要处理的是如果你在A1上,然后点击Ctrl + Shift + 将会被选中的一系列单元格。 您可以a)命名范围,b)将范围分配给范围variables,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 

正如你可以从立即窗口输出中看到的那样,所有这些都完全一样。 select其中一个,并记住如何使用它。 至less现在,你可以忘记所有其他人,但你应该重新访问他们,并知道他们如何工作,以防万一你在未来遇到他们。

创build您提供的代码示例的复制和粘贴/重命名方法令人沮丧。 您应该至less知道正确的Excel工作表函数以及如何在工作表上使用它们,然后再尝试编写VBA代码以重现其结果。 认真; 这显示出你的工作明显缺乏努力。 我将提供使用您的一个要求,即MIN函数的正确语法。 你将不得不研究和适应我所提供的其余部分。 这不是学习如何获得电子表格中列的最小值的地方。 还有很多其他的网站。 这是学习如何编写从工作表上的列中获取最小值的代码的地方。

  ' 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 

这应该足以让你开始。 回复任何问题,注意示例,错误消息等