2017-02-01 12 views
1

私はExcel VBAマクロには新規ですが、ユーザがセルに値を入力できるようにするプロジェクトを作成する任務があります。シート2でデータ(シート1)を検索し、フィルタされたデータをシート2にコピーしてコピーします。Excel marco vba - 値1および/または2のセルのチェック

たとえば、AとBが入力値です。試しました

For Row = 2 To finalrow 
     If Cells(i, 1).value = a And Cells(i, 2).value = b Then 
      Range(Cells(i, 1), Cells(i, 7)).Copy 
      Sheet2.Select 
      Range("A200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats 
      Sheet1.Select 
     ElseIf Cells(i, 1).Value = A Or Cells(i, 2).Value = B Then 
      Execute 
     End If 
    Next Row 
    Sheet2.Select 
    Range("B1").Select 
    Range("B3").Select 

ユーザーが1の値を入力した場合、結果は正しいです。しかし、ユーザーがAとBの両方を入力した場合、2つの値を含む行が返されますが、代わりに結果とBの結果が返されます。

ありがとうございます。

+0

例を追加してもよろしいですか? – user3598756

+0

こんにちはuser3598756。どういう意味ですか? –

答えて

0

ユーザがaおよび/またはbの値をSheet2セルA1およびB1に入力すると仮定します。基本的には、入力されていないものは無視してください。試してみてください:

Sub mysub() 
    Dim i As Long, finalRow As Long, destRow As Long, a, b 
    destRow = 2 
    a = Sheet2.Range("A1").value ' <-- adjust to the place where user enters a 
    b = Sheet2.Range("B1").value ' <-- and b 
    With Sheet1 
     finalRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
     For i = 2 To finalRow 
      If (IsEmpty(a) Or .Cells(i, 1).value = a) And _ 
       (IsEmpty(b) Or .Cells(i, 2).value = b) Then 
       .Cells(i, 1).Resize(1, 7).Copy 
       Sheet2.Cells(destRow, 1).PasteSpecial xlPasteFormulasAndNumberFormats 
       destRow = destRow + 1 
      End If 
     Next 
    End With 
End Sub 
+0

こんにちはA.S.H、コードアウトしていただきありがとうございます。私はコードをテストし、それは私を返しましたが、Orの部分は返しませんでした。ユーザーが検索するために両方を入力する必要があることを意味します。 1の入力で何も返されない場合。 –

+0

入力されていないセルに「空白文字」がある可能性はありますか?また、セル "B1"にbだけが入力されている場合、それは 'Sheet1'の' B'列から取り出す必要があります。 –

+0

他のセルに文字があると、プログラムが動作しないことがありますか?はい。 Bを検索する場合は、Aと同じ、Sheet1のB列を検索します。AとBを検索する場合、AとBを含む行が返されます。 –

関連する問題