Excel精英培训网

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

[已解决]请问这段代码如何改??????

[复制链接]
发表于 2016-7-9 11:41 | 显示全部楼层 |阅读模式
本帖最后由 hanjia 于 2016-7-9 16:48 编辑

多加一段后就循环了
能不能合到一起?

Sub Macro1()
Dim arr, brr, i&, j%, k%
arr = Range("a1:f" & Range("a65536").End(xlUp).Row)
ReDim brr(1 To UBound(arr), 1 To 1)
w = Array(1, 2, 5, 8)
For i = 2 To UBound(arr)
    s = 0
    For j = 1 To UBound(arr, 2)
        For k = 0 To UBound(w)
            If arr(i, j) = w(k) Then s = s + 1
        Next
        If s >= 3 Then brr(i, 1) = 0: Exit For
    Next
    If s < 3 Then brr(i, 1) = brr(i - 1, 1) + 1
Next
Range("h1").Resize(UBound(brr)) = brr
arr = Range("a1:f" & Range("a65536").End(xlUp).Row)
ReDim brr(1 To UBound(arr), 1 To 1)
w = Array(1, 3, 6, 7)
For i = 2 To UBound(arr)
    s = 0
    For j = 1 To UBound(arr, 2)
        For k = 0 To UBound(w)
            If arr(i, j) = w(k) Then s = s + 1
        Next
        If s >= 3 Then brr(i, 1) = 0: Exit For
    Next
    If s < 3 Then brr(i, 1) = brr(i - 1, 1) + 1
Next
Range("i1").Resize(UBound(brr)) = brr
End Sub

工作表1.zip (14.31 KB, 下载次数: 5)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-7-9 13:25 | 显示全部楼层
不知道是不是这个意思:
  1. Sub Macro11()
  2. Dim arr, brr, i&, j%, k%, crr, k1%
  3. arr = Range("a1:f" & Range("a65536").End(xlUp).Row)
  4. ReDim brr(1 To UBound(arr), 1 To 1)
  5. ReDim crr(1 To UBound(arr), 1 To 1)
  6. w = Array(1, 2, 6, 9)
  7. w1 = Array(1, 5, 6, 8)
  8. For i = 2 To UBound(arr)
  9.     s = 0
  10.     s1 = 0
  11.     For j = 1 To UBound(arr, 2)
  12.         For k = 0 To UBound(w)
  13.             If arr(i, j) = w(k) Then s = s + 1
  14.         Next
  15.         If s >= 3 Then brr(i, 1) = 0
  16.         For k1 = 0 To UBound(w1)
  17.             If arr(i, j) = w1(k1) Then s1 = s1 + 1
  18.         Next
  19.         If s1 >= 3 Then crr(i, 1) = 0
  20.     Next
  21.     If s < 3 Then brr(i, 1) = brr(i - 1, 1) + 1
  22.     If s1 < 3 Then crr(i, 1) = crr(i - 1, 1) + 1
  23. Next
  24. Range("j1").Resize(UBound(brr)) = brr
  25. Range("k1").Resize(UBound(brr)) = crr
  26. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-7-9 15:50 | 显示全部楼层
老司机带带我 发表于 2016-7-9 13:25
不知道是不是这个意思:

先谢谢再说
还能再精简点吗? 因为不只这2组
刚才试了往里再增加   弄了半天都加不上
现在是前面2组  我要往里增加应该改那里?
(1, 2, 6, 9)
(1, 5, 6, 8)
(3, 5, 6, 10)


回复

使用道具 举报

发表于 2016-7-9 16:14 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1x()
  2. Dim arr, brr, i&, j%, k%
  3. arr = Range("a1:f" & Range("a65536").End(xlUp).Row)
  4. ReDim brr(1 To UBound(arr), 1 To 1)
  5. '下面一行代码可以一直新增,注意数组放在Array()中
  6. w = Array(Array(1, 2, 6, 9), Array(1, 5, 6, 8), Array(3, 5, 6, 10))
  7. For x = 0 To UBound(w)
  8.     For i = 2 To UBound(arr)
  9.         s = 0
  10.         For j = 1 To UBound(arr, 2)
  11.             For k = 0 To UBound(w(x))
  12.                 If arr(i, j) = w(x)(k) Then s = s + 1
  13.             Next
  14.             If s >= 3 Then brr(i, 1) = 0: Exit For
  15.         Next
  16.         If s < 3 Then brr(i, 1) = brr(i - 1, 1) + 1
  17.     Next
  18.     Range("j1").Offset(0, x).Resize(UBound(brr)) = brr
  19. Next
  20. End Sub
复制代码

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-7-9 16:40 | 显示全部楼层
老司机带带我 发表于 2016-7-9 16:14

我在后面多加一组  提示  编译错误:   缺少: 语句结束
w = Array(Array(1, 2, 6, 9), Array(1, 5, 6, 8), Array(3, 5, 6, 10))
w = Array(Array(1, 2, 6, 9), Array(1, 5, 6, 8), Array(3, 5, 6, 10)), Array(4, 7, 8, 11))
回复

使用道具 举报

 楼主| 发表于 2016-7-9 16:48 | 显示全部楼层
老司机带带我 发表于 2016-7-9 16:14

明白了   要在 )) 前面加才可以   
谢谢     这简单多了   谢谢
回复

使用道具 举报

 楼主| 发表于 2016-7-9 23:16 | 显示全部楼层
老司机带带我 发表于 2016-7-9 16:14

w = Array(Array(1, 2, 6, 9), Array(1, 5, 6, 8), Array(3, 5, 6, 10)), Array(4, 7, 8, 11))
加多了提示 法语错误
我重新发了个求助 有空帮忙再看一下  谢谢
http://www.excelpx.com/thread-419789-1-1.html

工作表2.zip (12.79 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 04:27 , Processed in 0.696527 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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