excel筛选出AB列姓名性别筛选到其它列,并且只保留一个?

excel自动筛选出AB列姓名性别筛选到其它列,并且只保留一个

1、以excel2010版本为例,如图A列里的名字有相同的,先把A列的名字全部复制到D列;

2、然后在页面上方找到“数据”选项,点击;

3、在数据下面的菜单栏里,找到“删除重复项”,点击;

4、就会弹出删除重复项的设置框,选择全选后,点击下面的确定;

5、就会发现D列相同的名字删掉了,只剩下一个,这时的弹出框点击确定则可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-12-12

用VBA编个程序代码吧。

首先,你的Office得是支持VBA的版本,貌似WPS个人免费版是不支持VBA的。

然后,打开你的工作簿---另存为---.xlsm启用宏的工作簿。

打开你的工作簿,按ALT+F11打开VBA编辑器。

在编辑器的左侧栏中,双击你要添加代码的工作表名。

在编辑器的右侧编辑区,粘贴代码。

按照图片上的绿色注释文字,给变量指定列号和行号,即可,

其他代码看不懂没关系。

做好以后,关闭VBA编辑器,保存一下工作簿。就完成了。

效果就是每当你在原始数据区写入数据时,并且姓名.性别.数量三个单元格均不为空时,就会自动把数据汇总到汇总区域中。


Private Sub Worksheet_Change(ByVal Target As Range)

    Dim ia1%, ia2%, ia3%, ib1%, ib2%, ib3%, iar&, ibr&

    '***********************************************

    ia1 = Columns("A").Column '姓名是哪一列(字母)

    ia2 = Columns("B").Column '性别是哪一列(字母)

    ia3 = Columns("C").Column '数量是哪一列(字母)

    iar = 8 '原始数据从哪一行开始(标题行不算)

    '***********************************************

    ib1 = Columns("F").Column '姓名写到哪一列(字母)

    ib2 = Columns("G").Column '性别写到哪一列(字母)

    ib3 = Columns("H").Column '数量写到哪一列(字母)

    ibr = 2 '去重合计从哪一行开始(标题行不算)

    '***********************************************

    '下面进行数据处理

    Dim rg As Range, irow&, ir&, ic%

    ir = Target.Row

    ic = Target.Column

    If ir >= iar Then

        If ic = ia1 Or ic = ia2 Or ic = ia3 Then

            If Cells(ir, ia1) <> "" And Cells(ir, ia2) <> "" And Cells(ir, ia3) <> "" Then

                Set rg = Cells(ibr - 1, ib1).Resize(Rows.Count - ibr + 2).Find(Cells(ir, ia1), lookat:=xlWhole, MatchCase:=False)

                If Not rg Is Nothing Then

                    irow = rg.Row '如果汇总区已经存在该姓名,则获取该姓名的行号

                Else

                    irow = Cells(Rows.Count, ib1).End(3).Row + 1 '如果汇总区不经存在该姓名,则获取尾部空行的行号

                    If irow < ibr Then irow = ibr '如果该行号小于ibr,则重新赋值为ibr

                End If

                Cells(irow, ib1) = Cells(ir, ia1) '输出姓名到汇总区

                Cells(irow, ib2) = Cells(ir, ia2) '输出性别到汇总区

                Cells(irow, ib3) = Application.SumIf(Cells(iar, ia1).Resize(Rows.Count - iar + 1, 1), _

                    Cells(ir, ia1), Cells(iar, ia3).Resize(Rows.Count - iar + 1, 1)) '输出合计数量到汇总区

            End If

        End If

    End If

End Sub

如果每次打开工作簿时,都提示你启用宏,可以按上图设置一下。

点左上角的:文件--选项--信任中心--信任中心设置--宏设置--启用所有宏--确定。

第2个回答  2021-12-12

你好,这可以通过分类汇总功能来完成,先按姓名排序,然后执行按姓名分类汇总,就可以得到结果,然后复制到新单元格区域。

也可以使用数据透视表,自动完成。

分类汇总

追问

复制到单元格式太麻烦了

追答

因为这是数据库运算,不是单纯的单元格运算,涉及多列。

excel给出的方案就是这样。

你的问题不是标准模式,除非自己编写VBA代码,才能自动完成。

第3个回答  2021-12-12
2007以上的EXCEL都有删除重复项的功能。你的这个要求不是把姓名和姓名和性别筛选到其他列并保留一个,而是去掉重复项只保留一个。
可以把A:B列的姓名复制粘贴到E:F列,然后找到功能区的数据--删除重复项。在弹出的选项里,可以选择是否包含标题,以及判断重复项的依据,例如你是单纯按照姓名重复就删除,还是姓名与性别组合不重复才删除。这个非常方便,可以根据自己的需要来处理。
你可以先试试。有什么问题,可以继续追问!追问

我这个想做到自动化,就是我在AB列填写数据以后能把数据汇总到DF列,但是不要重复项出现,只保留一个,但是又不能把AB列数据删掉了。

追答

自动的也可以,有三种方案可选
一种是数组公式,公式比较繁琐,数据量比较大的时候会卡。我曾经发过一个视频:
《用EXCEL函数做一个高效的自动去重加合计画框线的动态汇总表》
应该可以找到。也可以直接跟我要。
另一种是用VBA代码写一个宏事件,让代码去实时监测你的单元格是否有改动,有改动就核对重新统计。 当然,代码要根据具体的表去写。
还有一种就是用数据透视表。数据更新后,数据透视表需要手动刷新。
当然,其他一些工具也可以实现, 比如用SQL、power query等。那些工具用起来更麻烦一些。所以就不说了。

第4个回答  2021-12-12

鼠标先选择E1单元格,然后,数据--合并计算,选择数据区域,点添加,确定

效果图

追问

你这没把性别一起筛选出来

追答

那就只能使用公式了

先将名字一列复制过去,然后,数据--删除重复值,再把表头也复制过去

F2=VLOOKUP(E2,$A$2:$C$18,2,0)

G2=SUMPRODUCT(($A$2:$A$18=E2)*$C$2:$C$18)

如果有同名同姓的学生数据,最好是用学号之类的唯一能区分学生的进行查询性别。

相似回答