来源:Excel应用之家
小伙伴们好,今天要和大家分享一道综合题目。题目是这个样子的:
下面的清单显示了一组关于低保的统计清单。我们要筛选出整户无劳动力或丧失劳动力的,予以发放低保。但若一户里面有一个正常劳动力则排除出去。
有什么方法可以快速提取到符合条件的整户呢?
这个问题我们当然可以使用函数公式,只不过公式写起来就像是在开火车,不是今天我们要介绍的主要内容。若小伙伴们有兴趣,可以试着写写或者私信我都可以。今天主要想向大家介绍两种方法:数据透视表和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
向大神致敬!
联系客服