simplicity_NO simplicity_NO
关注数: 1 粉丝数: 5 发帖数: 117 关注贴吧数: 2
请宏高手来帮忙啊! 以前我曾提过这样一个问题,后面已由热心人ZSH_000给出了答案,可我现在想修改一下这个宏:请先看上次的问题吧: 如下: 我要用鼠标选中一列中的若干行,然后要在选中列的右边单元格中得到其中一个(比如3)数字出现的比例,该怎么定义宏呢?如果能在界面中加一个按钮那更好了,请各位一定帮忙解决啊,我用了一个公式,但只能统计一整列的数据比例,b1=(COUNTIF(A1:A1000,3)/COUNT(A1:A100)),我想用宏解决,怎么做啊? 主要是要考虑到对没选中的单元格的的右边单元格没影响,例如: 选中的是左边的A列3,1,0,3 (即B列有数据的几列) ,B列边是出现3的百分比数 1 A B 2 4 3 3 0.50 4 1 0.50 5 0 0.50 6 3 0.50 7 5 8 4 有几个宏和大家分享: 得到当前单元格的地址 msgbox ActiveCell.Address 测试选择状态的单元格的行数 MsgBox Selection.Rows.Count 测试选择状态的单元格的列数 MsgBox Selection.Columns.Count 测试选择状态的单元格的地址 Selection.Address '选定区域的第一单元格的行号. Selection.Cells(1, 1).Row '你一共选定了几行. Selection.Rows.Count '统计表中F列中的数值单元格个数. WorksheetFunction.Count(Range("F:F")) '由上一条演变而来的统计选定单元格的数值单元格个数. WorksheetFunction.Count(Selection.Range(Cells(1, 1), _ Cells.SpecialCells(xlCellTypeLastCell))) '再由上一条演变而来的统计选定单元格的数值中,有多少个单元格的数值为"3" '当然你不一定要统计"3",可你引用单元格值来运行. WorksheetFunction.CountIf(Selection.Range(Cells(1, 1),_ Cells.SpecialCells(xlCellTypeLastCell)), 3) '如果你要选区内每个单元格都得统计,你那可以用 FOR 循环来实现. CROWS = Selection.Rows.Count '得到选区总行数 For I = 1 To CROWS   MsgBox Selection.Cells(I,1) '显示选区内I行1列的值.   MsgBox Selection.Cells(I,2)'显示选区内I行2列的值. Next 现在我想修改一下,用光标的选择方式 如表中数据: A B C 1 0.1110 4 0 2 0.1221 3 0.50 3 0.1222 1 0.50 4 0.1223 0 0.50 5 0.1224 3 0.50 6 0.1225 3 1.00 7 0.1326 3 1.00 8 0.2324 3 A列是经过升序排列后的,我用光标选择A列的A1:A7,执行宏后的结果是:判断A1到A7的区间,(0-4是一个区间,5-9是一个区间,最后一位是否在一个区间,还要看它的尾数的前一位是否相等,如些往前位数推)如果尾数在同一区间,如上:A1是一个区间,A2:A5是一个区间,A6和A7各为一个区间,A8因为没有选择,所以不在运算内,A1和A2:A5,不是一个区间,是因为A1的千分位'1',和A2:A5的千分位'2'不相等,A6与A2:A5不在同一区间,是因为尾数'4'和'5'不在同一区间,A6和A7不在同一区间,是因为百分位'1''2'不相等. 结果是生成C列,A列和B列的数据是提供的参数.C列将是按区间统计B列中出现的'3'在区间内出现的百分比数,同一个区间的百分比是一样的,如A1,它的B1没有3,所以C列结果是0%,A2:A5在同一区间,B1到B5中'3'的个数是2个,总行数是4行,所以百分比是50%,化为小数为0.50,如此类推!当然我选择的数不一定都在A列,有可能在D列,那么将在F列得出结果. 说了这么一大堆,不知各位是否明白了我的意思呢!真是难为大家了!
1 下一页