首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态搜索工作表和添加单元格的VBA代码

动态搜索工作表和添加单元格的VBA代码
EN

Stack Overflow用户
提问于 2018-10-18 15:49:24
回答 2查看 174关注 0票数 0
代码语言:javascript
运行
复制
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开始,填充工作表的其余部分,这就是我使用这个范围的原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-18 16:22:47

@Chronocidal说:

代码语言:javascript
运行
复制
=SUMIF(Sheet1!$A$1:$HA$609,">50",Sheet1!$A$1:$HA$609)

或者在漫长的道路上:

使用FIND查找工作表上的所有值,并将小于所需金额的数字相加。

该函数如下所示,尽管您可能希望将With wrkSht.Cells更改为只查看填充的单元格的范围:

代码语言:javascript
运行
复制
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  

然后,您可以在一个单元格中直接调用它,如下所示:

代码语言:javascript
运行
复制
=CountLarge(50,Sheet1!$A$1)  

或者你可以在另一个潜艇中调用:

代码语言:javascript
运行
复制
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  

您可以将工作表引用更改为一个文本字符串:

代码语言:javascript
运行
复制
MsgBox "Final sum: " & CountLarge(myNum, "Sheet1")   

要使其正常工作,您必须将函数参数更改为:

代码语言:javascript
运行
复制
Public Function CountLarge(StartNumber As Double, SheetName as String) As Double  

并将工作表设置为:

代码语言:javascript
运行
复制
Set wrkSht = ThisWorkbook.Worksheets(SheetName)
票数 0
EN

Stack Overflow用户

发布于 2018-10-18 15:53:43

您将"mynum“设置为msgbox的值,然后测试"myvalue”并退出子程序。

将myvalue更改为mynum,您应该都设置好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52877911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档