2016-06-24 11 views
0

データの行ごとに1つのテーブルを検索する一連のループをコーディングしていて、その行の正しい仕様を満たしていれば、その行から特定の値を取り出して、別のチャートの別のテーブルに私は、 "For"のない "Next"があるというエラーが出ていますが、(何かが完全に欠けていない限り)存在しています。また、上部にサブラインが強調表示されています(これをマクロとして実行しようとしています)。ここで私が間違っているところを教えてください、ありがとう!ループ構文の問題

Option Explicit 

Sub GraphLoop() 

Dim i, g, row, color, roundcount, round, materialcount, material As Long 
Dim chartdatacol, chartdatarow As Long 




Worksheets("Chart Data").Range("C6:DR10000").Value = "" 

     roundcount = 1 
     materialcount = 1 
     color = 1 
     round = 1 
     material = 1 
     chartdatacol = 3 
     chartdatarow = 6 
     i = 4 

For chartdatacol = 3 To Worksheets("Running Avg Log").Cells(4, cols.Count).End(xlUp).row 

Do Until i = Worksheets("Running Avg Log").Cells(Rows.Count, "A").End(xlUp).row 


     g = 1 



     If Worksheets("Running Avg Log").Cells(i, 1).Value = Worksheets("Chart Data").Cells(chartdatarow, 2).Value _ 
      And Worksheets("Running Avg Log").Cells(i, 2).Value = round _ 
      And Worksheets("Running Avg Log").Cells(i, 3).Value = color _ 
      And Worksheets("Running Avg Log").Cells(i, 4).Value = material Then 

      row = chartdatarow 

      Worksheets("Chart Data").Cells(row, chartdatacol).Value = _ 
      Worksheets("Running Avg Log").Cells(i, 6 + Worksheets("Analysis").Range("C5").Value).Value 


      chartdatarow = chartdatarow + 1 
      i = 4 


     Else 

      i = i + 1 


     End If 



Loop 


    color = color + 1 

    ' loops through ten colors 
     If color > 10 Then 

      color = 1 

     End If 

    roundcount = roundcount + 1 
    materialcount = materialcount + 1 

    ' every ten columns, material changes, every 30 columns, it repeats 
     If materialcount = 11 Or 21 Then 

      material = material + 1 

     End If 

     If materialcount > 30 Then 

      materialcount = 1 
      material = 1 

    ' each round's 30 combos is 30 columns 
     If roundcount = 31 Then 

      round = round + 1 

     End If 


Next chartdatacol 




End Sub 
+0

であることを、自身の行の2番目の 'Dim'? –

+0

@MattCremeensはい –

答えて

0

ここにいる場合あなたが最後に取り残さ:

If materialcount > 30 Then 

     materialcount = 1 
     material = 1 

' each round's 30 combos is 30 columns 

ところで、作るために他の補正:

If materialcount = 11 Or 21 Then 

は次のようになります。

If materialcount = 11 Or materialcount = 21 Then 
+0

ありがとう!それを過ぎて右に見えた。また、 "For chartdatacol = 3 ..."行でエラーが発生しました。私はこれが最初の空のセル、またはチャートの終わりに当たるまで実行されると考えました。あなたは秒を持っている場合、これに何か顕著に間違っていますか? –

+0

私はあなたがこれを使用することを前提としています:for chartdatacol = 3 To Worksheets( "Running Avg Log")。セル(4、Columns.Count).End(xlToLeft).Column。あなたはcols.Countは間違いなくあなたが探しているものではありません。 –

+0

あなたは正しいです、ありがとう! –

0

あなたはIfを持っていましたなしEnd If

参照の場合、私はあなたが最後に欠落していた場所*********が付いて、以下のコードを変更:

Option Explicit 
Dim i, g, row, color, roundcount, round, materialcount, material As Long 
Dim chartdatacol, chartdatarow          As Long 


Sub GraphLoop() 


Worksheets("Chart Data").Range("C6:DR10000").Value = "" 

    roundcount = 1 
    materialcount = 1 
    color = 1 
    round = 1 
    material = 1 
    chartdatacol = 3 
    chartdatarow = 6 
    i = 4 

    For chartdatacol = 3 To Worksheets("Running Avg Log").Cells(4, Columns.Count).End(xlUp).row 

     Do Until i = Worksheets("Running Avg Log").Cells(Rows.Count, "A").End(xlUp).row 
      g = 1 
      If Worksheets("Running Avg Log").Cells(i, 1).Value = Worksheets("Chart Data").Cells(chartdatarow, 2).Value _ 
       And Worksheets("Running Avg Log").Cells(i, 2).Value = round _ 
       And Worksheets("Running Avg Log").Cells(i, 3).Value = color _ 
       And Worksheets("Running Avg Log").Cells(i, 4).Value = material Then 

       row = chartdatarow 

       Worksheets("Chart Data").Cells(row, chartdatacol).Value = _ 
       Worksheets("Running Avg Log").Cells(i, 6 + Worksheets("Analysis").Range("C5").Value).Value 
       chartdatarow = chartdatarow + 1 
       i = 4 
      Else 
       i = i + 1 
      End If 
     Loop 

     color = color + 1 

     ' loops through ten colors 
     If color > 10 Then 
      color = 1 
     End If 

     roundcount = roundcount + 1 
     materialcount = materialcount + 1 

     ' every ten columns, material changes, every 30 columns, it repeats 
     If materialcount = 11 Or 21 Then 
      material = material + 1 
     End If 

     If materialcount > 30 Then 
      materialcount = 1 
      material = 1 
      ' each round's 30 combos is 30 columns 
      If roundcount = 31 Then 
       round = round + 1 
      ' **** YOU WERE MISSING the End If here *** 
      End If 
     End If 
    Next chartdatacol 

End Sub