Excel精英培训网

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

[已解决]论坛找的代码出错,请帮忙纠错并'升级',谢谢(+了补充说明)

[复制链接]
发表于 2013-7-7 15:41 | 显示全部楼层 |阅读模式
本帖最后由 1234vba 于 2013-7-8 08:50 编辑

附件::: help201377.rar (39.46 KB, 下载次数: 9)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2013-7-7 20:37 | 显示全部楼层
本帖最后由 1234vba 于 2013-7-7 20:38 编辑

谢谢  浏览了帖子 的老师们
特别是还下载了附件的 老师们
回复

使用道具 举报

 楼主| 发表于 2013-7-7 23:54 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-7-8 08:01 | 显示全部楼层
早上好.各位老师
回复

使用道具 举报

发表于 2013-7-8 13:56 | 显示全部楼层
本帖最后由 大灰狼1976 于 2013-7-8 13:58 编辑

第一个问题,你的A列数据后面有空格,你看一下。
将部分代码改成这样也行:
    If Left(Trim(arr1(i, 1)), 1) = a(1) Then n = n + 1
    If Mid(Trim(arr1(i, 1)), 2, 1) = a(2) Then n = n + 1
    If Right(Trim(arr1(i, 1)), 1) = a(3) Then n = n + 1
回复

使用道具 举报

发表于 2013-7-8 14:34 | 显示全部楼层
马上好,再确认一下,组选功能你的条件是:
数字全相同,位置不同,顺序不同但你实际给出的例子:
B1=669时,000-999之间的1000个数值里,那么数字全相同,位置不同,顺序不同的分别有669,696,966
结果中669是有矛盾的,因为它们完全相同,没有一点不同,应该放在“中3”内才对。


回复

使用道具 举报

发表于 2013-7-8 14:40 | 显示全部楼层
附件请测试,在原代码基础上稍作修改,仍用一个按钮实现原有+追加功能
A列末尾3个数据(黄色)是测试用数据,我加上的。

原文件help.zip

11.75 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2013-7-8 20:31 | 显示全部楼层
本帖最后由 1234vba 于 2013-7-8 20:33 编辑
大灰狼1976 发表于 2013-7-8 14:40
附件请测试,在原代码基础上稍作修改,仍用一个按钮实现原有+追加功能
A列末尾3个数据(黄色)是测试用数据 ...

嗯  谢谢 老师.

那个 中组选的个数  和 中3 并不冲突了..那个组选仅当统计

先谢谢老师的解答..
然后我再下载附件
回复

使用道具 举报

 楼主| 发表于 2013-7-8 20:38 | 显示全部楼层
老师  中1  是不是  计算错误了??? 应该是  83吧.程序 计算到 85了,,劳驾老师 再次检查一下
回复

使用道具 举报

发表于 2013-7-8 21:11 | 显示全部楼层    本楼为最佳答案   
虽然你没有清楚解释位置不同,顺序不同的意思,但是既然你说不冲突,我就把代码修改一下。
另:83变85是因为我最后增加的测试数据,你看看对不对
  1. Sub tj()
  2. Dim i&, Myr&, arr1, arr, a(1 To 3), n&, j&, m&
  3. Myr = Sheet1.[a65536].End(xlUp).Row
  4. arr1 = Sheet1.Range("a1:a" & Myr)
  5. [e1:e5] = 0
  6. arr = [e1:e5]
  7. a(1) = Left([b1], 1)
  8. a(2) = Mid([b1], 2, 1)
  9. a(3) = Right([b1], 1)
  10. For i = 1 To UBound(arr1)
  11. m = 0
  12. n = 0
  13.     If Left(Trim(arr1(i, 1)), 1) = a(1) Then n = n + 1
  14.     If Mid(Trim(arr1(i, 1)), 2, 1) = a(2) Then n = n + 1
  15.     If Right(Trim(arr1(i, 1)), 1) = a(3) Then n = n + 1
  16.     If InStr(Join(a), Left(Trim(arr1(i, 1)), 1)) Then m = m + 1
  17.     If InStr(Join(a), Mid(Trim(arr1(i, 1)), 2, 1)) Then m = m + 1
  18.     If InStr(Join(a), Right(Trim(arr1(i, 1)), 1)) Then m = m + 1
  19. If n = 0 Then
  20.     arr(4, 1) = arr(4, 1) + 1
  21. ElseIf n = 1 Then
  22.     arr(3, 1) = arr(3, 1) + 1
  23. ElseIf n = 2 Then
  24.     arr(2, 1) = arr(2, 1) + 1
  25. ElseIf n = 3 Then
  26.     arr(1, 1) = arr(1, 1) + 1
  27. End If
  28. If m = 3 And Val(a(1)) + Val(a(2)) + Val(a(3)) = Val(Left(Trim(arr1(i, 1)), 1)) + Val(Mid(Trim(arr1(i, 1)), 2, 1)) + Val(Right(Trim(arr1(i, 1)), 1)) Then arr(5, 1) = arr(5, 1) + 1
  29. Next
  30. [e1].Resize(5, 1) = arr
  31. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 06:07 , Processed in 0.233226 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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