我想根据一个标准获取不同价值的列表,例如:我有一个商店列表,并且我想根据零售商标准“ BOULANGER”仅获取不同价值。
Sub distinctValues()
Dim LastRow As Long
Dim Crit1 As String
LastRow = Sheets("SOURCE").Cells(Rows.Count, "B").End(xlUp).Row
Sheets("SOURCE").Range("B1:B" & LastRow).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("TEST").Range("E2"), CopyToRange:=Sheets("TEST").Range("A12"), Unique:=True
End Sub
答案 0 :(得分:0)
如果您尝试获取包含关键字的唯一范围,则应该可以执行类似的操作。
Option Explicit
Private Sub OutputUniqueRange(SearchRange As Range, Keyword As String, OutputRange As Range)
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim cell As Range
For Each cell In SearchRange
With cell
If InStr(1, .Value2, Keyword, vbTextCompare) > 0 And Not dict.exists(.Value2) Then dict.Add .Value2, .Value2
End With
Next
If dict.Count = 0 Then Exit Sub
OutputRange.Range(OutputRange.Cells(1, 1).Address).Resize(dict.Count, 1) = Application.Transpose(dict.items())
End Sub
Public Sub TestSub()
Dim SearchRange As Range
Dim Keyword As String
Dim OutputRange As Range
Keyword = "Boulanger"
Set SearchRange = ThisWorkbook.Sheets("Sheet1").Range("A2:A34")
Set OutputRange = ThisWorkbook.Sheets("Sheet1").Range("B2")
OutputUniqueRange SearchRange, Keyword, OutputRange
End Sub
答案 1 :(得分:0)
我怀疑您的条件范围未正确设置和/或在工作表中命名。
在.AdvancedFilter
中,您具有:
Range(Crit1)
根据您的代码,它将被解释为:
Range("BOULANGER")
这假定您在测试工作表上的某个地方有一个命名范围,名为BOULANGER
,并且引用了列中的两个单元格,其中第一个包含Store
,第二个包含{{1} }
如果设置正确,则代码可以正常工作。
请注意,在显示条件的屏幕截图中,第一个单元格包含BOULANGER
而不是Criteria
。因此,即使您具有定义的范围设置来包含这两个单元格,也不会起作用,因为第一行的名称必须与要过滤的列的名称相同。
答案 2 :(得分:0)
这应该可以完成您想做的事情;查看代码中的注释。
SELECT `Time`, `faults1`,`faults2`
FROM `SYSTEM`.`rawdata`
WHERE `Time` > BeginTime AND `Time` < EndTime