Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3099|回复: 7

[已解决]怎样进行分类统计?

[复制链接]
发表于 2014-10-25 17:13 | 显示全部楼层 |阅读模式
本帖最后由 gwfzh 于 2014-10-27 09:17 编辑

各位老师:
          B9:CK110是一字符串区域,现怎样按照A112:A124的要求,求出各列每行与上面连续1行、2行......n行相同的字符,并统计计数,并将结果填写到相应列的下面(如B112:C124);怎样用代码进行统计?请各位老师帮忙了!谢谢了!!!! 分类统计1025.zip (18.71 KB, 下载次数: 21)
 楼主| 发表于 2014-10-26 09:30 | 显示全部楼层
回复

使用道具 举报

发表于 2014-10-26 10:30 | 显示全部楼层
  1. Sub Macro1()
  2. For k = 112 To 120
  3.     n = n + 1
  4.     For j = 2 To 83 Step 3
  5.         s = 0: p = ""
  6.         For i = Cells(110, j).End(xlUp).Row To 110 - n
  7.             Set rng = Cells(i, j).Resize(k - 110, 1)
  8.             If Application.CountIf(rng, Cells(i, j)) = k - 110 Then
  9.                 s = s + 1: p = p & "," & LCase(rng(1).Address(0, 0)) & "`" & LCase(rng(rng.Count).Address(0, 0))
  10.             End If
  11.         Next
  12.         If s > 0 Then
  13.             Cells(k, j) = s
  14.             Cells(k, j + 1) = Mid(p, 2) & "共" & s & "个"
  15.         End If
  16.     Next
  17. Next
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-26 10:39 | 显示全部楼层
121-124行楼主自己做吧

分类统计1025.zip

18.25 KB, 下载次数: 21

回复

使用道具 举报

 楼主| 发表于 2014-10-26 11:10 | 显示全部楼层
dsmch 发表于 2014-10-26 10:39
121-124行楼主自己做吧

谢谢“dsmch ”老师的帮助!能解惑一下下面的代码意思吗?这样我可以按照老师的意思做了!!谢谢!!!
For i = Cells(110, j).End(xlUp).Row To 110 - n
            Set Rng = Cells(i, j).Resize(k - 110, 1)
            If Application.CountIf(Rng, Cells(i, j)) = k - 110 Then
                s = s + 1: p = p & "," & LCase(Rng(1).Address(0, 0)) & "`" & LCase(Rng(Rng.Count).Address(0, 0))
            End If
        Next
回复

使用道具 举报

 楼主| 发表于 2014-10-26 11:29 | 显示全部楼层
dsmch 发表于 2014-10-26 10:39
121-124行楼主自己做吧

另从V:CE列,除了CE列和BS列有数据统计外,该区域(V:CE列)其它列均没有进行统计?这是怎么回事?也请老师继续帮忙了!
回复

使用道具 举报

发表于 2014-10-26 16:39 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. For k = 112 To 120 '110-120行
  3.     n = n + 1
  4.     For j = 2 To 83 '列
  5.         If Cells(110, j) <> "" Then '如果单元格有值则
  6.             s = 0: p = ""
  7.             For i = Cells(110, j).End(xlUp).Row To 110 - n '开始行到结束行,如两行相同,则结束行为110-1
  8.                 Set rng = Cells(i, j).Resize(k - 110, 1) '如k=112,单元格为上下两行
  9.                 If Application.CountIf(rng, Cells(i, j)) = k - 110 Then '如上下两行含两个cells(i,j)则
  10.                     s = s + 1: p = p & "," & LCase(rng(1).Address(0, 0)) & "`" & LCase(rng(rng.Count).Address(0, 0)) '单元格第一个和最后一个地址
  11.                 End If
  12.             Next
  13.             If s > 0 Then '如果存在相同数则
  14.                 Cells(k, j) = s
  15.                 Cells(k, j + 1) = Mid(p, 2) & "共" & s & "个"
  16.             End If
  17.         End If
  18.     Next
  19. Next
  20. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
gwfzh + 3 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-10-27 10:38 | 显示全部楼层
dsmch 发表于 2014-10-26 10:39
121-124行楼主自己做吧

请问老师:语句“For i = Cells(110, j).End(xlUp).Row To 110 - n”是否是从110 to 110-n 的倒序循环?

点评

正序循环,从开始行到结束行  发表于 2014-10-27 11:26
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 22:29 , Processed in 0.184245 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表