2016-03-07 109 views
0

我有以下格式的數據:Excel - 如何按「包含字詞」過濾?

enter image description here

我想通過列表中的每個唯一字過濾或旋轉過濾器。我知道了如何獲取的唯一單詞的列表,像這樣:

enter image description here

,所以我有這些數據。但是,我如何過濾所有這些值。我希望看到每一個這些詞彙總結的所有人氣和價格的報告。這當然意味着重疊,因爲「自行車零件」數據會影響自行車和零件編號。思考? :)

回答

1

要回答您的最終問題,請使用=SUMIF公式。

爲了實現全部自動化,請使用VBA和文本到列的組合,刪除重複項和=SUMIF公式。

我能夠創建一個具有以下所期望的結果,雖然得到流行的總和似乎很奇怪...

Sub test1() 

Application.ScreenUpdating = False 

Dim lRow As Integer 
Dim sRange As Range 

lRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row 

Columns("F:H").ClearContents 

Range("A2:A" & lRow).Select 
Selection.Copy 
Range("F2").Select 
ActiveSheet.Paste 
Columns("F:F").Select 
Application.CutCopyMode = False 
Selection.TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, _ 
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ 
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ 
    :=" ", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True 

Set sRange = Range("G1") 
sRange.Select 

While Selection.End(xlDown).Value <> "" 

sRange.Offset(1, 0).Select 
Range(ActiveCell, ActiveCell.Offset(lRow - 1, 0)).Select 
Selection.Cut 
Range("F2").Select 
Selection.End(xlDown).Select 
Selection.Offset(1, 0).Select 
ActiveSheet.Paste 

Set sRange = sRange.Offset(0, 1) 
sRange.Select 

Wend 

lRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "F").End(xlUp).Row 

Columns("F:F").Select 
ActiveSheet.Range("$F$1:$F$" & lRow).RemoveDuplicates Columns:=1, Header:=xlNo 

lRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "F").End(xlUp).Row 

Range("F2").Select 

ActiveCell.Offset(0, 1).Value = "=SUMIF($A:$A,""*""&$F2&""*"",$B:$B)" 
ActiveCell.Offset(0, 1).Style = "Percent" 
ActiveCell.Offset(0, 2).Value = "=SUMIF($A:$A,""*""&$F2&""*"",$C:$C)" 
ActiveCell.Offset(0, 2).Style = "Currency" 

Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(lRow - 2, 2)).FillDown 

Range("F1").Value = Range("A1").Value 
Range("G1").Value = Range("B1").Value 
Range("H1").Value = Range("C1").Value 

Range("A1").Select 

Application.ScreenUpdating = True 

End Sub 
+0

這幾乎是完美的。儘管我需要它動態地支持額外的列,不僅僅是三個,而且我也不需要平均數。 我意識到我說過上述的總和,那是我的錯誤,我可以解決這個問題。關於動態事物的任何想法壽? –

+0

將'SUMIF'更改爲'AVEAGEIF',它應該適用於平均值。要動態地執行,使用'While'循環,引用需要平均值的列標題。即'Range(「B1」)select .... while activecell <>「」''等引用上面代碼中的'While'循環 –

+0

美麗。謝謝。 :) –