网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月09日漏签0天
excel吧 关注:281,064贴子:1,547,049
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 3 下一页 尾页
  • 40回复贴,共3页
  • ,跳到 页  
<<返回excel吧
>0< 加载中...

请宏高手来帮忙啊!

  • 只看楼主
  • 收藏

  • 回复
  • simplicity_NO
  • 平E近人
    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列得出结果. 
 说了这么一大堆,不知各位是否明白了我的意思呢!真是难为大家了!  



  • simplicity_NO
  • 平E近人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上面的A.B.C应该与右边的列对齐,提交时变了位置,请注意一


北京勤哲软件技术
勤哲Excel服务器2025学习和下载。会Excel,懂管理,就能做excel制作工作报表及手机app.软博会金奖产品,适合于各行各业的管理人员使用。
2025-05-09 23:17广告
立即查看
2025-05-09 23:17:19
广告
  • 61.48.18.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有人帮我吗?是不是不些难啊,怎么办呢?


  • 61.48.18.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
高手们,来看看吧


  • bengdeng
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看了半天都晕了,能不能清楚地再说明一下问题呀,比如用途什么的。
如果看问题是什么都让人看上去都感觉累,请问你还有没有可能去给人空回答呢?

说了这么一大堆,不知各位是否明白了我的意思呢!真是难为大家了! 

重点说明需要什么,要达到什么,或者自己应该有一个清晰的解决问题的思路!


  • 61.48.18.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
作用是选择一个操作的列中连续的行(如:A1:A8),自动选择一个区间(区间规则在上面已定义),统计这个区间中 右边一列的'3'所占的百分比,('3'的个数除以这个区间的总行数),得到的百分比填充对的C


  • 61.48.18.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
作用是选择一个操作的列中连续的行(如:A1:A8),VBA程序将自动选择一个区间(区间规则在上面已定义),统计这个区间中 右边一列的'3'所占的百分比,('3'的个数除以这个区间的总行数),得到的百分比填充对的C


  • 61.48.18.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
区间的定义可能前说得不够详细,在此补充一下,如上面的(0-4是一个区间,5-9是一个区间,最后一位是否在一个区间,还要看它的尾数的前一位是否相等,如些往前位数推)
0-4是一个区间,5-9是一个区间是指最后一位的数值,(如A列中 :
`````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 

)即第一步要去判断A列的最后一位是否在一个区间内(A1的最后一位是0,A2最后一位是1,A3的最后一位是2,A4的最后一位是3,A5的最后一位是4),都在0到4,可以选择这一个区间,然后再决断倒数第二位(千分位)是否在一个区间,(在这个区间内,A1的千分位是1,其它的千分位全部是2,所以将A1单行作为一个区间进行统计百分比操作,从A2:A5再判断十分位和百分位是否在一个区间,经过比较,A2;A5可作一个区间计算,在这个区间中,B列3的个数有2个,总行数是4个,结果是(2除以4等于0.50)将结果写入C列.就是这样了


武汉益旺达广告业
Office是经典的办公软件包含了Excel、Word、PPT等多种组件,支持数据同步云办公,也是电脑办公必备的软件之一,点击下载
2025-05-09 23:17广告
立即查看
2025-05-09 23:11:19
广告
  • zsh_000
  • E见钟情
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
想再问明确一点,你是否只选择一列,不会选两列?只需在选择的列的下一列处显示结果就没错了吧?(我怕覆盖了你的数据.)


  • zsh_000
  • E见钟情
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
还有要提的,你的分享最好放到吧里的分享的贴里,例如我设的

http://post.baidu.com/f?kz=42996307

,你放这里有需要再查找的朋友会且很难再查找到,因为他们忘了放在那里贴里了. (*^-^*)


  • 61.48.18.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你说的对,其实我的数据只有两列,结果放在第三列,不会将原有数据覆盖,我只选择A列的连续行,B列是要统计的3所在的列,结果放在C列,即结果放在相对所选择的列+2,即我选择A列,结果将放在C列,如果我选择D列,结果将放在F列.
共享的内容我知道了,拜托


  • simplicity_NO
  • 平E近人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
对了,我选择的数据有保留到小数位4位的,也有小数位2位的情况,不过同一操作中,小数位是相同的,就是要么是4位,要么就是两位.宏要考虑到这种情况的存在.


  • zsh_000
  • E见钟情
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
保留多少位你可以自己在单元格格式里设定,这个不用宏处理的.


  • zsh_000
  • E见钟情
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
真不容易做了两个小时.代码如下.

Sub test()

Set USE = Range(Selection.Cells(1, 1), Selection.Cells _
(Selection.Rows.Count, 3)) '扩大选区后赋给单元格变量USE

CO = USE.Rows.Count '行统计

SCO = 0 '记录3的总数

Set TE = Selection.Range(Cells(1, 1), Cells(1, 3))

For I = 1 To CO + 1 '循环至总行数
 
 Y = NE(USE.Cells(I, 1))
 YY = NE(TE.Cells(TE.Rows.Count, 1))
 
 If Y = YY Then
 Set TE = Application.Union(TE, Range(USE.Cells(I, 1), USE.Cells(I, 3)))
 Else
 TEMP = SCO / TE.Rows.Count
 For X = 1 To TE.Rows.Count
 TE.Cells(X, 3) = TEMP
 Next
 Set TE = Range(USE.Cells(I, 1), USE.Cells(I, 3))
 SCO = 0
 End If
 If USE.Cells(I, 2) = 3 Then SCO = SCO + 1
 
Next

End Sub

Public Function NE(IT)
 If Len(IT) < 5 Then S = IT & String(5 - Len(IT), "0") Else S = IT
 SM = Right(S, 2) '提取后两位的值
 SN = Left(SM, 1)
 SF = IIf(Right(SM, 1) <= 4, 0, 1)
 NE = SN & SF
End Function


台州市加通网络科技
excel表格是一款办公软件套装,可以实现办公软件常用的文字表格,演示等多种功能。内存占用低,运行速度快,体积小巧。
2025-05-09 23:17广告
立即查看
2025-05-09 23:05:19
广告
  • simplicity_NO
  • 平E近人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
真是辛苦了,这么晚还没睡觉吗?
我测试一下,真心的感谢啊!


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 40回复贴,共3页
  • ,跳到 页  
<<返回excel吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示