2017-01-25 8 views
0

私はシート上の特定の列を見つけて特定のciteriaで並べ替えるVBAコードを書いています。これは、最初の部分は名前が内にあり、第二部は、その中の特定のコードでのみフィールドを並べ替える必要があり、その列を探します私のコード列を検索して並べ替えるVBAコード

Sub SortExchangesEurope() 

    Dim intCounter As Integer 
    Dim rngExchange As Range 
    intCounter = 1 

    Do While Worksheets("Sheet1").Cells(2, intCounter) <> "" 
     If Worksheets("Sheet1").Cells(2, intCounter).Value = "Exchange" Then 
      With Worksheets("Sheet1") 
       Set rngExchange = .Range(.Cells(2, intCounter), .Cells(2, intCounter)) 
       MsgBox intCounter 
      End With 
     End If 

     intCounter = intCounter + 1 
    Loop 

    Worksheets("Sheet1").Range("$A$2:$AP$778").AutoFilter Field:=intCounter, Criteria1:=Array(_ 
     "XBEL", "XBUD", "XBSE", "XQMH", "XWAR", _ 
     "BMEX", "XLIS", "XLIT", "XBUL", "ASEX", _ 
     "XDUB", "XBRU", "XLUX", "XSTO", "XSWX", _ 
     "XHEL", "XMOS", "MISX", "XCSE", "XVTX", _ 
     "IEPA", "XMIL", "XLIS", "BMEX", _ 
     "XLJU", "ASEX", "XRIS", "XBRA", "xlOn", _ 
     "XOSL", "XPAR", "XPRA", "XICE", "XIST", _ 
     "XTAL", "XMIL", "XTRN", "XBRU", "XLDN", _ 
     "XAMS", "XZAG", "XSWX", "XATH", "XMAD", "XOME", _ 
     "XMRV", "XADE", "XVTX", "XTAH", "RTSX", "XLTO", _ 
     "XDMI", "MFOX", "XMAD", "XMAT", "XTLX", "ICEU", _ 
     "XMON", "XTUR", "XBRD", "XEDX", "XOME", "XLIF"), Operator:=xlFilterValues 

End Sub 

です。どちらの部分も別々に正常に動作しますが、一緒には機能しません。失敗したレンジクラスの

オートフィルタ - 私はこのエラーが発生した

+1

を使用する前に、あなたはどのようなエラーが出るのですか? – Vinnie

+0

私の質問が更新されました – tombata

+0

したがって、 "Exchange"で列を識別し、ループを終了してオートフィルタに進む前に、変数IntCounterに1を設定します。あなたは右の列をフィルタリングしていますか? –

答えて

1

あなたはAutoFilterModeをチェックし、設定する必要がAutoFilter

Sub SortExchangesEurope() 
    Dim wS As Worksheet 
    Dim intCounter As Integer 
    Dim rngExchange As Range 

    Set wS = Sheets("Sheet1") 
    intCounter = 1 

    With wS 
     Do While .Cells(2, intCounter).Value <> "Exchange" Then 
      intCounter = intCounter + 1 
     Loop 
     Set rngExchange = .Range(.Cells(2, intCounter), .Cells(2, intCounter)) 

     '.Activate 
     '.Range("B2").Activate 
     If Not .AutoFilterMode Then .AutoFilterMode = True 

     .Range("$A$2:$AP$778").AutoFilter Field:=intCounter, Criteria1:=Array(_ 
      "XBEL", "XBUD", "XBSE", "XQMH", "XWAR", _ 
      "BMEX", "XLIS", "XLIT", "XBUL", "ASEX", _ 
      "XDUB", "XBRU", "XLUX", "XSTO", "XSWX", _ 
      "XHEL", "XMOS", "MISX", "XCSE", "XVTX", _ 
      "IEPA", "XMIL", "XLIS", "BMEX", _ 
      "XLJU", "ASEX", "XRIS", "XBRA", "xlOn", _ 
      "XOSL", "XPAR", "XPRA", "XICE", "XIST", _ 
      "XTAL", "XMIL", "XTRN", "XBRU", "XLDN", _ 
      "XAMS", "XZAG", "XSWX", "XATH", "XMAD", "XOME", _ 
      "XMRV", "XADE", "XVTX", "XTAH", "RTSX", "XLTO", _ 
      "XDMI", "MFOX", "XMAD", "XMAT", "XTLX", "ICEU", _ 
      "XMON", "XTUR", "XBRD", "XEDX", "XOME", "XLIF"), Operator:=xlFilterValues 

    End With 'wS 

End Sub 
+0

コードがifを終了すると、intCounterの値は43になりますが、それは問題のようですが、修正できません。 – tombata

+0

@AntonPetrov:編集を参照してください! ;) – R3uK

関連する問題