设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4518|回复: 2
打印 上一主题 下一主题

“割须弃袍”——浅谈自定义函数统计格式单元格

[复制链接]
跳转到指定楼层
1#
发表于 2012-7-26 21:21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       记得多年前读《三国演义》,读到第五十八回《马孟起兴兵雪恨 曹阿瞒割须弃袍》:
    ……马超、庞德、马岱引百余骑,直入中军来捉曹操。操在乱军中,只听得西凉军大叫:“穿红袍的是曹操!”操就马上急脱下红袍。又听得大叫:“长髯者是曹操!”操惊慌,掣所佩刀断其髯。军中有人将曹操割髯之事,告知马超,超遂令人叫拿:“短髯者是曹操!”操闻知,即扯旗角包颈而逃。后人有诗曰:“潼关战败望风逃,孟德怆惶脱锦袍。剑割髭髯应丧胆,马超声价盖天高。”……
    书中对马超的勇猛和曹操的狼狈的传神描写,令人方法身处其境,不禁击节称好。西凉兵真是观察入微,从穿红袍到短胡子,把一代枭雄戏弄于股掌之间。事实上曹操不必那么在意的,毕竟短胡子的估计不止他一个,拿令旗包着下巴逃走,未免也太狼狈了吧?

    说到这里,不禁想起今天一个网友给我发过来的一个求助文件,他要求按固定格式来统计符合条件的单元格数。
    在Excel2010里实现并不难,按颜色排序后选择单元格即可在状态栏显示了(至于有没有公式我并不清楚,这个英文版软件我学得并不多)。现在问题来了:如果用户只有2003版本呢?
    答案是:写自定义函数。当然,利用宏表函数也不是不可以,但可能需要很多辅助列。

    好了,跟我一起来做吧,按下Alt+F11进入VBE界面,插入一个模块,然后输入以下代码:
  1. Function getColor(TargetRange As Range, TargetCell As Range) As Integer
  2. '定义背景色、前景色和统计变量
  3. Dim intBgColor As Integer
  4. Dim intForeColor As Integer
  5. Dim i As Integer

  6. intBgColor = TargetCell.Interior.ColorIndex
  7. intForeColor = TargetCell.Font.ColorIndex
  8. getColor = 0
  9. For Each cel In TargetRange
  10. '判断目标单元格是否输入内容(仅有空格不予计算)。
  11.     If Len(Trim(cel)) > 0 Then
  12. '目标单元格前景色背景色均与条件单元格一一对应才开始计算
  13.         If cel.Interior.ColorIndex = intBgColor And cel.Font.ColorIndex = intForeColor Then
  14.             i = i + 1
  15.         End If
  16.     End If
  17. Next
  18. getColor = i
  19. End Function
复制代码
函数调用(如图所示):
喜欢就下载来玩玩吧:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2012-7-27 10:43:16 | 只看该作者
roych开始 玩excel了?
3#
 楼主| 发表于 2012-7-28 02:58:51 | 只看该作者
admin 发表于 2012-7-27 10:43
roych开始 玩excel了?

其实Excel是最早玩的,从2008年底开始上传的动态图表开始,到后来的Excel ADO查询,大概也有好几个示例了。
学Access则是因为工作中Excel不够用的缘故,最后误打误撞地混迹于Access版块时,小妖姐姐曾回复“怎么心里有股酸溜溜的感觉呢”,颇有受宠若惊之感,所以时不时会顺便照看一下,顺便提高下Excel版块人气。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 07:49 , Processed in 0.105848 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表