したがって、For Loop
とIf Then
ステートメントを使用してデータを取得およびソートしようとするクエリがあります。この声明の目的は、私の基準をとり、一致するもののデータを調べることです。一致した場合は、そのデータの値を列にコピーします。同じデータを見ている3つの基準があります。各条件には3つの文字列と日付範囲があります。データの並べ替えIf Thenステートメントが機能しない
何らかの理由で、すべてのデータを3つの貼り付け場所すべてにコピーします。参考のために画像を参照してください:右の
細胞着色が基準の私の最初のセットです。 2番目のセットはそのすぐ下にあります。左の色付きのセルが私のデータです。
私が考えることができるのは、私がセルの場所を間違って参照していることだけです。私は現在、(行、列)座標系を使用しています。例:.Cells("B2")
は.Cells(2, 2)
と同じです。ここで
それは、このような混乱ある質問
'
Dim j As Long
For j = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections(j).OLEDBConnection.BackgroundQuery = False
Next
ActiveWorkbook.RefreshAll
Worksheets("Query").Activate
ActiveSheet.ListObjects("Table_WinSPCData.accdb").Range.AutoFilter Field:=14 _
, Criteria1:="=81024 OK", Operator:=xlOr, Criteria2:="=81111 OK"
ActiveSheet.ListObjects("Table_WinSPCData.accdb").Range.AutoFilter Field:=1, _
Criteria1:=Array("DD_IMPELLER_SEAL_RING_004", "DD_IMPELLER_SEAL_RING_005", _
"DD_IMPELLER_SEAL_RING_007", "DD_IMPELLER_SEAL_RING_008", _
"GD_1ST_STAGE_IMPELLER_SEAL_RING", "GD_2ND_STAGE_IMPELLER_SEAL_RING", _
"IMPELLER_SEAL_RING", "INTERSTAGE_SEAL_RING", "MOTOR_SEAL_RING", _
"MOTOR_SEAL_RING_WITH_PILOT", "MOTOR_SEAL_RING_WITH_PILOT_005"), Operator:= _
xlFilterValues
Range("A:A,E:E,H:H,I:I").Select
Range("Table_WinSPCData.accdb[[#Headers],[VALUE_]]").Activate
Range("A:A,E:E,H:H,I:I,N:N").Select
Range("Table_WinSPCData.accdb[[#Headers],[TAG_VALUE]]").Activate
Selection.Copy
Sheets("1").Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Dim i As Long
Dim AssetRight1 As Range
Dim AssetRight2 As Range
Dim AssetRight3 As Range
Dim AssetLeft1 As Range
Dim PartnameRight1 As Range
Dim PartnameRight2 As Range
Dim PartnameRight3 As Range
Dim PartnameLeft1 As Range
Dim VariablenameRight1 As Range
Dim VariablenameRight2 As Range
Dim VariablenameRight3 As Range
Dim VariablenameLeft1 As Range
Dim Criteria1paste As Range
Dim Criteria2paste As Range
Dim Criteria3paste As Range
Set AssetRight1 = Cells(2, 20)
Set AssetRight2 = Cells(3, 20)
Set AssetRight3 = Cells(4, 20)
Set AssetLeft1 = Cells(2 + i, 5)
Set PartnameRight1 = Cells(2, 21)
Set PartnameRight2 = Cells(3, 21)
Set PartnameRight3 = Cells(4, 21)
Set PartnameLeft1 = Cells(2 + i, 1)
Set VariablenameRight1 = Cells(2, 22)
Set VariablenameRight2 = Cells(3, 22)
Set VariablenameRight3 = Cells(4, 22)
Set VariablenameLeft1 = Cells(2 + i, 2)
Set Criteria1paste = Cells(2 + i, 8)
Set Criteria2paste = Cells(2 + i, 9)
Set Criteria3paste = Cells(2 + i, 10)
For i = 0 To 20
If AssetRight1 = AssetLeft1 Then If VariablenameRight1 = VariablenameLeft1 Then If PartnameRight1 = PartnameLeft1 Then If Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 3) <= Worksheets("Date").Range("D4") Then Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy
Criteria1paste.PasteSpecial xlPasteValues
Application.CutCopyMode = False
If AssetRight2 = AssetLeft1 Then If VariablenameRight2 = VariablenameLeft1 Then If PartnameRight2 = PartnameLeft1 Then If Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 3) <= Worksheets("Date").Range("D4") Then Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy
Criteria2paste.PasteSpecial xlPasteValues
Application.CutCopyMode = False
If AssetRight3 = AssetLeft1 Then If VariablenameRight3 = VariablenameLeft1 Then If PartnameRight3 = PartnameLeft1 Then If Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 3) <= Worksheets("Date").Range("D4") Then Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy
Criteria3paste.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Next i
End Sub
申し訳ありませんのコードがあります。私はそれのほとんどを記録したので、それはすべての場所にあります。前もって感謝します。
更新 さて、ここにはFor Next
コードがあります。なんらかの理由でループに問題があります(For Next
)。それはNext without a For
があると言います。
For i = 0 To 20
If AssetRight1 = AssetLeft1 And _
VariablenameRight1 = VariablenameLeft1 And _
PartnameRight1 = PartnameLeft1 And _
Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 7) <= Worksheets("Date").Range("D4") Then
Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy Criteria1paste
If AssetRight2 = AssetLeft1 And _
VariablenameRight2 = VariablenameLeft1 And _
PartnameRight2 = PartnameLeft1 And _
Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 7) <= Worksheets("Date").Range("D4") Then
Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy Criteria2paste
If AssetRight3 = AssetLeft1 And _
VariablenameRight3 = VariablenameLeft1 And _
PartnameRight3 = PartnameLeft1 And _
Cells(2 + i, 7) >= Worksheets("Date").Range("D3") And Cells(2 + i, 7) <= Worksheets("Date").Range("D4") Then
Rows(2 + i).Cells.Find("XXX").Offset(0, -2).Copy Criteria3paste
Next i
私は選択をクリーンアップすることから始めます:http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros – puzzlepiece87
@ puzzlepiece87私が削除できます'ActiveWindow.ScollColumn'行です。彼らは使用されているか、私の記録されたものからちょうど廃止されていますか?彼らはコードに無関係なものを行うので、私は削除することができる行がありますか? – Keizzerweiss
はい、 'ActiveWindow.ScrollColumn'行を削除することができます。 '.Select'と 'Selection'がすべて修正されるまで残りの部分にはコメントはありません。なぜなら、大きな問題が解決されるまではニックピッキングする価値はないからです。 – puzzlepiece87