我对excel不是很有经验 - 我更喜欢c#的人 - 希望一些excel的大师能够帮助我在这里!Excel独特价值查询
基本上我有一个电子表格只有一列文本数据(列a)。我需要查询这个数据列表。
我将需要基本上将一些更多的文本数据复制到另一列(让我们说列b),然后过滤掉列b中已存在于a列某处的记录,只留下唯一的唯一记录在列b中,但不是列a。
我试过使用先进的过滤器,但似乎无法得到它的工作。任何关于如何做到这一点的提示或建议都会很棒。
谢谢
我对excel不是很有经验 - 我更喜欢c#的人 - 希望一些excel的大师能够帮助我在这里!Excel独特价值查询
基本上我有一个电子表格只有一列文本数据(列a)。我需要查询这个数据列表。
我将需要基本上将一些更多的文本数据复制到另一列(让我们说列b),然后过滤掉列b中已存在于a列某处的记录,只留下唯一的唯一记录在列b中,但不是列a。
我试过使用先进的过滤器,但似乎无法得到它的工作。任何关于如何做到这一点的提示或建议都会很棒。
谢谢
可以动态筛选数据,说与公式C柱像
=IF(ISNA(VLOOKUP(B1,A:A,1,FALSE)),B1,"")
然后过滤非空单元格列C
否则,这个简单的宏将清除重复的地方
Sub FilterDuplicates()
Dim r As Range
For Each r In ActiveSheet.Columns("B").Cells
If r.Value <> "" Then
On Error Resume Next
WorksheetFunction.VLookup r, ActiveSheet.Columns("A"), 1, False
If Err.Number = 0 Then r.ClearContents
On Error GoTo 0
End If
Next r
End Sub
这应该做你所需要的。它在A列的B列中查找每个值,并在找到匹配项时删除该单元格。将数据粘贴到列B后运行代码。请注意,它不会从列B中删除重复项,它只是删除列B中列A中的所有值。要从列B中删除重复值,请选择列并从Data
选项卡中选择Remove Duplicates
。
你需要一个模块添加到工作簿,然后插入模块下面的代码:
代码:
Option Explicit
Sub RemoveMatchesFromColumn()
On Error Resume Next
Dim LastRow As Long
Dim SearchText As String
Dim MatchFound As String
LastRow = Range("b" & ActiveSheet.Rows.Count).End(xlUp).Row
SearchText = Range("b" & LastRow).Value
Do Until LastRow = 0
MatchFound = Find_Range(SearchText, Columns("A")).Value
If SearchText = MatchFound Then
Range("b" & LastRow).Delete Shift:=xlUp
End If
LastRow = LastRow - 1
SearchText = Range("b" & LastRow).Value
Loop
End Sub
Function Find_Range(Find_Item As Variant, _
Search_Range As Range, _
Optional LookIn As Variant, _
Optional LookAt As Variant, _
Optional MatchCase As Boolean) As Range
' Function written by Aaron Blood
' http://www.ozgrid.com/forum/showthread.php?t=27240
Dim c As Range
Dim firstAddress As Variant
If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas
If IsMissing(LookAt) Then LookAt = xlPart 'xlWhole
If IsMissing(MatchCase) Then MatchCase = False
With Search_Range
Set c = .Find(_
What:=Find_Item, _
LookIn:=LookIn, _
LookAt:=LookAt, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=MatchCase, _
SearchFormat:=False)
If Not c Is Nothing Then
Set Find_Range = c
firstAddress = c.Address
Do
Set Find_Range = Union(Find_Range, c)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Function
运行子RemoveMatchesFromColumn
。你可以进入它看看它在做什么F8或运行它与F5。
NON VBA METHOD
将这个公式中细胞C1
=IF(VLOOKUP(B1,A:A,1,0)=B1,"DELETE ME","")
拖动它,直到结束。然后过滤Col C上的数据DELETE ME
然后删除重复的数据。
VBA方法
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long, i As Long
Dim delRange As Range, aCell As Range
Set ws = Sheets("Sheet1")
With ws
lRow = .Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To lRow
Set aCell = .Columns(1).Find(What:=.Range("B" & i).Value, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
If delRange Is Nothing Then
Set delRange = .Range("B" & i)
Else
Set delRange = Union(delRange, .Range("B" & i))
End If
End If
Next i
If Not delRange Is Nothing Then delRange.Delete shift:=xlUp
End With
End Sub