2017-11-15 6 views
0

すべてのシートをループして1つずつチェックし、次のようにします:チェックされたセルにE18 = N/Aの値がある場合は、 )私はG23の値をN/Aにも変更したいと思います(そして、各セルでそれを行い、要約G23、G24、G25など)次のループを書きましたが、実行しません何でもしてくださいワークシートをループしてセルの値をチェック

Sub MyTestSub() 

Dim ws As Worksheet 

LastRow = Cells(Rows.Count, "G").End(xlUp).Row 
For X = 22 To LastRow 
    For Each ws In Worksheets 
     If ws.Range("E18").Value="N/A" then ThisWorkbook.Sheets("Summary").Range("G"&x).Value="N/A" 
    Next ws     
Next x 

End Sub 

何か助けていただければ幸いです!

+0

あなたは私の答えやVityataをコメントしようとしていますか? –

+0

あなたのコメントをしようとしました。 – Rhyfelwr

答えて

2

で、任意のエラーで動作します手順:

  1. セルにIsErrorがあるかどうかを確認します。
  2. エラータイプが#N/Aで、If .Range("E18").Value = CVErr(xlErrNA) Thenであることを確認してください。

「パス」のように通常のStringがある場合は、エラーが発生します。

コード

Dim lRow As Long 

LastRow = Sheets("Summary").Cells(Sheets("Summary").Rows.Count, "G").End(xlUp).Row 
lRow = 23 ' start from row 23 

For Each ws In Worksheets 
    With ws 
     If .Name <> "Summary" Then 
      If IsError(.Range("E18").Value) Then 
       If .Range("E18").Value = CVErr(xlErrNA) Then 
        Sheets("Summary").Range("G" & lRow).Value = CVErr(xlErrNA) 
       End If 
      End If 
     End If 
    End With 
    lRow = lRow + 1 
Next ws 
+0

どうすればこの方法を使ってすべてのワークシートをループすることができますか? – Rhyfelwr

+0

@Rhyfelwrはすべてのシートで 'LastRow'を見ましたか?または単に「マスター」ですか? –

+0

基本的に、E18は定数です。要約以外のすべてのワークシートには常に値(合格/不合格またはN/A)が含まれていますが、E18に含まれる値を確認するだけで、N/Aが含まれていれば検査された最初のシートについてはG23の値をN/Aに変更し、2番目の場合にはG24を変更するなど、LastRowの必要性があります。 – Rhyfelwr

0

ネストされたループを逆転させてください。このような何かが動作する必要があります - 新しいワークシートがあるたびに

Sub MyTestSub() 
    Dim ws As Worksheet 
    For Each ws In Worksheets 
     LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row    
     If IsError(ws.Range("E18")) then 
      For X = 22 To LastRow 
       Sheets("Summary").Range("G" & LastRow) = ws.Range("E18") 
      next x 
     end if 
    Next ws     
End Sub 

さらに、私はLastRowは、このようにあなたはかなり頻繁にそれをリセットする必要があり、ワークシートごとに異なっていることを前提としています。 なく、少なくとも最後に - あなたはCellsに参照のうえされている場合、このように、ワークシートを参照していることを確認してください:

LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row    

をあなたがそれをしない場合は、アカウントにActiveSheetを服用します。ここで

は、Excelでのエラーの詳細と、それらを返すです - http://www.cpearson.com/excel/ReturningErrors.aspx

解決策がないだけ#1 N /それは2段階にする必要がある

+2

'もしws.Range(" E18 ")ならばValue ="該当なし "なら'#N/A'のセルは見つからず、 'CVErr(xlErrNA)'を使う必要があります –

+0

LastRowは「概要」シートでは、他のすべてのワークシートが新しく生成され、標準化されたフォームです(つまり、セルE18には常に合格/不合格またはN/Aの値が含まれます)。これで、LastRowがすべて必要なのかどうかわからなくても、ワークシートで見つかった値が「要約」シートのN/Aの各シートの次の行に常に変更されるようにしようとしています。それは少しhahaを説明するのは難しい – Rhyfelwr

+0

@ ShaiRado - 本当に、私は文字列について考えていた。 – Vityata

関連する問題