2016-07-07 3 views
1

私はワークブック全体を検索し、ワークシートの名前をcells(PRow,3)以下の値で戻すIf Thenマクロを作成しようとしています〜5 in range ("B26").valueUsingワークブック全体でvbaの平均を調べる場合

これまでのところ、私が持っているものは基準を満たすすべての結果を戻していないようです。

Dim PRow As Long 
    PRow = 8 
    With wsAddPatient 
     For Each ws In ActiveWorkbook.Worksheets 
      If ws.Range("B26").Value <= 5 _ 
       And ws.Range("B26").Value <> "" Then 
        .Cells(PRow, 3).Value = ws.Name 
        PRow = PRow + 1 
      End If 
     Next 
    End With 
+0

私はこのコードを実行し、それは私のために働いた。 'wsAddPatient'を' Excel.Worksheet'としてセットアップし、それを別のワークシートに設定しましたか? 2番目の選択肢は、いくつかのワークブックを開いている場合です。この場合、このコードを実行するワークシートを含むワークブックを参照することがより安全に(常に)できます。 –

+0

正確には何ですか?いくつかの名前がありますが、あなたが望むものすべてではありませんか? 'wsAddPatient'のC列に空の行を残していますか? F8を使用してコードをステップ実行し、何が起こるかを確認します。 – arcadeprecinct

+0

名前の一部を取得しますが、ブック内のすべての名前を取得するわけではありません。それは空の行を残しません。私がそれを踏むと、sub refresh()がハイライトされ、true = trueと表示されます。 – Alonso4077

答えて

2

空白セルまたはテキストを含むセルの数値をテストしないでください。

Dim PRow As Long 
PRow = 8 
    With wsAddPatient 
     For Each ws In ActiveWorkbook.Worksheets 
      If IsNUmeric(ws.Range("B26").Value2) Then 
       If ws.Range("B26").Value2 <= 5 Then 
        .Cells(PRow, 3) = ws.Name 
        PRow = PRow + 1 
      End If 
     End If 
    Next 
End With 

複数のテストがすべて評価されるため、他のテストとは別の数値のセル値のテストを行います。

これは、テキストを比較しようとしていたため、型の不一致エラーが発生しているはずです。適切なエラー制御ですべての可能性をカバーしていることが確信できるまで、On Error Resume Nextを使用しないでください。

関連する問題