Excel - 如何按“包含的字词”过滤?

时间:2016-03-07 12:23:03

标签: excel excel-vba excel-formula formula vba

我的数据格式如下:

enter image description here

我想按列表中的每个唯一字来过滤或过滤过滤器。我知道如何检索一个独特单词列表,如下所示:

enter image description here

所以我有那些数据。但是我如何按所有这些值进行过滤。我希望看到所有人气和价格的报告总结为每个单词。这当然意味着重叠,因为“自行车零件”数据会影响自行车和零件编号。思考? :)

1 个答案:

答案 0 :(得分: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