小伙伴们好,今天要和大家分享一道综合题目。题目是这个样子的: 下面的清单显示了一组关于低保的统计清单。我们要筛选出整户无劳动力或丧失劳动力的,予以发放低保。但若一户里面有一个正常劳动力则排除出去。 有什么方法可以快速提取到符合条件的整户呢? 这个问题我们当然可以使用函数公式,只不过公式写起来就像是在开火车,不是今天我们要介绍的主要内容。若小伙伴们有兴趣,可以试着写写或者私信我都可以。今天主要想向大家介绍两种方法:数据透视表和VBA。 数据透视表 在正式开始之前,我们需要在源数据G列上增加一列辅助列,在单元格G2中输入公式“=IF(OR(F2='无劳动力',F2='丧失劳动力'),1,0)” 接下来,开始创建数据透视表。 完成后,单击之区域内的任意单元格,单击【数据透视表工具】-【数据透视表分析】-【字段、项目和集】下面的“计算字段”,调出计算字段对话框,按下图输入。 完成后单击确定,得到下面的结果。 单击列标签右侧的下拉箭头,单击“值筛选”,按下面的输入后,单击确定。 最终的结果如下。 这张图表表明了,有两户人家所有的成员都丧失劳动力或者无劳动力,这个正是我们需要的结果。 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 向大神致敬! |
|