Sub CountLarge()
Sheets("Data").Select
Dim myNum As Integer
Dim cell As Range
Dim rngFullRange As Range
Dim nLarge As Integer
Do
myNum = Application.InputBox("Enter a number")
If myNum = "" Then Exit Sub
Loop Until myNum > 0 And myNum < 210
With Range(“A1”)
Range(.Offset(1, 0), .End(xlDown).End(xlToRight)).Name =
“dynamicRange”
End With
Set rngFullRange = wsData.Range(“dynamicRange”)
For Each cell In rngFullRange
If cell.Value > myNum Then
nLarge = nLarge + cell.Value
End If
Next
MsgBox (nLarge)
End Sub这是我的代码,我需要它来遍历工作表中的每个值(数据从A2开始,跨越整个工作表,因此我设置了一个动态范围),并将所有大于用户输入的值加起来并显示在消息框中。当我运行程序时,我可以输入一个数字,但在最后我没有得到一个消息框。
**注意:我使用您的反馈编辑了代码,目前错误在范围内(“A1”)。范围适合工作表,所以我不明白为什么,数据从A2开始,填充工作表的其余部分,这就是我使用这个范围的原因。
发布于 2018-10-18 16:22:47
@Chronocidal说:
=SUMIF(Sheet1!$A$1:$HA$609,">50",Sheet1!$A$1:$HA$609)或者在漫长的道路上:
使用FIND查找工作表上的所有值,并将小于所需金额的数字相加。
该函数如下所示,尽管您可能希望将With wrkSht.Cells更改为只查看填充的单元格的范围:
Public Function CountLarge(StartNumber As Double, Target As Range) As Double
Dim wrkSht As Worksheet
Dim myNum As Double
Dim sFirstAddress As String
Dim rFound As Range
Dim dSum As Double
Set wrkSht = Target.Parent
With wrkSht.Cells
Set rFound = .Find("*", , xlValues, xlWhole, , xlNext)
If Not rFound Is Nothing Then
sFirstAddress = rFound.Address
Do
If IsNumeric(rFound) Then
If rFound >= StartNumber Then
dSum = dSum + rFound
End If
End If
'Set rFound = .FindNext(rFound) 'Doesn't work if in a UDF.
Set rFound = .Find("*", rFound, xlValues, xlWhole, , xlNext) 'Works in a UDF.
Loop While rFound.Address <> sFirstAddress
End If
End With
CountLarge = dSum
End Function 然后,您可以在一个单元格中直接调用它,如下所示:
=CountLarge(50,Sheet1!$A$1) 或者你可以在另一个潜艇中调用:
Public Sub Test()
Dim myNum As Double
myNum = Application.InputBox("Enter a number:", Type:=1)
MsgBox "Final sum: " & CountLarge(myNum, Sheet1.Range("A1"))
End Sub 您可以将工作表引用更改为一个文本字符串:
MsgBox "Final sum: " & CountLarge(myNum, "Sheet1") 要使其正常工作,您必须将函数参数更改为:
Public Function CountLarge(StartNumber As Double, SheetName as String) As Double 并将工作表设置为:
Set wrkSht = ThisWorkbook.Worksheets(SheetName)发布于 2018-10-18 15:53:43
您将"mynum“设置为msgbox的值,然后测试"myvalue”并退出子程序。
将myvalue更改为mynum,您应该都设置好了。
https://stackoverflow.com/questions/52877911
复制相似问题