2017-01-04 11 views
0

生のデータと呼ばれる1つのシートの各行を一致する名前でチェックするマクロを作成しようとしていますが、名前が一致する場合はその行のデータを名前検索と呼ばれるシート。私はdo notループを使ってこれをやろうとしています。これは、過去に正常に使用したものと似ています。Excelでdo while do do do doステートメントを認識しない

しかし、私はそれを実行しようとすると、すべてが正しい場所にあるように見えるという事実にもかかわらず、「ループ無し」というエラーが表示されます。私のコードは次の通りです:

Sub NameSearch() 

Sheets("Raw Data").Unprotect ("29745") 
Application.ScreenUpdating = False 

Dim x As Long 

'set starting point at row 2 
x = 2 

Dim sourceSheet As Worksheet: Set sourceSheet = ThisWorkbook.Worksheets("Raw Data") 
Dim destSheet As Worksheet: Set destSheet = ThisWorkbook.Worksheets("Name Search") 

Do While sourceSheet.range("A" & x).Value <> "" 

    If sourceSheet.range("O" & x).Value <> destSheet.range("B2") Then 
     x = x + 1 

    Else 
    If sourceSheet.range("O" & x).Value = destSheet.range("B2") Then 

'selects the next row where the 1st column is empty 
      lMaxRows = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row 
'pastes the data from the specified cells into the next empty row 
      destSheet.range("A" & lMaxRows + 1).Value = sourceSheet.range("A" & x).Value 
      destSheet.range("B" & lMaxRows + 1).Value = sourceSheet.range("B" & x).Value 
      destSheet.range("C" & lMaxRows + 1).Value = sourceSheet.range("C" & x).Value 
      destSheet.range("D" & lMaxRows + 1).Value = sourceSheet.range("D" & x).Value 
      destSheet.range("E" & lMaxRows + 1).Value = sourceSheet.range("E" & x).Value 
      destSheet.range("F" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value 
      destSheet.range("G" & lMaxRows + 1).Value = sourceSheet.range("G" & x).Value 
      destSheet.range("H" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value - sourceSheet.range("G" & x).Value 
      destSheet.range("I" & lMaxRows + 1).Value = sourceSheet.range("M" & x).Value 
      destSheet.range("J" & lMaxRows + 1).Value = sourceSheet.range("N" & x).Value 

     x = x + 1 

    End If 

Loop 

End Sub 

私の人生にとっては、私が間違っていたことを理解できません。私のコードを改善する助けがあれば大いに感謝します!あなたはEnd Ifが欠落している

+2

下記参照あなたは別の終了を必要とする – Rdster

+0

イムブラインドIFので – Vbasic4now

答えて

1

...

Sub NameSearch() 

Sheets("Raw Data").Unprotect ("29745") 
Application.ScreenUpdating = False 

Dim x As Long 

'set starting point at row 2 
x = 2 

Dim sourceSheet As Worksheet: Set sourceSheet = ThisWorkbook.Worksheets("Raw Data") 
Dim destSheet As Worksheet: Set destSheet = ThisWorkbook.Worksheets("Name Search") 

Do While sourceSheet.range("A" & x).Value <> "" 

    If sourceSheet.range("O" & x).Value <> destSheet.range("B2") Then 
     x = x + 1 

    Else 
    If sourceSheet.range("O" & x).Value = destSheet.range("B2") Then 

'selects the next row where the 1st column is empty 
      lMaxRows = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row 
'pastes the data from the specified cells into the next empty row 
      destSheet.range("A" & lMaxRows + 1).Value = sourceSheet.range("A" & x).Value 
      destSheet.range("B" & lMaxRows + 1).Value = sourceSheet.range("B" & x).Value 
      destSheet.range("C" & lMaxRows + 1).Value = sourceSheet.range("C" & x).Value 
      destSheet.range("D" & lMaxRows + 1).Value = sourceSheet.range("D" & x).Value 
      destSheet.range("E" & lMaxRows + 1).Value = sourceSheet.range("E" & x).Value 
      destSheet.range("F" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value 
      destSheet.range("G" & lMaxRows + 1).Value = sourceSheet.range("G" & x).Value 
      destSheet.range("H" & lMaxRows + 1).Value = sourceSheet.range("F" & x).Value - sourceSheet.range("G" & x).Value 
      destSheet.range("I" & lMaxRows + 1).Value = sourceSheet.range("M" & x).Value 
      destSheet.range("J" & lMaxRows + 1).Value = sourceSheet.range("N" & x).Value 

     x = x + 1 

    End If 
End If '<----MISSING END IF 
Loop 

End Sub 
+1

がOK MICHありがとう。私はRdsterが私にそれを打つのを見ます。 – rohrl77