2016-11-22 5 views
0

私にはわからないことがあるかもしれませんが、オフセットを使用して1つのセルの値を見つけて別のセルにエクスポートしています。オフセットは私が期待するものではありませんいくつかの時間がありました。たとえば、コードで:VBAオフセットが異常に機能していますか?

Option Explicit 

Sub SendToMRP() 
Dim AllSales As Worksheet 
Dim SendToMRP As Worksheet 
Dim ALS As Range, STM As Range, AL As Range, Rng As Range 

Set AllSales = Worksheets("AllSales") 
Set SendToMRP = Worksheets("SendToMRP") 

With AllSales 
    For Each ALS In Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(3)) 
     If (ALS.Offset(0, 50) = "Yes") Then 
     Else 
      'ALS.Offset(0, 50) = "Yes" 
      With SendToMRP.Cells(Rows.Count, 1).End(3) 
       .Offset(1, 0) = ALS.Offset(0, 0) ' OrderId 
       .Offset(1, 1) = ALS.Offset(0, 1) ' StoreFront or "Amazon" 
       .Offset(1, 2) = ALS.Offset(0, 2) ' OrderType' 
       .Offset(1, 3) = ALS.Offset(0, 3) ' PurchaseDate' 
       .Offset(1, 4) = ALS.Offset(0, 15) ' This should be 4, but 15 is the correct setting 
       .Offset(1, 5) = ALS.Offset(0, 5) ' and it continues back at 5 

      End With 
     End If 
    Next 
End With 

End Sub 

時々オフセットのための第二引数は、私はそれがあることを期待するものではありません、これは、なぜ私はわかりません。うまくいけば誰かがこれについていくつかの洞察を発することができますか?ありがとう

+1

まだコードをテストする方法はありませんが、別のワークシートオブジェクトで 'With'を入れ子にするとトラブルが発生すると思いますが、最初に確認して結果を確認できますか? – L42

+1

または、ここで範囲を完全に修飾してください: '各ALS範囲(.Cells(2,1)、.Cells(Rows.Count、1).End(3))'。それは '.Range'を含んでいなければなりません。 @ L42は – L42

+0

です。非修飾の 'Range'と' Rows'呼び出しは暗黙的に 'Activesheet'を参照しています。今、ネストされた 'With'ブロックは可読性を助けません。しかし、 'Sheet1.Cells(Sheet2.Rows.Count、1).End(3)'は意図したとおりに動作しないことはほとんど確実です。 –

答えて

0

Excelforum.comの非常に有益な人が私を助け、これを答えとして提供しました。それは機能しますが、なぜ私が完全に理解したのかは言えません。私は点を使わずにこのコードを使いましたが、それも機能しますが、今回はそれがありませんでした。誰かが何らかの指導をすることができれば、それは非常に高く評価されるだろう。

With AllSales 
For Each ALS In .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(3)) 
    If (ALS.Offset(0, 50) = "Yes") Then 
    Else 
     'ALS.Offset(0, 50) = "Yes" 
     With SendToMRP.Cells(SendToMRP.Rows.Count, 1).End(3) 
      .Offset(1, 0) = ALS.Offset(0, 0) ' OrderId 
      .Offset(1, 1) = ALS.Offset(0, 1) ' StoreFront or "Amazon" 
      .Offset(1, 2) = ALS.Offset(0, 2) ' OrderType' 
      .Offset(1, 3) = ALS.Offset(0, 3) ' PurchaseDate' 
      .Offset(1, 4) = ALS.Offset(0, 15) ' This should be 4, but 15 is the correct setting 
      .Offset(1, 5) = ALS.Offset(0, 5) ' and it continues back at 5 
     End With 
    End If 
Next 
End With 
関連する問題