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

问题描述:

我试图运行一个宏,它允许用户在一次搜索中搜索多达15个值。用户有时可能只搜索1个值,但最终用户希望此选项可用。我现在的代码搜索Sheet1 &中的一个值时,发现它将整行复制到Sheet2这很好。现在我正在尝试多达15个值。我目前的代码如下:Excel VBA在一次搜索中搜索多达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

我没有看到您尝试解释15个可能的搜索词的部分。 – Adam 2014-11-14 23:10:08

+0

LSearchValue =的InputBox( “请输入一个值来搜索”, “输入数值”) LCopyToRow = 2 对于RW = 1至1555 对于每个CL在范围( “d” &RW& “:M” &rw) 如果cl = LSearchValue然后 cl.EntireRow.Copy“在这一点上我正在尝试一个正在工作的值im不知道如何改变它的15个值 – kay 2014-11-14 23:13:15

+0

我希望你不会提示用户15次,如果是这样,那么保存15个值(或他们输入的数量),然后计算输入的数值,然后建立循环,以便从1-15(取决于计数)进行检查,然后计算你有多少匹配如果匹配=用户输入,则复制该行 – 2014-11-14 23:17:06

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

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 
+0

你是个天才!非常感谢你..你在我的最爱列表中,再次感谢你:) – kay 2014-11-15 00:10:32