2017-01-17 252 views
0

下面的代碼是較大表單的一部分。我試圖做的是:基於列的1 Excel VBA從篩選範圍中選擇單元格

  • 基於在列表框從2列並拉出從過濾的範圍內的數據的用戶所選項目

    • 在片材2(數據列表)過濾數據3爲特定的行和粘貼到片材1(JHA)
    • 我知道哪些行的數據是僅在過濾的列表,因爲我在2D陣列dataArr

      Sheets("Data List").Select 
      
      With Worksheets("Data List").Range("A1", Sheets("Data List").Range("C1").End(xlDown)) 
      .AutoFilter field:=1, Criteria1:=UserForm1.ListBox3.List(k) 'filter data based on user listbox selection 
      For j = 0 To UserForm1.ListBox1.ListCount - 1 'Find user selection from LB3 in LB1 to match filtered data order 
          If UserForm1.ListBox3.List(k) = UserForm1.ListBox1.List(j) Then Exit For 
      Next j 
      For h = 0 To UBound(dataArr, 2) 
          If dataArr(j, h) = 1 Then 'If the user has selected they want this data then add it to the array 
      
          Set myRange = Sheets("Data List").AutoFilter.Range().SpecialCells(xlCellTypeVisible) 
          myRange.Select 
          arr1(l) = myRange.Cells(h + 2, 2) 
          arr2(l) = myRange.Cells(h + 2, 3) 
          l = l + 1 
      End If 
      Next h 
      .AutoFilter 
      

      存放該位後代碼I redimension數組並粘貼數據其他表。我的問題是,myRange.cells是從未經過濾的數據中進行選擇。舉例來說,我的過濾數據集包括第7,11,15和21行。當我過濾它並設置myRange時,它將突出顯示4行加上標題。但是,當我使用單元格(2,2)時,我得到了未過濾的第2行第2列數據,而不是我的過濾數據集。我確信我錯過了一些簡單的東西,但我看不到它是什麼。

  • 回答

    0

    過濾範圍可(當然,它幾乎總是!)一個不連續的,所以你必須來遍歷它和俯仰的第n個值

    您可能需要使用此功能:

    Function GetFilteredCellsNthValue(filteredRng As Range, nthVal As Long) As Variant 
        Dim iVal As Long, Dim cell As Range 
    
        iVal = 1 
        ForEach cell in filteredRng 
         If iVal = nthVal Then Exit For 
         iVal = iVal + 1 
        Next 
        GetFilteredCellsNthValue = Iif(iVal>filteredRng.Count, CVErr(xlErrValue), cell.Value) 
    End Function 
    

    這可能在你的「主」的代碼中使用如下

    arr1(l) = GetFilteredCellsNthValue(.Resize(,1).Offset(.Rows.Count - 1,1).SpecialCells(xlCellTypeVisible)), h + 2) 
    
    arr2(l) = GetFilteredCellsNthValue(.Resize(,1).Offset(.Rows.Count - 1,2).SpecialCells(xlCellTypeVisible)), h + 2) 
    
    +0

    @mylesMoose,你通過它得到什麼? – user3598756

    +0

    感謝您的回答。非常乾淨的方式去通過它。我沒有關於過濾範圍不連續。 – mylesMoose

    +0

    不客氣。您可能希望將答案標記爲已接受。謝謝! – user3598756