2016-10-07 16 views
0

ここには誰もがフォーマットを見ることができるように私のワークシートの参考画像があります。次のループの場合If then内部が正しく動作しない

http://imgur.com/a/dacIB

この目的は、列に一致するデータをソートすることです。私が探している基準は右側にあり、私が探しているデータベースのデータは左側にあります。ここに私のループのコードがあります。

Dim i As Long 
Dim Counter As Long 
Dim WS_Count As Long 
Dim k As Long 

WS_Count = Worksheets.Count 
    For k = 4 To WS_Count 
      With Worksheets(k) 
       For Counter = 0 To ActiveSheet.Rows(1).Cells.Find("QQQ").Offset(0, -1) - 1 
        For i = 0 To ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row - 2 
         If Cells(2 + i, 5).Value = Rows(i + 2).Cells.Find("QQQ").Offset(0, 1) And _ 
          Cells(2 + i, 2).Value = Rows(i + 2).Cells.Find("QQQ").Offset(0, 3) And _ 
          Cells(2 + i, 1).Value = Rows(i + 2).Cells.Find("QQQ").Offset(0, 2) Then 
           Cells(2 + i, Counter + 7).Value = Cells(2 + i, 4).Value 
         End If 
        Next i 
       Next Counter 
      End With 
    Next k 

右の基準に関連付けられた列に列Dの値を取得する必要があります。列G:Oは1-9の番号を付けられ、列Tの番号1-9に一致します。

私の人生にとって、なぜ4列目には0が終わったのか分かりません。この順序で、最初の列のすべての行> 2番目の列のすべての行> ...>次のシートに移動する必要があります。何か不明な点がある場合は、私に知らせてください。

編集:だから私のCounteriロングは少しずれていたので、少し調整しました。彼らは正しいはずですが、私のコードはまだ正しく実行されていません。それは合致を見ていない。私のIf Thenはいくつかの方法を台無しにする必要があります。

+0

あなたは 'With ActiveSheet'を持っているので、なぜそれを使用しないのですか? (1).Cells.Find( "QQQ")。Offset(0、-1) 'は、Counter = 0の場合に。.Rows(1).Cells.Find(" QQQ ").Offset(0、-1)'など...セル(2 + i、5).Value =行(i + 2).Cells.Find( "QQQ")。オフセット、1) '.Cells(2 + i、5).Value = .Rows(i + 2).Cells.Find(" QQQ ")。Offset(0、1)'などでなければなりません。代わりに 'With Worksheets(k) 'を使用して' Worksheets(k).Activate'を実行します –

+0

コードをステップ実行します。 0を出力しているときに実行中の行をハイライト表示します。次に、中間ウィンドウを使用して、どの値が間違っているかを調べることができます。 – Vegard

+0

それは少し良いはずです。主に怠惰。私はそれを加えたときにそれを変更するのを忘れてしまった。 – Keizzerweiss

答えて

1
Dim i As Long 
Dim Counter As Long 
Dim WS_Count As Long 
Dim k As Long 

WS_Count = Worksheets.Count 
    For k = 4 To WS_Count 
      With Worksheets(k) 
       For Counter = 0 To .Rows(1).Cells.Find("QQQ").Offset(0, -1).Value - 1 
        For i = 0 To .Range("A" & .Rows.Count).End(xlUp).Row - 2 
         If .Cells(2 + i, 5).Value = .Rows(Counter + 2).Cells.Find("QQQ").Offset(0, 1) And _ 
          .Cells(2 + i, 2).Value = .Rows(Counter + 2).Cells.Find("QQQ").Offset(0, 3) And _ 
          .Cells(2 + i, 1).Value = .Rows(Counter + 2).Cells.Find("QQQ").Offset(0, 2) Then 
            .Cells(2 + i, Counter + 7).Value = .Cells(2 + i, 4).Value 
         End If 
        Next i 
       Next Counter 
      End With 
    Next k 

これで機能します。私はそれが本当に苦労していたと思います。 .Cells(.....は、その期間によってセルがActiveSheetに定義されたことに注意してください。私も.Rows(i+2)...に変更しました。.Rows(Counter+2)基準セルの位置は、それぞれ新しいiと一致するようにシフトダウンします。ちょうどスクリーンショットのものが偶然に起こった。ありがとう、これが将来誰かを助けることを願っています。

関連する問題