发布网友 发布时间:2022-04-30 03:40
共4个回答
热心网友 时间:2023-10-09 23:59
用VBA吧,方便快捷。
第一步,把你的表另存为“.xlsm格式,即启用宏的工作簿”。
第二步,按Alt+F11打开VB编辑器。
第三步,在左侧点你要添加此功能的表名(除了Sheet1,这个表用来存放原始数据)
第四步,在右侧粘贴这段代码。
第五步,粘贴完毕后,关闭VB编辑器,即可。
附加一步说明:如果你嫌每次打开文件时都会提示启用宏太麻烦的话,可以在宏安全性中设置为启用所有宏。
代码如下(代码中单引号开头的绿字是注释文字,如不需要可以去掉):
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Name = Sheet1.Name Then Exit Sub '如果是Sheet1表那么直接退出程序。
If Target.Address = "$A$1" And Range("A1") <> "" Then '如果变更的单元格是A1并且A1单元格不是空值,那么:
Dim irow&
irow = Range("A" & Rows.Count).End(3).Row '赋值irow等于该表A列最末数据所在的行号
If irow > 1 Then Rows("2:" & irow).Delete shift:=xlUp '如果irow>1那么删除第2行至第irow行,下方行上移。
irow = Sheet1.Range("B" & Rows.Count).End(3).Row '重新赋值irow等于Sheet1表B列最末数据所在的行号
Sheet1.Rows("2:" & irow).AutoFilter Field:=2, Criteria1:=Array(Range("A1").Text), Operator:=xlFilterValues '在Sheet1表B列的第2行至第irow行筛选A1的文本值
irow = Sheet1.Range("B" & Rows.Count).End(3).Row '重新赋值irow等于Sheet1表B列最末数据(可见数据,有可能原来最末数据被筛选时隐藏掉了)所在的行号
Sheet1.Rows("2:" & irow).Copy Rows(2) '复制Sheet1表中的可见数据行,粘贴到该表第2行。
Sheet1.Cells.AutoFilter 'Sheet1表退出筛选
End If
End Sub
热心网友 时间:2023-10-09 23:59
Sheet2表的A3单元格输入公式=IFERROR(INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$B$3:$B$1000=$A$1,ROW($3:$1000)),ROW(A1))),"")热心网友 时间:2023-10-10 00:00
那你直接在表1筛选就可以了,何必跑到表2去多此一举呢?
热心网友 时间:2023-10-10 00:00
用VBA处理参考下面
Excel怎样输入数据后对数据表筛选出结果