2015-02-12 92 views
1

我使用片2拉出的數據片的1Excel中排序的動態列表或使用VBA然後排序

A9具有該式中那樣:

=(INDEX(sheet1!$G$9:$G$7000,MATCH(0,INDEX(COUNTIF($A$8:A8,sheet1!$G$9:$G$7000),0,0),0)) 

(看起來通過G列並取出重複和空白)

B9具有此式:

=IF(MAX(IF($A9=sheet1!G:G,sheet1!E:E))=MIN(IF($A9=sheet1!G:G,sheet1!E:E)),"Only 1 Entry",MAX(IF($A9=sheet1!G:G,sheet1!E:E))-MIN(IF($A9=sheet1!G:G,sheet1!E:E))) 

(這個看起來在列A Sheet 2上然後查找的日期,Min和Max Sheet 1上,以確定一個特定的項目幾歲)

C9具有此式:

=SUMIF(sheet1!$G$9:$G$7000,A9,sheet1!$B$9:$B$7000) 

(這在片2的外觀由於塔A和參考SHEET1添加up hours)

問題是,如果我對sheet2上的列C進行排序沒有任何變化。我認爲,因爲當它試圖過濾它時,動態公式將它重新排序回到表1上的內容。基本上無論你如何嘗試和過濾它,列表都與基於sheet1的列表保持一致。我甚至嘗試對錶1中的列進行排序以查看錶2是否會更改,但是由於表2中C列中的數據實際上不存在於表1中,因此無法工作。

如何過濾列C或甚至B以及其他已有的動態公式?

我已經在網上搜索找到解決方案,但無法找到任何有效的工具。如果我不能使用這個動態列表,我想也許我可以使用VBA創建第2列中的列表,並使列表成爲靜態。

我也搜索過一個VBA刪除重複和空白,但由於某種原因我想出了一個空白。我發現有一些做了部分,但不是兩個。

Sub MakeUnique() 

    Dim vaData As Variant 
    Dim colUnique As Collection 
    Dim aOutput() As Variant 
    Dim i As Long 

    'Put the data in an array 
    vaData = Sheet1.Range("A5:A7000").Value 

    'Create a new collection 
    Set colUnique = New Collection 

    'Loop through the data 
    For i = LBound(vaData, 1) To UBound(vaData, 1) 
     'Collections can't have duplicate keys, so try to 
     'add each item to the collection ignoring errors. 
     'Only unique items will be added 
     On Error Resume Next 
      colUnique.Add vaData(i, 1), CStr(vaData(i, 1)) 
     On Error GoTo 0 
    Next i 

    'size an array to write out to the sheet 
    ReDim aOutput(1 To colUnique.Count, 1 To 1) 

    'Loop through the collection and fill the output array 
    For i = 1 To colUnique.Count 
     aOutput(i, 1) = colUnique.Item(i) 
    Next i 

    'Write the unique values to column B 
    Sheet2.Range("A9").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput 

End Sub 

這VBA不產生重複的列表但留下空白...

那麼,如何能夠對片材2的列B和C可排序與來自數據被衍生於片材1列A沒有重複和空白?有沒有辦法對動態公式進行排序和使用,還是應該使用VBA來完成?

回答

1

這個版本的發佈你的代碼將包括唯一列表空白:

Sub MakeUnique() 

    Dim vaData As Variant 
    Dim colUnique As Collection 
    Dim aOutput() As Variant 
    Dim i As Long 

    'Put the data in an array 
    vaData = Sheet1.Range("A5:A7000").Value 

    'Create a new collection 
    Set colUnique = New Collection 

    'Loop through the data 
    For i = LBound(vaData, 1) To UBound(vaData, 1) 
     'Collections can't have duplicate keys, so try to 
     'add each item to the collection ignoring errors. 
     'Only unique items will be added 
     If vaData(i, 1) <> "" Then 
      On Error Resume Next 
       colUnique.Add vaData(i, 1), CStr(vaData(i, 1)) 
      On Error GoTo 0 
     End If 
    Next i 

    'size an array to write out to the sheet 
    ReDim aOutput(1 To colUnique.Count, 1 To 1) 

    'Loop through the collection and fill the output array 
    For i = 1 To colUnique.Count 
     aOutput(i, 1) = colUnique.Item(i) 
    Next i 

    'Write the unique values to column B 
    Sheet2.Range("A9").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput 

End Sub 
+0

這部分的偉大工程,謝謝。現在我只需要弄清楚排序的一部分:)似乎與我在列C中的方程式,當我排序它留下一堆「空白」在頂端...... – DA69 2015-02-13 03:59:43

+0

你是按宏排序? – 2015-02-13 04:00:49

+0

清理列C1中的公式: = IF(A9 =「」,「」,SUMIF(Sheet1!$ G $ 9:$ G $ 7000,A9,Sheet1!$ B $ 9:$ B $ 7000)) 在工作表2上它從C9到C500。如果我手動排序A到Z,它可以正常工作,但如果我將Z排序到A,結果會在底部留下空白處。我正在嘗試創建一個動態範圍,它只包含可見的數字,但還沒有正常工作。然後我想將它變成一個VBA。 – DA69 2015-02-13 04:24:32