打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
有时候不执拗于函数,数据透视表反而更简单高效
userphoto

2022.05.17 新疆

关注

来源:Excel应用之家


小伙伴们好,今天要和大家分享一道综合题目。题目是这个样子的:

下面的清单显示了一组关于低保的统计清单。我们要筛选出整户无劳动力或丧失劳动力的,予以发放低保。但若一户里面有一个正常劳动力则排除出去。



有什么方法可以快速提取到符合条件的整户呢?

这个问题我们当然可以使用函数公式,只不过公式写起来就像是在开火车,不是今天我们要介绍的主要内容。若小伙伴们有兴趣,可以试着写写或者私信我都可以。今天主要想向大家介绍两种方法:数据透视表和VBA。


01

数据透视表

在正式开始之前,我们需要在源数据G列上增加一列辅助列,在单元格G2中输入公式“=IF(OR(F2='无劳动力',F2='丧失劳动力'),1,0)”



接下来,开始创建数据透视表。



完成后,单击之区域内的任意单元格,单击【数据透视表工具】-【数据透视表分析】-【字段、项目和集】下面的“计算字段”,调出计算字段对话框,按下图输入。



完成后单击确定,得到下面的结果。



单击列标签右侧的下拉箭头,单击“值筛选”,按下面的输入后,单击确定。



最终的结果如下。



这张图表表明了,有两户人家所有的成员都丧失劳动力或者无劳动力,这个正是我们需要的结果。


02

VBA

VBA的这段代码是群里的一位大神提供的。我现在也把它贴出来,供大家参考和借鉴。



详细的代码如下:

Sub 整户是无劳动力或丧失劳动力()

    Dim arr, s, rng As Range, brr, crr, x As Long

    arr = Range('a2', [f2].End(xlDown))

    For x = 1 To UBound(arr)

        If arr(x, 5) = '户主' Then

            Set rng = Cells(x + 1, 6).Resize(arr(x, 4), 1)

            If arr(x, 4) > 1 Then

                brr = rng

                crr = Application.Transpose(brr)

                s = VBA.Join(crr, ' ')

            Else

                s = arr(x, 6)

            End If

            With CreateObject('vbscript.regexp')

                .Pattern = '无劳动力|丧失劳动力'

                .Global = True

                Set mat = .Execute(s)

                If mat.Count = Val(arr(x, 4)) Then

                    j = Cells(Rows.Count, 8).End(xlUp).Row + 1

                    Cells(x + 1, 1).Resize(arr(x, 4), 6).Copy Cells(j, 8)

                End If

            End With

        End If

        x = x + arr(x, 4) - 1

    Next x

    MsgBox '完成'

End Sub

向大神致敬!


03



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
二维表转换一维表,三种方法一网打尽!
VBA常用小代码304:一个字典实现条件求和和计数功能
excel拆分合并技巧:将总表拆分成工作表的方法
带您走进VBA数组6
详细讲解如何用excel做可视化看板
Excel VBA之函数篇-3.17多列数据统计不头疼,准时下班好轻松
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服