当前位置: 首页 > 知识库问答 >
问题:

Excel VBA在一次搜索中最多搜索15个值

孔华池
2023-03-14

我试图运行一个宏,允许用户在一次搜索中最多搜索15个值。用户有时可能只搜索1个值,但最终用户希望此选项可用。我现在的代码在sheet1中搜索一个值&找到后,它会将整行复制到sheet2,这运行良好。现在我正在尝试最多15个值。我当前的代码如下:

Sub FindValues()
   Dim LSearchRow As Integer
   Dim rw As Integer, cl As Range, LSearchValue As Long, LCopyToRow As Integer

   Sheet2.Cells.Clear
   Sheet1.Select

   On Error GoTo Err_Execute

 'this for the end user to input the required A/C to be searched

    LSearchValue = InputBox("Please enter a value to search for.", "Enter value")
    LCopyToRow = 2

    For rw = 1 To 1555
        For Each cl In Range("D" & rw & ":M" & rw)
            If cl = LSearchValue Then
                cl.EntireRow.Copy
                    'Destination:=Worksheets("Sheet2")
                    '.Rows(LCopyToRow & ":" & LCopyToRow)
                Sheets("Sheet2").Select
                Rows(LCopyToRow & ":" & LCopyToRow).Select
                    'Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
             'Move counter to next row
                LCopyToRow = LCopyToRow + 1     
             'Go back to Sheet1 to continue searching
                Sheets("Sheet1").Select  
            End If
            'LSearchRow = LSearchRow + 1

        Next cl
    Next rw

'Position on cell A3
'Application.CutCopyMode = False
'Selection.Copy

    Sheets("Sheet2").Select
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

    Sheet2.Select


    MsgBox "All matching data has been copied."


    Exit Sub

Err_Execute:

   MsgBox "An error occurred."

End Sub

共有1个答案

孙正业
2023-03-14

尝试下面的代码。您可能希望使搜索项的输入更加健壮,因为如果它们单击取消或输入任何非数字值,您将得到一个错误。

Option Explicit

Sub FindValues()
Dim LSearchRow As Integer
Dim rw As Integer, cl As Range, LSearchValue As Long, LCopyToRow As Integer

Dim iHowMany     As Integer
Dim aSearch(15)  As Long
Dim i            As Integer

On Error GoTo Err_Execute

Sheet2.Cells.Clear
Sheet1.Select

 iHowMany = 0
 LSearchValue = 99

'this for the end user to input the required A/C to be searched

 Do While LSearchValue <> 0
    LSearchValue = InputBox("Please enter a value to search for. Enter a zero to indicate finished entry.", "Enter Search value")
    If LSearchValue <> 0 Then
        iHowMany = iHowMany + 1
        If iHowMany > 15 Then
            MsgBox "You are limited to 15 search numbers.", vbOKOnly, "Limit reached"
            iHowMany = 15
            Exit Do
        End If
        aSearch(iHowMany) = LSearchValue
    End If
Loop

If iHowMany = 0 Then
    MsgBox "No selections entered.", vbOKOnly + vbCritical, "No Search data"
    Exit Sub
End If

LCopyToRow = 2

For rw = 1 To 1555
    For Each cl In Range("D" & rw & ":M" & rw)
    '------------------------------------------------
        For i = 1 To iHowMany
            Debug.Print cl.Row & vbTab & cl.column
            LSearchValue = aSearch(i)
            If cl = LSearchValue Then
                cl.EntireRow.Copy

                'Destination:=Worksheets("Sheet2")
                '.Rows(LCopyToRow & ":" & LCopyToRow)

                Sheets("Sheet2").Select
                Rows(LCopyToRow & ":" & LCopyToRow).Select

                'Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                   xlNone, SkipBlanks:=False, Transpose:=False

                'Move counter to next row
                LCopyToRow = LCopyToRow + 1

                'Go back to Sheet1 to continue searching
                Sheets("Sheet1").Select
            End If
        Next i
        'LSearchRow = LSearchRow + 1
    Next cl
Next rw

'Position on cell A3
'Application.CutCopyMode = False
'Selection.Copy

Sheets("Sheet2").Select
Cells.Select

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False
Sheet2.Select

MsgBox "All matching data has been copied."

Exit Sub

Err_Execute:
MsgBox "An error occurred: " & Err.Number & vbTab & Err.Description
Exit Sub
Resume Next
End Sub
 类似资料:
  • 问题内容: 如何进行mysql查询以立即检查更多表?我的意思是,类似: 你可以这样吗? 我想要做的是向用户显示他从整个网站发布的所有帖子。 问题答案: 在您提供的查询中,它使用完整的外部联接。改用联合选择。

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • LDAP新手。我们LDAP的排列方式是人和组。这些人拥有用户信息,如姓名、uid和邮件。组有组名和multiple member字段,该字段的值为cn=first Last,cn=People,dc=comic,dc=com,列出了属于组的成员。 目前从userid和password开始,执行两个搜索:1)通过在People base domain上搜索uid=value来获取用户,然后从用户获得

  • 问题内容: 我第一次使用Postgresql,并且试图在我的网站中创建一个搜索引擎。我有这张桌子: 然后我为表的每个字段创建了一个索引(这是正确的方法吗?或者我可以为所有字段创建一个索引?): 现在,如果我想在每个索引中搜索一个单词,SQL查询是什么? 我尝试了这个,它的工作原理: 是否存在更好的方法来做到这一点?我可以搜索多个吗?我的一个朋友提出了一个解决方案,但这是针对MySQL数据库的: P

  • 问题内容: 我正在构建一个简单的 搜索 算法,我想 用空格 打破我的 字符串 ,并在其上搜索数据库,如下所示: 这可能吗? 问题答案: 是的,您可以使用SQL 运算符来搜索多个绝对值: 如果要使用,则需要改为使用: 使用(如您所尝试的)要求所有条件为真,使用至少需要一个条件为真。