精华内容
下载资源
问答
  • Pandas与VBA筛选数据的比较 Author:Collin_PXY 需求: 将B列里值为Completed 和 Pending的A,B,D三列数据筛选出来,新建一个名为 Filited_data的worksheet来存放筛选数据。 Python解决: 在这里插入代码片 ...

    Pandas与VBA筛选数据的比较

    Author:Collin_PXY

    需求:

    在这里插入图片描述将B列里值为Completed 和 Pending的A,B,D三列数据筛选出来,新建一个名为 Filited_data的worksheet来存放筛选数据。

    Python解决:

    from pandas import DataFrame
    import pandas as pd
    import openpyxl
    
    # 处理数据
    file_path = r"C:\Users\12078\Desktop\UIPATH_test\filter_data\data_need_to_be_filtered_python.xlsx"
    df=pd.read_excel(file_path)
    df=df.loc[df['status']!="Cancelled",['CNUM','status',"Tax"]]
    df=df.reset_index(drop=True)
    df['Tax']=df['Tax'].astype("float")
    
    # 保存数据
    writer = pd.ExcelWriter(file_path,engine='openpyxl')
    writer.book = openpyxl.load_workbook(writer.path)  # 此句如果缺少,后面语句执行时会覆盖文件里原有内容。
    df.to_excel(excel_writer=writer,sheet_name="Filited_data",index=False)    # 会新建一个新建 Filited_data,如果已经存在,则加数字后缀。
    writer.save()
    writer.close() 
    

    VBA解决

    Sub FilterData()
    On Error GoTo errorhandling
        Dim wb_data As Workbook
        Dim ws_data As Worksheet
        Dim ws_filted As Worksheet
        Dim file_path As String
        Dim usedrows As Integer
    
        Dim arr_filter As Variant
        arr_filter = Array("status", "Completed", "Pending")
        
        file_path = "C:\Users\12078\Desktop\UIPATH_test\filter_data\data_need_to_be_filtered.xlsx"
        Set wb_data = checkAndAttachWorkbook(file_path)
        Set ws_data = wb_data.Worksheets("data")
        wb_data.Worksheets.Add(After:=Worksheets("data")).Name = "Filted_data"
        Set ws_filted = wb_data.Worksheets("Filted_data")
    
        usedrows = getLastValidRow(ws_data, "B")
        ws_data.Range("$A$1:$D$" & usedrows).AutoFilter Field:=2, Criteria1:=arr_filter,   Operator:=xlFilterValues
    
        'Copy column A,B,D to new sheet:
        'ws_data.Range("A1:D" & usedrows).SpecialCells(xlCellTypeVisible).Copy ws_filted.Range("A1")
        'Copy column A,B,D to new sheet:
        Union(ws_data.Range("A1:B" & usedrows), ws_data.Range("D1:D" & usedrows)).Copy ws_filted.Range("A1")
        ws_filted.Cells.WrapText = False
        ws_filted.Columns("A:AF").AutoFit
    
        checkAndCloseWorkbook file_path, True
    Exit Sub
    errorhandling:
        checkAndCloseWorkbook file_path, False
    End Sub 
    
    '辅助函数:
    'Get last row of Column N in a Worksheet
    Function getLastValidRow(in_ws As Worksheet, in_col As String)
        getLastValidRow = in_ws.Cells(in_ws.Rows.count, in_col).End(xlUp).Row
    End Function
    
    Function checkAndAttachWorkbook(in_wb_path As String) As Workbook
        Dim wb As Workbook
        Dim mywb As String
        mywb = in_wb_path
        For Each wb In Workbooks
            If LCase(wb.FullName) = LCase(mywb) Then
                Set checkAndAttachWorkbook = wb
                Exit Function
            End If
        Next
        Set wb = Workbooks.Open(in_wb_path, UpdateLinks:=0)
        Set checkAndAttachWorkbook = wb
    End Function    
    
    Function checkAndCloseWorkbook(in_wb_path As String, in_saved As Boolean)
        Dim wb As Workbook
        Dim mywb As String
        mywb = in_wb_path
        For Each wb In Workbooks
            If LCase(wb.FullName) = LCase(mywb) Then
                wb.Close Savechanges:=in_saved
                Exit Function
            End If
        Next
    End Function

    结果

    在这里插入图片描述

    展开全文
  • Excel VBA 筛选

    2012-08-20 08:37:49
    vba的代码来实现excel的筛选功能,在制作excel模版有大量数据的情况下非常有用,有效的提高查询速度
  • excel vba筛选

    千次阅读 2017-02-10 09:45:32
    1、筛选vba 代码为 set rg=range("a1:a100") rg.AutoFilter Field:=1, Criteria1:="内容" rg 为筛选区域, Criteria1为筛选的值,比如在A1列内筛选内容为北京区的 ,则 Criteria1="北京区" 2、高级筛选 ...

    excel 中有两个筛选

    1、筛选,vba 代码为

    set rg=range("a1:a100")

    rg.AutoFilter Field:=1, Criteria1:="内容"

    rg 为筛选区域, Criteria1为筛选的值,比如在A1列内筛选内容为北京区的 ,则 Criteria1="北京区"

    2、高级筛选

     Rg.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("A1"), Unique:=True

    同理rg 为rang 区,action 有两个值,一个是不改变,一个是复制,copytoRange  就是结果复制内容到

    这里主要说复制结果,这个结果是不重复的,比如有1000行数据,里面有10个北京区,20个上海区,四川区等,他会吧内容不重复的列出了

    这两个结合起来使用 就可以达到自定义筛选了

      Rg.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("A1"), Unique:=True
        x = Range("A60000").End(xlUp).Row
    ReDim filterArray(0 To x - 1)
        For i = 0 To x - 2
        filterArray(i) = Range("A" & i + 2)
       Rg.AutoFilter Field:=1, Criteria1:=filterArray(i)

    这样就可以实现筛选自动选择内容

    展开全文
  • VBA筛选拆分脚本

    2014-01-14 18:47:42
    采用vba根据对excel表某一列进行筛选拆分
  • VBA筛选AutoFilter用法

    万次阅读 多人点赞 2017-06-24 23:42:10
    在面对大量数据时,我们可以使用Excel的筛选功能,滤出我们需要的信息。在本文中,我们先从Excel中的“筛选”命令谈起。  如下图所示的工作表,将活动...上述操作录制的VBA代码如下: Sub Macro1() ' ' Macro1

            在面对大量数据时,我们可以使用Excel的筛选功能,滤出我们需要的信息。在本文中,我们先从Excel中的“筛选”命令谈起。

            如下图所示的工作表,将活动单元格置于任一数据单元格中,单击功能区中的“排序和筛选”中的“筛选”命令,可以看到表头单元格中出现了筛选下拉箭头。


     

    上述操作录制的VBA代码如下:

    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        Selection.AutoFilter
    End Sub

            接着操作。单击内容为“语文”的下拉箭头(即表头第3列),选择“数字筛选——大于(G)…”,在“自定义自动筛选方式”对话框的“显示行”中,第一个组合框左侧选择“大于或等于”,右侧输入“80”,第二个组合框左侧选择“小于”,右侧输入“90”,即筛选语文分数大于或等于80且小于90的数据,结果如下图所示。


    制的代码如下:

    Sub Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        Selection.AutoFilter
       ActiveSheet.Range('$A$1:$F$19').AutoFilter Field:=3,Criteria1:='>=80', _
            Operator:=xlAnd,Criteria2:='<90'
    End Sub

            观察上面录制的代码,可以看出,Excel VBA使用AutoFilter方法来实现“筛选”功能,并提供了一系列可选的参数来进一步执行筛选操作。

    AutoFilter方法的语法及说明

    下面是Range对象的AutoFilter方法的语法:

    Range对象.AutoFilter(Field,Criterial1,Operator,Criteria2,VisibleDropDown)

    说明:

    1. 参数Field,指定想要基于筛选的字段的整数偏移量。从列表的左侧算起,最左侧的字段是字段一。

    2. 参数Criterial1,指定判断条件(为字符串)。使用“=”查找空字段,或者使用“<>”查找非空字段。如果忽略该参数,那么判断是全部。如果参数OperatorxlTop10Items,那么参数Criterial1指定项目的数量。

    3. 参数Operator,指定筛选的类型,为XlAutoFilterOperator常量之一:

    • xlAnd:值为1Criteria1Criteria2的逻辑与。

    • xlOr:值2Criteria1Criteria2的逻辑或。

    • xlTop10Items:值3。显示最大值的项(在Criteria1中指定项目数)。

    • xlBottom10Items:值4。显示最小值的项(在Criteria1中指定项目数)。

    • xlTop10Percent:值5。显示最大值的项(在Criteria1中指定百分比)。

    • xlBottom10Percent:值6。显示最小值的项(在Criteria1中指定百分比)。

    • xlFilterValues:值7。筛选值。

    • xlFilterCellColor:值8。单元格的颜色。

    • xlFilterFontColor:值9。字体颜色。

    • xlFilterIcon:值10。筛选图标。

    • xlFilterDynamic:值11。动态筛选。

    • 参数Criteria2,指定第二个判断条件(字符串),使用Criterial1Operator构建复合判断条件。

    • 参数VisibleDropDown,设置为True则显示所筛选字段的自动筛选下拉箭头;设置为False则隐藏所筛选字段的自动筛选下拉箭头。默认为True

    • 如果忽略所有参数,那么AutoFilter方法简单地切换指定区域的自动筛选下拉箭头的显示。

     

    示例1:移除自动筛选提供的下拉箭头

            在Excel中使用自动筛选时,会在每列顶部都添加一个下拉箭头以获取相应的筛选项。有时,我们只需要使用其中某些字段的下拉箭头,不需要其它字段带有下拉箭头,以免误操作这些字段。例如,上面的示例中,我们只需要代表科目的语文、数学、英语、历史字段有下拉箭头,而移除列A、列B中的下拉箭头。代码如下:

    Sub testAutoFilter1()
        Range('A1').AutoFilter Field:=1,VisibleDropDown:=False
        Range('A1').AutoFilter Field:=2,VisibleDropDown:=False
    End Sub

    即,将相应列字段的参数VisibleDropDown设置为False

    执行后的效果如下图:

     

    示例2:一次执行多个列字段的筛选

    仍以本文开头的工作表为例,要求得到语文成绩大于等于80的男生的数据记录。代码如下:

    Sub testAutoFilter2()
        Range('A1').AutoFilter Field:=2,Criteria1:='=男'
        Range('A1').AutoFilter Field:=3,Criteria1:='>=80'
    End Sub

     

    示例3:复制筛选结果

    将示例2中得到的结果复制到以单元格H21开头的区域中。代码如下:

    Sub testAutoFilter3()
        Dim lngLastRow As Long
       
        '找到工作表中最后一行
        lngLastRow = Range('A' &Rows.Count).End(xlUp).Row
       
        '按条件执行自动筛选
        Range('A1').AutoFilter Field:=2,Criteria1:='=男'
        Range('A1').AutoFilter Field:=3,Criteria1:='>=80'
        
        '将筛选后的结果复制到指定位置
        Range('A1:F' &lngLastRow).Copy Range('H21')
    End Sub

    可以看出,Copy方法仅复制可见单元格中的内容。

     

    示例4:删除筛选出的数据

    如下图所示的工作表,我们要删除列A中单元格内容为“0”的数据行。

    此时,我们可以使用AutoFilter方法筛选出这些行,然后进行删除。代码如下:

    Sub testAutoFilter4()
        Dim rng As Range
       
        '设置筛选区域
        Set rng = Range('A1:B10')
       
        '如果开启了筛选模式则关闭该模式
        If ActiveSheet.AutoFilterMode = True Then
            ActiveSheet.AutoFilterMode = False
        End If
       
        '筛选列A中内容为0的单元
        rng.AutoFilter Field:=1,Criteria1:='0'
       
        '删除筛选出来的行
        With rng
            .Offset(1).Resize(.Rows.Count -1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlShiftUp
            '关闭筛选模式
            .Worksheet.AutoFilterMode = False
        End With
    End Sub

    您可能注意到代码中出现了一些我们前面的文章中没有提到的新属性和方法,下面来作些解释。

    • AutoFilterMode属性属于Worksheet对象(后续文章中我们将会详细讲解Worksheet对象的属性和方法),用来获取工作表中用户是否使用了自动筛选,或者用来设置工作表中使用自动筛选。如果其值为True,那么表明工作表中当前显示有自动筛选下拉箭头,即使用了自动筛选功能。如果设置其值为False,则取消工作表中的自动筛选,即移除自动筛选的下拉箭头。

    • Delete方法用来删除单元格区域,使用参数Shift来移动单元格已取替被删除的单元格。将该参数值设置为xlShiftUp指明将单元格往上移来替换被删除的单元格。

    • 从代码运行中我们发现,进行自动筛选后,使用Rows.Count统计时仍然会统计隐藏的行。

    代码运行后的结果如下图。

    也可以参照下面的视频来加深理解。


     

    示例5:根据当前单元格内容筛选数据

    如下图所示的工作表,我们要筛选出和当前单元格内容相同的单元格所在的数据行。

    例如,当前单元格为单元格B7,当运行程序后,会筛选出与单元格B7中的内容(即“一班”)相同的单元格所在的数据行,所需效果如下图:

    代码如下:

    Sub testAutoFilter5()
        Dim lngColNum As Long
       
        '计算当前单元格在区域中的列号
        lngColNum = ActiveCell.Column -(ActiveCell.CurrentRegion.Column - 1)
       
        '筛选
        Selection.AutoFilter Field:=lngColNum,Criteria1:=ActiveCell
       
    End Sub

    注意到本代码中使用了一个技巧,即代码:

        lngColNum = ActiveCell.Column -(ActiveCell.CurrentRegion.Column - 1)

    当单元格区域不是以列A为第1列时,可以准确地计算出当前单元格在所处区域中的列号,从而将其运用到接下来的AutoFilter方法的参数Field中。

     

    示例6:根据当前单元格内容实时筛选数据并将数据粘贴到指定位置

    本示例将示例3和示例5结合,实时筛选与当前单元格内容相同的数据并将数据复制到指定位置。

    仍以示例5的工作表为例。当活动单元格处于A2:C9中时,能够实时对数据进行筛选,并将筛选出来的数据复制到以单元格A13开头的单元格区域中。

    要实时筛选数据,必须结合工作表事件代码。即,我们的代码放置在了工作表模块的Worksheet_SelectionChange事件(将在Worksheet对象中介绍其详细用法)中:

    Private SubWorksheet_SelectionChange(ByVal Target As Range)
        Dim lngColNum As Long
        Dim lngLastRow As Long
        Dim rng As Range
     
        '如果开启了筛选模式则关闭该模式
        If ActiveSheet.AutoFilterMode = True Then
            ActiveSheet.AutoFilterMode = False
        End If
       
        '设置当前单元格与单元格区域A2:C9相重合的单元格
        Set rng = Intersect(Target,Range('A2:C9'))
        '找到工作表中数据所在的最后行
        lngLastRow = Range('A' &Rows.Count).End(xlUp).Row
       
        '如果工作表中第9行外还有数据则清除
        If lngLastRow > 9 Then
            Range('A13:C' &lngLastRow).Value = ''
        End If
       
        If Not rng Is Nothing Then
            '计算当前单元格在区域中的列号
            lngColNum = ActiveCell.Column -(ActiveCell.CurrentRegion.Column - 1)
       
            '筛选
            Selection.AutoFilter Field:=lngColNum,Criteria1:=ActiveCell
            '关闭事件响应
            Application.EnableEvents = False
            Range('A2:C9').CopyRange('A13')
        End If
     
        '关闭筛选模式
        ActiveSheet.AutoFilterMode = False
        '开启事件响应
        Application.EnableEvents = True
    End Sub

            注意,上述代码必须放置在数据所在工作表模块中。此时,当活动单元格处于该工作表A2:C3区域中时,会自动筛选与活动单元格内容相同的单元格数据,并复制粘贴到以单元格A3开始的区域中。

    下面是一段简短的演示视频:

     

    在代码中,我们使用了语句:

        Application.EnableEvents = False

    来关闭事件响应。因为我们的代码是靠事件实时响应来达到动态选择复制的效果,如果在复制前不关闭事件响应,那么复制操作将会引发SelectionChange事件,会达不到我们想要的结果,因此,先关闭事件响应,复制完后再开启,以实现我们再次选择单元格时数据的变化。我们会在Application对象中详细讲解关于EnableEvents属性的内容。


    转自:http://www.360doc.com/content/17/0624/23/44723068_666296316.shtml

    展开全文
  • 本示例共展示了包括采用1、countif函数 2、高级筛选 3、排序后筛选 4、数组循环 5、引用collection对象在内的共5种筛选非重复值的方法,并注明了各种方法的优缺点,对于学习者是非常好的资料。资料来源:Excel...

    

    本示例共展示了包括采用1、countif函数 2、高级筛选 3、排序后筛选 4、数组循环 5、引用collection对象

    在内的共5种筛选非重复值的方法,并注明了各种方法的优缺点,对于学习者是非常好的资料。资料来源:Excelhome

    

    方法1:countif函数评价:这是很多网友通常使用的方法。代码由于使用了2次长循环,加上直接在工作表上判断导致速度会非常慢,机器配置不好者慎用!

    

    方法2:高级筛选评价:其实就是将excel自带的高级筛选功能转化为代码,很多朋友认为这是最快的方法,其实不然。代码虽然比较简单,但是必须要有标题行。

    

    方法3:排序后筛选评价:即先对原数列进行排序,然后依次与前一个比较,相同的剔除。总体来说是一个比较巧妙和快速的方法

    

    方法4:数组循环评价:建立2个1唯数组,对其中一个数组的元素进行循环判断,无重复则添加至第2个数组,代码简单且性能出众,缺点是对数据类型比较敏感。尽管如此不妨一试!

    

    方法5:引用collection对象评价:建立一个collection对象,从数组中向其添加非重复元素,最后输出结果。优点是速度快且思路简单。缺点是代码相对要复杂一些,对筛选的数据类型也比较敏感

    展开全文
  • Excel_VBA 筛选

    2011-06-26 01:33:20
    Excel 中 利用 VBA 进行记录筛选 避免耗时的循环对比查找。
  • VBA 筛选结果存入数组

    2020-11-20 20:15:25
    :自动筛选--获取可见行(数据) 数据自动筛选,按第3列的缺勤进行筛选后,将筛选结果复制到F:H. Sub 获取可见数据() Dim LastRow As Long Dim Rng As Range, Rng1 As Range With ActiveSheet .UsedRange ...
  • 期间翻书和上网查询,怎么筛选数据,怎么另存为,怎么自动发邮件,先实现简单的需求,筛选一个数据并另存,之后再用变量去赋值进行循环,花了一天半,终于实现所有需求。后来又增加了新的需求,比如有多个不同的表格...
  • excel vba筛选触发事件

    2015-09-06 08:33:45
    Excel筛选会触发什么事件,我想在工作表筛选时调用宏做一些东西。
  • 利用VBA筛选重复数据

    千次阅读 2019-06-17 14:30:02
    目标:在重复数据中按照一定规则提取、组合。 Sub match() Dim i, j, z, n, flag, A, B, C Set A = Worksheets("Sheet1").UsedRange Set B = Worksheets("Sheet2").UsedRange Set C = Worksheets("Sheet3")....
  • 课件下载:https://share.weiyun.com/6Ckc1ivc下载的时候,记得另存一个文件名称关注公众号,观看视频解析:如果你对于高级筛选还不是很了解,可以参考这个视频链接:高级筛选所有的用法高级筛选真的是很好用的功能,无论是...
  • '获取数据区域最后一行的行数 lastrowA = Sheets("筛选两列重复与差异").Cells(Rows.Count, 1).End(xlUp).Row lastrowB = Sheets("筛选两列重复与差异").Cells(Rows.Count, 2).End(xlUp).Row '将数据区域导入数组 ...
  • 任务要求:按日期筛选数据,将筛选结果另存为一个新的工作簿。任务看起来很简单,手动筛选另存一下不就好了,何必写程序,对吧?如果只是一两个文件,偶尔为之还行,但是生产线这样的Excel数据表有几十个,需要每天...
  • 如图所示,在网络抓取的数据,需要进行清洗,在清洗的过程中,需要用到筛选筛选之后,我需要选中O10单元格,填充公式(但是因为文档每次都不一样,筛选内容的变化,下次可能就不在O10单元格了,所以需要用到宏...
  • 取出很多小区的数据,比如说有7行,根据某列值排序取出前4行的值,然后每列按照这个值平均。VBA通信领域的实际应用。
  • 前景提要(文末提供源码下载)之前有小伙伴表示,自己在日常的工作中,经常需要针对同个工作薄内所有的工作表的数据进行筛选,将满足条件的数据最终全部汇总在一个工作表中,因为工作表的数量很多,一个个的筛选之后再...
  • 当然可能设置到数据域区域和条件区域等变化,如果你有一定的VBA基础,进入代码,编辑一下,修改为自动获取有效区域即可! 以上几个案例算是我们工作中遇到的问题,一步一步思考和完善的过程,当然我知道,有很多...
  • 如今的社会发展是一个快速发展趋势的进度,高科技发达,信息商品流通,大家中间的沟通交流愈来愈紧密,日常生活也愈来愈便捷,大数据就是这个新科技时期的物质。有些人把数据信息形容为蕴含动能的媒矿。...
  • 本次案例根据实际情场景改编,一定程度上体现了PQ的高效数据清洗和核对能力!也算是一个真正实际应用过程中的M函数书写展示!业务场景业务场景:分公司A...同时相对于VBA要简单很多!本文由“壹伴编辑器”提供技术支持
  • 今天我们来聊一下关于删除满足条件的行的问题!...解析说明:1、此方式属于比较小白和传统的方式,筛选,从下拉框中找到所有要删除的,勾上,然后右击->【删除行】,不推荐2、如果你在使用200...
  • 如果我们可以直接操作数据,大家肯定想到可以使用筛选。那么除了筛选,有没有可能用一个公式来查询到结果呢?答案是:可以的!今天我们就来分享一个公式模板。使用这个公式模板,我们可以查询满足一个条件、多个条件...
  • VBA用的也不多,在编辑器中类似/* */或{ }这样的方法行不行。对此耿耿于怀,刚才在网上查找了一下。终于找到答案了,原来自己太大意了。 在工具栏上右键点击-》编辑 会弹出一个工具栏。其中就包括...
  • 求助,如何VBA实现筛选选择录制宏,手工进行一次筛选,停止录制,然后以录制代码为模版修改修改就可以了。Excel 求助一个用VBA实现的筛选功能一般采用倒序的方式:例如,将D列中为“否”的整行删除: Sub test() For...
  • vba autofilter 筛选

    千次阅读 2019-08-26 21:29:13
    国外网站介绍VBA autofilter 很不错 https://trumpexcel.com/vba-autofilter/#Example-Multiple-Criteria-With-Different-Columns 说实话国外的网站对于VBA的资料相对于国内来说内容更丰富更具有实用性。当然是...
  • Excel VBA 多重筛选

    千次阅读 2019-08-13 02:40:29
    Excel VBA 多重筛选 Sub FilterOnValues() 'PURPOSE: Filter on specific values Dim rng As Range Set rng = ActiveSheet.Range("B7:D18") FilterField = WorksheetFunction.Match("Country", rng.Rows(1), 0) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 537
精华内容 214
关键字:

vba筛选