以前我曾提过这样一个问题,后面已由热心人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列得出结果.
说了这么一大堆,不知各位是否明白了我的意思呢!真是难为大家了!