加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Excel中如何统计条件格式下带颜色表格的数量?

(2010-08-24 16:41:52)
标签:

杂谈

分类: MSN搬家
Function SumColor(col As Range, sumrange As Range) As Integer
    Dim icell As Range
    Application.Volatile
    For Each icell In sumrange
        If icell.Interior.ColorIndex = col.Interior.ColorIndex Then
            SumColor = Application.Sum(icell) + SumColor
        End If
    Next icell
End Function



=sumcolor(D$1,$A$1:$A$10)
D$1为带指定颜色的格子
$A$1:$A$10为混了颜色的区域

但是,如果你可以使用条件格式显示不同的颜色,那就可以使用条件求和计算满足条件的格子 

 

 

Excel中自定义函数实例剖析

2004-09-06 14:08作者:罗庆丰 原创出处:天极网责任编辑:Shiny

三、自定义函数实例剖析

  下面我们通过两个典型实例,学习自定义函数使用的全过程。这里实际上假设读者朋友都有一定的VBA基础。

  假如你完全没有VBA基础也不要紧,当学习完实例后,若觉得自定义函数在自己以后的工作中可能用到,那么再去补充相应的VBA基础也不迟。

(一) 计算个人调节税的自定义函数

任务

  假设个人调节税的收缴标准是:工资小于等于800元的免征调节税,工资800元以上至1500元的超过部分按5%的税率征收,1500元以上至2000元的超过部分按8%的税率征收,高于2000元的超过部分按20%的税率征收。

分析

  假设Sheet1工作表的A、B、C、D列中分别存放“姓名”、“总工资”、“调节税”、“税后工资”字段数据,如图1所示。

http://www.yesky.com/imagesnew/software/0409/06/yl040906-oa1-1.gif
图 1

  平时使用较多的方法是借助嵌套使用IF函数计算,比如在C2单元格输入公式“=IF(B2<=800,0,IF(B2& lt;=1500,(B2-800)*0.05,IF(B2<=2000,700*0.05+ (B2-1500)*0.08,700*0.05+500*0.08+(B2-2000)*0.2)))”,然后通过填充柄复制公式到C列的其余单元格。

  既然公式能够解决问题,为什么还要使用自定义函数的方法呢?

  正如前面提到的两个方面的原因:一是公式看起来太繁琐,不便于理解和管理;二是公式的处理能力在面对稍微复杂一些的问题时便失去效用,比如假设调节税的税率标准会根据年龄的不同而改变,那么公式可能就无能为力了。

使用自定义函数

  下面就通过此例介绍使用自定义函数的全过程,即使是初学Excel的朋友,也会感觉其操作实际上是非常简单的。

  1. 为了便于测试自定义函数的计算效果,可以先把上面采用公式计算的结果删去。然后选择菜单“工具→宏→Visual Basic编辑器”命令(或按下键盘Alt+F11组合键),打开Visual Basic窗口,我们将在这里自定义函数。

  2. 进入Visual Basic窗口后,选择菜单“插入→模块”命令,于是得到“模块1”,在其中输入如下自定义函数的代码(图2):

  Function TAX(salary)

  Const r1 As Double = 0.05

  Const r2 As Double = 0.08

  Const r3 As Double = 0.2

  Select Case salary

  Case Is <= 800

  TAX = 0

  Case Is <= 1500

  TAX = (salary - 800) * r1

  Case Is <= 2000

  TAX = (1500 - 800) * r1 + (salary - 1500) * r2

  Case Is > 2000

  TAX = (1500 - 800) * r1 + (2000 - 1500) * r2 + (salary - 2000) * r3

  End Select

  End Function

http://www.yesky.com/imagesnew/software/0409/06/yl040906-oa1-2.jpg
图 2

  3. 函数自定义完成后,选择菜单“文件→关闭并返回到Microsoft Excel”命令,返回到Excel工作表窗口,在C2单元格中输入公式“=TAX(B2)”回车后就计算出了第一个员工应付的个人调节税,然后用公式填充柄复制公式到其它后面的单元格,这样就利用自定义函数完成了个人调节税的计算(图3)。

http://www.yesky.com/imagesnew/software/0409/06/yl040906-oa1-3.gif
图 3

  4. 从自定义函数的代码中可以看出,用这种方式,自定义函数的功能非常易于理解,同时如果税率改变,相应地变化r1、r2、r3的值即可。

  通常,自定义的函数只能在当前工作薄使用,如果该函数需要在其它工作薄中使用,则选择菜单“文件→另存为”命令,打开“另存为”对话框,选择保存类型为“Mircosoft Excel加载宏”,然后输入一个文件名,如“TAX”单击“确定”后文件就被保存为加载宏(图4)。然后选择菜单“工具→加载宏”命令,打开“加载宏” 对话框,勾选“可用加载宏”列表框中的“Tax”复选框即可,单击“确定”按钮后(图5),就可以在本机上的所有工作薄中使用该自定义函数了。

http://www.yesky.com/imagesnew/software/0409/06/yl040906-oa1-4.jpg
图 4

http://www.yesky.com/imagesnew/software/0409/06/yl040906-oa1-5.jpg
图 5

  如果想要在其它机器上使用该自定义函数,只要把上面的加载宏文件复制到其它电脑上加载宏的默认保存位置即可。

说明:Windows XP系统下加载宏文件的默认保存位置为:C:\Documents and Settings\zunyue(用户帐户)\Application Data\Microsoft\AddIns文件夹。

 

 

 

EXCEL中单元格的颜色统计

其实,这个问题要用到一个特别的函数:get.cell

解决这个问题的思路是,你首先得让系统知道你每种颜色的代码是多少。得到这个代码就用到这个函数。设你要统计的单元格在A列,B列为空列,操作如下:

1,点插入,名称,定义,弹出的窗口第一行名称名内写入一个自定义的名称名字,可以是中文也可以是英文,比如XX,最下边一行的引用位置一行内填入:

=get.cell(63.A1) 确定。

2,在B1中输入=XX,光标指向B1单元格右下角的小黑点,光标变成小黑实心十字时,双击左键。完成填充。

这样操作以后,在B列中会出现各个单元格中底色的代码。

3,用countif()函数对你要统计的单元进行统计,如:

=countif($B$1:$B$100,"5")

这个统计公式意思是统计B1至B100中颜色代码是5的单元格有多少个。

用辅助列可以做到
假设列A为原数据列,选择列B为第一辅助列
1.在插入-名称-定义里定义一个名称,X=GET.CELL(24,SHEET1!A1)
2.在B1中输入=X
这样你就会看到列B中有对应的列A颜色返回的数值,假定黑色格子的颜色数值为1
再利用一辅助列C,在列C输入公式=IF(OR(B:B=1,B:B=57,B:B=0),A:A+3,A:A),即可得所需变更后的全部数值列
最后便是利用选择性拷贝的方法,将C列的值复制到A列,就可以完成全部操作了

注意:
1、GET.CELL(24,SHEET1!A1)  其中24代表字体颜色,换成38代表背景颜色

用EXCEL来根据单元格的颜色来计数和求和

https://l98nyg.blu.livefilestore.com/y1mFP2nNdziVNJX1GC_3fO8bFWGYxLqYJPERIRpWRgxlCr8dSe2Ef9dU-Lv3HwXQWoARZTSAkrek7XGOWqxWBeGsJPcxdRuRChODS-hMD5YB0_0KzIyWSzG8t_3fdqzWEWpk61mIEm-XqQq2fIr5xy7dg/clip_image001_thumb.gif?download&psid=1 | | https://l98nyg.blu.livefilestore.com/y1m0kd9l2li5zD5bsnuYUhjvOoqxpA6n7ZY1BWp553Cp4e3CF24LVsZ5WcZ2XzFqY89Hmff-vfOH3ho9KL1cYj8QTM4AOyLLBATbO0mGKdLM-d0GLc3WEgz_0JI2YBfxtDeH1zklX77YA5nEZ_HO2Regg/clip_image003[3]%207D89BF36.gif?download&psid=1

STEP 1 :打开你的excel;
STEP 2 :菜单栏:工具-宏-Visual Basic 编辑器;
STEP 3 :Visual Basic 编辑器菜单栏: 插入-模块
STEP 4 :贴入下面这段函数
Function Countcolor(col As Range, countrange As Range)
Dim icell As Range
Application.Volatile
For Each icell In countrange
     If icell.Interior.ColorIndex = col.Interior.ColorIndex Then
         Countcolor = Countcolor + 1
     End If
Next icell
End Function
Function Sumcolor(col As Range, sumrange As Range)
  Dim icell As Range
  Application.Volatile
  For Each icell In sumrange
      If icell.Interior.ColorIndex = col.Interior.ColorIndex Then
         Sumcolor = Application.Sum(icell) + Sumcolor
      End If
  Next icell
End Function
STEP 5 :保存并关闭Visual Basic 编辑器
STEP 6 :使用函数 countcolor(所要统计的颜色所在单元格,统计的区域)
                         sumcolor(所要统计的颜色所在单元格,统计的区域)
///若是字体颜色
Function Sumfontcolor(col As Range, sumrange As Range)
  Dim icell As Range
  Application.Volatile
  For Each icell In sumrange
      If icell.Font.ColorIndex = col.Font.ColorIndex Then
         Sumfontcolor = Application.Sum(icell) + Sumfontcolor
      End If
  Next icell
End Function

1、 建立Excel对象
  set     objExcelApp        CreateObject("Excel.Application")      
  objExcelApp.DisplayAlerts        false                                                 不显示警告
  objExcelApp.Application.Visible        false                                                 不显示界面
  2、 新建Excel文件
  objExcelApp.WorkBooks.add      
  set     objExcelBook        objExcelApp.ActiveWorkBook      
  set     objExcelSheets        objExcelBook.Worksheets      
  set     objExcelSheet        objExcelBook.Sheets(1)      
  3、 读取已有Excel文件
  strAddr        Server.MapPath(".")      
  objExcelApp.WorkBooks.Open(strAddr        "\Templet\Table.xls")      
  set     objExcelBook        objExcelApp.ActiveWorkBook      
  set     objExcelSheets        objExcelBook.Worksheets      
  set     objExcelSheet        objExcelBook.Sheets(1)      
  4、 另存Excel文件
  objExcelBook.SaveAs     strAddr        "\Temp\Table.xls"      
  5、 保存Excel文件
  objExcelBook.Save                                                 (笔者测试时保存成功,页面报错。)
  6、 退出Excel操作
  objExcelApp.Quit                         一定要退出
  set     objExcelApp        Nothing      
三、 操作Excel生成数据表
  1、 在一个范围内插入数据
  objExcelSheet.Range("B3:k3").Value        Array("67",     "87",     "5",     "9",     "7",     "45",     "45",     "54",     "54",     "10")      
  2、 在一个单元格内插入数据
  objExcelSheet.Cells(3,1).Value="Internet     Explorer"      
  3、 选中一个范围
  4、 单元格左边画粗线条
  5、 单元格右边画粗线条
  6、 单元格上边画粗线条
  7、 单元格下边画粗线条
  8、 单元格设定背景色
  9、 合并单元格
  10、 插入行
  11、 插入列
四、 操作Excel生成Chart图
  1、 创建Chart图
  objExcelApp.Charts.Add      
  2、 设定Chart图种类
  objExcelApp.ActiveChart.ChartType        97      
注:二维折线图,4;二维饼图,5;二维柱形图,51      
  3、 设定Chart图标题
  objExcelApp.ActiveChart.HasTitle        True      
  objExcelApp.ActiveChart.ChartTitle.Text        "A     test     Chart"      
  4、 通过表格数据设定图形
  objExcelApp.ActiveChart.SetSourceData     objExcelSheet.Range("A1:k5"),1      
  5、 直接设定图形数据(推荐)
  objExcelApp.ActiveChart.SeriesCollection.NewSeries      
  objExcelApp.ActiveChart.SeriesCollection(1).Name        "=""333"""      
  objExcelApp.ActiveChart.SeriesCollection(1).Values        "={1,4,5,6,2}"      
  6、 绑定Chart图
  objExcelApp.ActiveChart.Location         
  7、 显示数据表
  objExcelApp.ActiveChart.HasDataTable        True      
  8、 显示图例
  objExcelApp.ActiveChart.DataTable.ShowLegendKey        True

我假设你的工作表已经有很多设置好背景颜色的单元格.如你上面讲的红.黄.蓝
  "视图","工具栏","窗体"打上勾.在"窗体"工具条上点击"按钮"在工作表上拉出一个按钮.在弹出来的"指定宏"对话框中点"新建"这时会出现VBA窗口
在自动生出来的
  Sub   按钮1_单击()     '这是自动生出来的
  Dim    As   Range  
  For   Each    In   Sheets("sheet1").UsedRange   '在使用过的单元格内搜索
  If   a.Interior.ColorIndex     Then  
    1000:   a.Font.ColorIndex                   '如果条件为真,在这个单元格内输入数值.并改变字体颜色
  ElseIf   a.Interior.ColorIndex     Then  
    500:   a.Font.ColorIndex    
  ElseIf   a.Interior.ColorIndex     Then  
    100:   a.Font.ColorIndex    
  End   If  
  Next   
  End   Sub     '这也是自动生出来的.  
请注意:复制此段代码时,不要将第一句Sub   按钮1_单击()和最后一句End   Sub   这两句复制.选中中间的代码将它粘贴进去就可以了.  
如果想判断颜色后,不想再要这些背景颜色的话,将它修改一下就可以了.  
如下面:  
  Sub   按钮1_单击()  
  Dim    As   Range  
  For   Each    In   Sheets("sheet1").UsedRange  
  If   a.Interior.ColorIndex     Then  
  a.Interior.ColorIndex    0:     1000:   a.Font.ColorIndex              
  ElseIf   a.Interior.ColorIndex     Then  
  a.Interior.ColorIndex    0:     500:   a.Font.ColorIndex    
  ElseIf   a.Interior.ColorIndex     Then  
  a.Interior.ColorIndex    0:     100:   a.Font.ColorIndex    
  End   If  
  Next   
  End   Sub  
这样只要你点击一下工作表上你拉出来的这个按钮.就会完成你的要求
我这个代码还是粗糙了一点.如果哪位高手有更好的方法也可以贴出来.权当是一次VBA编写练习.  

如果不想要单元格的字体颜色设置.可将这些类似的删除.":   a.Font.ColorIndex     "

如果是单元格内一开始设置的字体颜色.但单元格内并末输入数据.而想用设定的字体颜色来改变为数值的话,用下面这段代码.  
用上面的方法拉出一个按钮.  
  Sub   按钮2_单击()  
  Dim    As   Range  
  For   Each    In   Sheets("sheet1").UsedRange   '在使用过的单元格内搜索
  If   a.Font.ColorIndex     Then  
    1000  
  ElseIf   a.Font.ColorIndex     Then  
    500  
  ElseIf   a.Font.ColorIndex     Then  
    100  
  End   If  
  Next   
  End   Sub  
复制粘贴代码的方法和上面相同.  

还有a=100和a    1000以及a    500  
这个数值随你自己调整.比如调整为     5000等

应Yiqun_Zhao(蓝帆·雨轩   Mail:yiqun_zhao.NITTOOS@gg.nitto.co.jp)的要求.我写了一个自定义的函数.以下为代码
操作方法如下:按ALT+F11打开VBE.点击"插入","模块".在右边的界面将下面的代码粘贴过去即可
  Private   Function   hhh(aa   As   Range)       '自定义函数hhh()  
  Application.Volatile  
    aa.Font.ColorIndex  
  If      Then  
  hhh    1000  
  ElseIf      Then  
  hhh    500  
  ElseIf      Then  
  hhh    100  
  Else  
  hhh    50  
  End   If  
  End   Function  
示例如下:  
                                                               
   (单元格的字体颜色为红)               =hhh(a1)回车得到了100  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有