2017-03-18 2 views
1

6より大きい数値を探して別のシートに送信する代わりに、 3つの名前を検索したいので、連絡先リストを検索し、その情報をシートからレポートシートにプルすることができます。私は3行目Stringの代わりLongされるべきだと思う3つの名前のワークシートを検索する

Private Sub CommandButton1_Click() 

Dim ws As Worksheet, myCounter 
Dim erow, myValue As Long 

For Each ws In Sheets 
    If ws.Range("C3").Value > 6 Then 
     myCounter = 1 
     ws.Select 
     ws.Range("c3").Select 

     myValue = ws.Range("C3").Value 
     Worksheets("Report").Select 
     erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
     ActiveSheet.Cells(erow, 1) = myValue 

     nextValue = MsgBox("Value found in " & ws.Name & Chr(10) & "Continue?", vbInformation + vbYesvbNo, ws.Name & " C3 = " & ws.Range("C3").Value) 
     Select Case nextValue 
      Case Is = vbYes 
      Case Is = vbNo 
       Exit Sub 
     End Select 
    End If 
Next ws 

If myCounter = 0 Then 
    MsgBox "None of the sheets contains a " & Chr(10) & "value greater than 6 in cell C3 ", vbInformation, "Not Found" 
End If 

End Sub 

は、以下の私の古いコードです。

私が探している名前は "David" "Andrea" & "Caroline"です。3回書いても、ループしてもわかりません。また、これらの名前のスプレッドシート全体を検索する方法もわかりません。

+0

マクロレコーダーをオンにし、[検索]ダイアログを使用して名前を探します。録音を停止し、コードを調べます。見つけたい名前を別のシートに3つのセルに入れ、 "NamesToFind"という3つのセルの名前付き範囲を作成します。 Sheet( "Your sheet name")。UsedRangeはRange.Findメソッドを使用して名前を検索するために、Range(NamesToFind)ループのFor Each Nameを設定します。コードがうまくいかなかったら、私たちに戻ってください。注意:あなたが持っているコードは良い出発点ではありません。 –

+0

@VBABeginner私の答えと下のコードを読んで、あなたが意図したとおりに動作するかどうか教えてください –

答えて

1

以下のコードは、すべてのワークシートのセル "C3"に "David"、 "Andrea"、 "Caroline"の名前を探します。すべての試合について、「レポート」ワークシートの列Aの最初の空の行にコピーされます。

:完全qualifed CellsWorksheetsを使用する代わりに、SelectActiveSheetを使用する必要はありません。

コード

Option Explicit 

Private Sub CommandButton1_Click() 

Dim ws As Worksheet, myCounter As Long 
Dim erow As Long, myValue As Long 
Dim nextValue As Long 

For Each ws In ThisWorkbook.Sheets 
    With ws 
     Select Case .Range("C3").Value 
      Case "David", "Andrea", "Caroline" 
       myCounter = 1 ' raise flag >> found in at least 1 sheet 

       ' get first empty row in "Report" sheet 
       erow = Worksheets("Report").Cells(Worksheets("Report").Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
       Worksheets("Report").Cells(erow, 1) = .Range("C3").Value 

       nextValue = MsgBox("Value found in " & .Name & Chr(10) & "Continue?", vbInformation + vbYesNo, .Name & " C3 = " & .Range("C3").Value) 
       Select Case nextValue 
        Case Is = vbYes ' <-- if you are not doing anything here, you don't need it >> maybe you don't need the entire `Select Case` here 
        Case Is = vbNo 
         Exit Sub 
       End Select 
     End Select ' Select Case .Range("C3").Value 
    End With 
Next ws 

If myCounter = 0 Then 
    MsgBox "None of the sheets contains the names " & Chr(10) & " 'David', 'Andrea', 'Caroline' in cell C3 ", vbInformation, "Not Found" 
End If 

End Sub 

コメント

nextValue = MsgBox("Value found in " & .Name & Chr(10) & "Continue?", vbInformation + vbYesNo, .Name & " C3 = " & .Range("C3").Value) 
Select Case nextValue 
    Case Is = vbYes ' <-- if you are not doing anything here, you don't need it >> maybe you don't need the entire `Select Case` here 
    Case Is = vbNo 
     Exit Sub 
End Select 

あなたが全体を置き換えることができます:それはあなたが以下のSelect CaseCase Is = vbYesの場合は何もしていないようですもの:

If MsgBox("Value found in " & .Name & Chr(10) & "Continue?", vbInformation + vbYesNo, .Name & " C3 = " & .Range("C3").Value) = vbNo Then 
    Exit Sub 
End If 
+0

ありがとうございました。どのようにそれはまだ "長い"と "文字列"ではありません – VBABeginner

+0

@VBABeginner長いものは何ですか? –

+0

私はちょうど間違っているかもしれないので、学習を始めましたが、ロングは数字のためのもので、文字列のためのものだと思っていました。このコードはまだ動作しているので、私を捨ててしまいます。しかし、私は "C3:C3"の代わりに "A1:E30"で検索するように指示することができます。 – VBABeginner

関連する問題