论文部分内容阅读
任务内容:小丽是某家公司的客户部经理,她制作了一份表头分别为“客户名称”、“状态”及12个月份的Excel表格(详细样本可从http://www.newhua.com/cfan/200602/bgtz.rar处下载)。每个客户每月份的购物金额以手工方式填写到相应的月份单元格中。当客户在一定时间内具有购物记录(且金额在10000元以上)的,标示该客户状态为“运营期”,当有新品信息或优惠政策时,将优先通知这些客户;如果某客户连续6个月没有任何购物记录,则将其标示为“释放期”,即准备放弃该客户。请通过Excel公式或者VBA宏来实现。注意:这个挑战的要点是如何判断某行记录中有连续6个(或多于6个)为空的单元格。
可以根据需要改造这个样表。
优秀方案一:甘肃 陈满红
1.判断在某行记录中是否有连续6个为空的单元格。
一共有12个月,就是说要有连续6个为空的单元格的情况最多只有7种,如果连续6个单元格的和为零,那么就得出这6个单元格肯定为空,针对“客户甲”分析出7种情况如下:
(1)1~6月,即表格中的D2至I2的单元格的和为零,用公式表达为:SUM(D2:I2)=0;
(2)2~7月,即表格中的E2至J2的单元格的和为零,用公式表达为:SUM(E2:J2)=0;
(3)3~8月,即表格中的F2至K2的单元格的和为零,用公式表达为:SUM(F2:K2)=0;
(4)4~9月,即表格中的G2至L2的单元格的和为零,用公式表达为:SUM(G2:L2)=0;
(5)5~10月,即表格中的H2至M2的单元格的和为零,用公式表达为:SUM(H2:M2)=0;
(6)6~11月,即表格中的I2至N2的单元格的和为零,用公式表达为:SUM(I2:N2)=0;
(7)7~12月,即表格中的J2至O2的单元格的和为零,用公式表达为:SUM(J2:O2)=0。
只要上述任一种情况出现,那么就可以实现这一步功能。
2.判断在某行记录中是否有购物记录,并且购物金额在10000元以上。
要实现这一功能,只要将1~12月的购物金额合计起来看是否在10000以上就可以实现,具体的公式为:IF(SUM(D2:O2)>10000,"运营期")。
现在,只要在表格中的“C2”单元格中输入以下公式并复制到C3至C11单元格中就可以实现表格的要求:
=IF(OR(SUM(D2:I2)=0,SUM(E2:J2)=0,SUM(F2:K2)=0,SUM(G2:L2)=0,SUM(H2:M2)=0,SUM(I2:N2)=0,SUM(J2:O2)=0),"释放期",IF(SUM(D2:O2)>10000,"运营期"))
3.其他客户通过拖动复制完成。
优秀方案二:广东汕头庄永新
1.本任务的重点在于判断连续6个月内有没有购物记录。没有购物记录,即没有购物金额,所以只要判断所有连续6个月购物金额合计是否有结果 0 出现,就可完成判断。继续分析发现,若直到第8月份才没有购物记录,则不可能有连续6个月没购物记录的可能。所以只要通过7次计算就可完成判断。
判断所有可能如下:
(D2+E2+F2+G2+H2+I2)=0
(E2+F2+G2+H2+I2+J2)=0
(F2+G2+H2+I2+J2+K2)=0
(G2+H2+I2+J2+K2+L2)=0
(H2+I2+J2+K2+L2+M2)=0
(I2+J2+K2+L2+M2+N2)=0
(J2+K2+L2+M2+N2+O2)=0
2.统计1月份至12月份是否出现购物金额>10000。
这个可以用现成的函数 COUNTIF(D2:O2,">10000") 来实现。
3.利用“逻辑函数”把上面分析的算式结合起来就大功告成了。
在C2单元格输入(等于号要输入):
=IF(COUNTIF(D2:O2,">10000"),"运营期",IF(OR((D2+E2+F2+G2+H2+I2)=0,(E2+F2+G2+H2+I2+J2)=0,(F2+G2+H2+I2+J2+K2)=0,(G2+H2+I2+J2+K2+L2)=0,(H2+I2+J2+K2+L2+M2)=0,(I2+J2+K2+L2+M2+N2)=0,(J2+K2+L2+M2+N2+O2)=0),"释放期",""))
4.其他客户通过拖动可复制得到。
优秀方案三 :河北秦皇岛刘蔚蔚赵阳
根据要求,建立一个带有菜单的表格,可以方便使用。使用方法如下:
当工作簿被打开时,将自动建立菜单“统计(L)”。
点击命令“统计(L)→客户状态统计(C)”即可得到统计结果。
点击命令“统计(L)→关于(A)…”可以查看程序信息。
1.难点实现
任务中,主要是要求将有6个连续空格的记录标识出“释放期”的状态,关于这部分是用VBA宏编程来实现的。主要思路:先定义空白单元格计数变量sum,赋予0值。再定义遍历单元格的两个变量i和j,i表示记录个数,j表示12个月。遍历过程用两层循环实现。
让程序检查,从第一个记录的第一个月的单元格开始检查,如果为空。则将sum加1。再循环,如果有连续6个单元格为空,则sum=6,将本记录所对应的状态单元格写入“释放期”并退出循环。如果循环中,某个单元格不为空,那么将sum清零,以免将间隔开的空白单元格累加。这样就实现了有6个连续空白单元格即可累计出来,并标识出状态。
部分关键源代码(“'”开头的行为注释):
'遍历十二个月
For j = 1 To 12
'判断是否具有6个以上(含6个)连续空白单元格
If Trim(Cells(i, j + 3)) = "" Then
'如果此单元格为空白,则空白单元格数量累加
sum = sum + 1
'有6个连续空白单元格即可结束循环
If sum >= 6 Then
Exit For
End If
Else
'如出现非空白单元格,则重新计数,以确保得到连续空白单元格数量
sum = 0
End If
Next
2.相关实现
关于要求中对于一定时间客户消费额满10000元就标志为“运营期”,由于未说明一定时间的具体要求,就假定为全年总和。这样,定义购物金额总和变量sum2,当一个客户全年购物金额达到10000元并且状态是非“释放期”时,将状态标示为“运营期”。
将非“释放期”并且非“运营期”的记录状态标识为空白。
为了使VBA宏正常执行,应点击“工具(T)→宏(M)→安全性(S)…”,将安全级别设置为低。另外,为了方便操作者使用,加入了使用菜单,这样对Excel不是很熟悉的用户也可以操作使用了。
因这三种方法各有千秋,以上读者每人获得奖金100元。
可以根据需要改造这个样表。
优秀方案一:甘肃 陈满红
1.判断在某行记录中是否有连续6个为空的单元格。
一共有12个月,就是说要有连续6个为空的单元格的情况最多只有7种,如果连续6个单元格的和为零,那么就得出这6个单元格肯定为空,针对“客户甲”分析出7种情况如下:
(1)1~6月,即表格中的D2至I2的单元格的和为零,用公式表达为:SUM(D2:I2)=0;
(2)2~7月,即表格中的E2至J2的单元格的和为零,用公式表达为:SUM(E2:J2)=0;
(3)3~8月,即表格中的F2至K2的单元格的和为零,用公式表达为:SUM(F2:K2)=0;
(4)4~9月,即表格中的G2至L2的单元格的和为零,用公式表达为:SUM(G2:L2)=0;
(5)5~10月,即表格中的H2至M2的单元格的和为零,用公式表达为:SUM(H2:M2)=0;
(6)6~11月,即表格中的I2至N2的单元格的和为零,用公式表达为:SUM(I2:N2)=0;
(7)7~12月,即表格中的J2至O2的单元格的和为零,用公式表达为:SUM(J2:O2)=0。
只要上述任一种情况出现,那么就可以实现这一步功能。
2.判断在某行记录中是否有购物记录,并且购物金额在10000元以上。
要实现这一功能,只要将1~12月的购物金额合计起来看是否在10000以上就可以实现,具体的公式为:IF(SUM(D2:O2)>10000,"运营期")。
现在,只要在表格中的“C2”单元格中输入以下公式并复制到C3至C11单元格中就可以实现表格的要求:
=IF(OR(SUM(D2:I2)=0,SUM(E2:J2)=0,SUM(F2:K2)=0,SUM(G2:L2)=0,SUM(H2:M2)=0,SUM(I2:N2)=0,SUM(J2:O2)=0),"释放期",IF(SUM(D2:O2)>10000,"运营期"))
3.其他客户通过拖动复制完成。
优秀方案二:广东汕头庄永新
1.本任务的重点在于判断连续6个月内有没有购物记录。没有购物记录,即没有购物金额,所以只要判断所有连续6个月购物金额合计是否有结果 0 出现,就可完成判断。继续分析发现,若直到第8月份才没有购物记录,则不可能有连续6个月没购物记录的可能。所以只要通过7次计算就可完成判断。
判断所有可能如下:
(D2+E2+F2+G2+H2+I2)=0
(E2+F2+G2+H2+I2+J2)=0
(F2+G2+H2+I2+J2+K2)=0
(G2+H2+I2+J2+K2+L2)=0
(H2+I2+J2+K2+L2+M2)=0
(I2+J2+K2+L2+M2+N2)=0
(J2+K2+L2+M2+N2+O2)=0
2.统计1月份至12月份是否出现购物金额>10000。
这个可以用现成的函数 COUNTIF(D2:O2,">10000") 来实现。
3.利用“逻辑函数”把上面分析的算式结合起来就大功告成了。
在C2单元格输入(等于号要输入):
=IF(COUNTIF(D2:O2,">10000"),"运营期",IF(OR((D2+E2+F2+G2+H2+I2)=0,(E2+F2+G2+H2+I2+J2)=0,(F2+G2+H2+I2+J2+K2)=0,(G2+H2+I2+J2+K2+L2)=0,(H2+I2+J2+K2+L2+M2)=0,(I2+J2+K2+L2+M2+N2)=0,(J2+K2+L2+M2+N2+O2)=0),"释放期",""))
4.其他客户通过拖动可复制得到。
优秀方案三 :河北秦皇岛刘蔚蔚赵阳
根据要求,建立一个带有菜单的表格,可以方便使用。使用方法如下:
当工作簿被打开时,将自动建立菜单“统计(L)”。
点击命令“统计(L)→客户状态统计(C)”即可得到统计结果。
点击命令“统计(L)→关于(A)…”可以查看程序信息。
1.难点实现
任务中,主要是要求将有6个连续空格的记录标识出“释放期”的状态,关于这部分是用VBA宏编程来实现的。主要思路:先定义空白单元格计数变量sum,赋予0值。再定义遍历单元格的两个变量i和j,i表示记录个数,j表示12个月。遍历过程用两层循环实现。
让程序检查,从第一个记录的第一个月的单元格开始检查,如果为空。则将sum加1。再循环,如果有连续6个单元格为空,则sum=6,将本记录所对应的状态单元格写入“释放期”并退出循环。如果循环中,某个单元格不为空,那么将sum清零,以免将间隔开的空白单元格累加。这样就实现了有6个连续空白单元格即可累计出来,并标识出状态。
部分关键源代码(“'”开头的行为注释):
'遍历十二个月
For j = 1 To 12
'判断是否具有6个以上(含6个)连续空白单元格
If Trim(Cells(i, j + 3)) = "" Then
'如果此单元格为空白,则空白单元格数量累加
sum = sum + 1
'有6个连续空白单元格即可结束循环
If sum >= 6 Then
Exit For
End If
Else
'如出现非空白单元格,则重新计数,以确保得到连续空白单元格数量
sum = 0
End If
Next
2.相关实现
关于要求中对于一定时间客户消费额满10000元就标志为“运营期”,由于未说明一定时间的具体要求,就假定为全年总和。这样,定义购物金额总和变量sum2,当一个客户全年购物金额达到10000元并且状态是非“释放期”时,将状态标示为“运营期”。
将非“释放期”并且非“运营期”的记录状态标识为空白。
为了使VBA宏正常执行,应点击“工具(T)→宏(M)→安全性(S)…”,将安全级别设置为低。另外,为了方便操作者使用,加入了使用菜单,这样对Excel不是很熟悉的用户也可以操作使用了。
因这三种方法各有千秋,以上读者每人获得奖金100元。