EXCEL编程

来源:百度知道 编辑:UC知道 时间:2024/05/25 14:48:55
号码相同的项目同时包含B,C且不包含A的记录有多少?

"实现:号码相同的项目同时包含B,C且不包含A的记录有多少?
同时包含A,B,C的记录有多少?"
用函数或编程实现,实际应用中数据较多。

号码 类别
PA1 A
PA1 B
PA1 C
PA2 B
PA2 C
PA3 B
PA3 C
PA4 A
PA4 B
PA3 B
PA3 C
PA5 A
PA5 B
PA5 C
此问题的答案应该是这样的:满足ABC的记录有2条,满足BC不包含A的有2条。

经过多次试验、调试和修改,终于想出了两种解决方案,
方案一:使用系统自带的函数,方法如下:
(假设号码在A列,类别在B列,C列以后无数据)
1、在C列增加一辅助列,C2处输入公式=A2&B2,目的是将两列合成一个字符串
2、使用高级筛选,方式:将筛选结果复制到其他位置,列表区域:号码所在列,条件区域:空,复制到:D1,勾选:选择不重复的记录。目的是将号码列复制到D列,有重复的则只保留一项。
3、使用高级筛选将类别列复制到E列,方法同上。目的是将类别列复制到E列,有重复的则只保留一项。
4、在F2输入如下公式(实际使用时要作相应的修改):
=IF(COUNTIF(C:C,D2&"A")>0,IF(COUNTIF(C:C,D2&"B")>0,IF(COUNTIF(C:C,D2&"C")>0,"全有","仅无C"),IF(COUNTIF(C:C,D2&"C")>0,"仅无B","仅有A")),IF(COUNTIF(C:C,D2&"B")>0,IF(COUNTIF(C:C,D2&"C")>0,"仅无A","仅有B"),IF(COUNTIF(C:C,D2&"C")>0,"仅有C","全无")))
5、将公式向下填充,然后你就可以将得出的结果进行统计了,如想知道仅无A的,则可在别处输入=countif(F:F,"仅无A")
得出的结果就是满足BC不含A的条数。

方案二:使用自定义函数:
1、按CTRL+F11,打开VBA编辑器,插入一个模块,在模块窗口中输入如下代码:
Option Explicit

Function 所含类(号码 As String, 类别区域 As Range, 辅助列 As Range) As String
Dim Str1()