能看懂不,将左侧的数据(sheet1),筛选后分别生成(sheet2)和(sheet3)两张表格。也就将不重复值过滤出来,将重复的值过滤出来,歇歇。
有语言限制吗?我可以使用go来完成,已编译成windows,mac,linux平台均支持的可执行程序,有需要的话发给你
几十MB的文件几乎在一秒之内均可快速完成
这个我并不是很擅长,vba高级目前仅看到threenewbee能熟练运用,这是我的思路,如果@threenewbee
看到了,可以zhizheng:
Sub FilterData()
Dim LastRow As Long, i As Long, j As Long
Dim UniqueData() As Variant, DuplicateData() As Variant
Dim UniqueCount As Long, DuplicateCount As Long
Dim dict As Object
Dim sht1 As Worksheet, sht2 As Worksheet, sht3 As Worksheet
Set sht1 = ThisWorkbook.Worksheets("Sheet1")
LastRow = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row
UniqueCount = 0
DuplicateCount = 0
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To LastRow
If Not dict.exists(sht1.Cells(i, 1).Value) Then
dict(sht1.Cells(i, 1).Value) = 1
UniqueCount = UniqueCount + 1
Else
DuplicateCount = DuplicateCount + 1
End If
Next i
ReDim UniqueData(1 To UniqueCount, 1 To 1)
ReDim DuplicateData(1 To DuplicateCount, 1 To 1)
j = 1
k = 1
For Each key In dict.keys
If dict(key) = 1 Then
UniqueData(j, 1) = key
j = j + 1
Else
DuplicateData(k, 1) = key
k = k + 1
End If
Next key
Set sht2 = ThisWorkbook.Worksheets("Sheet2")
Set sht3 = ThisWorkbook.Worksheets("Sheet3")
sht2.Cells.ClearContents
sht3.Cells.ClearContents
sht2.Range("A1").Resize(UniqueCount, 1).Value = UniqueData
sht3.Range("A1").Resize(DuplicateCount, 1).Value = DuplicateData
End Sub
我想要EXCEL自带的功能,VBA或者其他过渡性公式办法。
目前我能想到的是在sheet1最后一列添加识别公式,判定每行关于B列数据的唯一性,如果是唯一,就标识唯一,如果不是就标识重复。
然后在sheet2和sheet3中分别通过查找函数,归类。
如果有更高级的,可以补充,歇歇。
以下是一个针对 EXCEL 表格数据筛选之去掉唯一行保留重复行的 VBA 代码样例:
Sub delete_unique_rows()
Dim last_row As Long
Dim i As Long, j As Long
Dim unique As Boolean
last_row = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
For i = last_row To 2 Step -1
unique = True
For j = 1 To i - 1
If Application.WorksheetFunction.CountIf(Range("A" & j & ":A" & last_row), Range("A" & i)) > 0 Then
unique = False
Exit For
End If
Next j
If unique Then
Rows(i).Delete
End If
Next i
End Sub
该程序针对 EXCEL 表格中的一列数据,删除唯一行,保留重复行,并将结果保存在原表格中。程序使用双层循环遍历表格,对每个单元格(即每一行)进行操作。在内部循环中,使用 COUNTIF
函数计算当前单元格在整个列中出现的次数,如果次数大于 0,则表示该单元格出现过重复值,重置 unique
值。在外部循环中,如果行被标记为唯一,删除该行。
注意:使用此程序前,请确保您已做好数据备份工作。在程序运行时,请关闭任何可能与表格数据或程序代码产生冲突的程序或工具。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个问题可以使用Excel自带的数据筛选功能轻松解决。
首先,选中要进行筛选的数据,在Excel的菜单中选择“数据” -> “筛选”。然后,选择“高级筛选”。
在高级筛选的对话框中,选择“复制到其他位置”,并指定一个新的位置(这里我们选择将结果分别保存到Sheet2和Sheet3)。
在“列表区域”中输入要筛选的范围,这里指的是Sheet1中的数据范围。在“条件区域”中输入筛选条件,对于本题,筛选条件为“有重复值的行”。
具体来说,我们需要选中数据范围(包括表头)并输入以下公式:
=COUNTIF($A$1:$A$6,A2)>1
其中,$A$1:$A$6是数据范围,A2是当前行的第一个数据单元格,>1代表当前行的数据在数据范围中出现了不止一次。
在选择好范围和条件之后,点击“确定”,即可得到分别包含唯一行和重复行的Sheet2和Sheet3。
如果想要用代码实现这个过程,可以使用Python的pandas库实现,以下是基本的代码框架:
import pandas as pd
# 读取数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 筛选唯一行
df_unique = df.drop_duplicates()
# 筛选重复行
df_duplicate = df[df.duplicated()]
# 保存筛选结果到Sheet2和Sheet3
with pd.ExcelWriter('data.xlsx') as writer:
df_unique.to_excel(writer, sheet_name='Sheet2', index=False)
df_duplicate.to_excel(writer, sheet_name='Sheet3', index=False)
其中,read_excel()函数用于读取数据文件,drop_duplicates()函数用于筛选唯一行,duplicated()函数用于筛选重复行。最后,使用ExcelWriter()函数将筛选结果保存到数据文件中的不同表格中。
如果我的回答解决了您的问题,请采纳!
还是写个vba脚本吧
在EXCEL中如何快速地删除重复值行,并保留重复的一行数据~!
可以借鉴下
https://zhidao.baidu.com/question/1934077789937164667.html
可以使用FME做