分享

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

 恶猪王520 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


图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多