Office中国论坛/Access中国论坛

标题: “割须弃袍”——浅谈自定义函数统计格式单元格 [打印本页]

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

    说到这里,不禁想起今天一个网友给我发过来的一个求助文件,他要求按固定格式来统计符合条件的单元格数。
    在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
复制代码
函数调用(如图所示):[attach]49772[/attach]
喜欢就下载来玩玩吧:
[attach]49773[/attach]
作者: admin    时间: 2012-7-27 10:43
roych开始 玩excel了?
作者: roych    时间: 2012-7-28 02:58
admin 发表于 2012-7-27 10:43
roych开始 玩excel了?

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




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3