Excel精英培训网

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

[已解决]求加个循环

[复制链接]
发表于 2014-3-20 14:10 | 显示全部楼层 |阅读模式
本帖最后由 oplkj 于 2014-3-20 15:54 编辑

想1到10个表都运行一遍,每表的结果从每表的L3开始放
sub DD4()
    On Error Resume Next
    Dim ar(0 To 999), arr, re(1 To 9999, 1 To 1) As String
    Dim i As Integer, j As Integer, k As Integer, x As Integer, Cnt As Integer
    arr = Range("N3:DE5500")
    For i = 1 To UBound(arr, 2)
        For k = 1 To UBound(arr)
            If arr(k, i) <> "" Then ar(Val(arr(k, i))) = ar(Val(arr(k, i))) + 1
        Next k
        For j = 0 To UBound(ar)
            If ar(j) = "" Then
                Cnt = Cnt + 1
                re(Cnt, 1) = Format(j, "000")
            End If
        Next j
        Erase ar
    Next i
    Range("L3").Resize(UBound(re)) = re
End sub
最佳答案
2014-3-20 15:47
oplkj 发表于 2014-3-20 15:41
表2的结果并不是从L3开始放
  1. Sub Mac1()

  2.     On Error Resume Next
  3.     Dim ar(0 To 999), arr, re(1 To 9999, 1 To 1) As String
  4.     Dim i As Integer, j As Integer, k As Integer, x As Integer, Cnt As Integer
  5.     For i = 1 To 2
  6.         With Worksheets(i)
  7.             arr = .Range("N3:Q5500")
  8.             For x = 1 To UBound(arr, 2)
  9.                 For k = 1 To UBound(arr)
  10.                     If arr(k, x) <> "" Then ar(Val(arr(k, x))) = ar(Val(arr(k, x))) + 1
  11.                 Next k
  12.                 For j = 0 To UBound(ar)
  13.                     If ar(j) = "" Then
  14.                         Cnt = Cnt + 1
  15.                         re(Cnt, 1) = Format(j, "000")
  16.                     End If
  17.                 Next j
  18.                 Erase ar
  19.             Next x
  20.             .Range("L3").Resize(UBound(re)) = re
  21.             Erase re
  22.             Cnt = 0
  23.         End With
  24.     Next
  25. End Sub
复制代码
我是觉着输出怪怪的,怎么多了空格,又忘了复位cnt了。

发表于 2014-3-20 14:22 | 显示全部楼层
  1. On Error Resume Next
  2. Dim ar(0 To 999), arr, re(1 To 9999, 1 To 1) As String
  3. Dim i As Integer, j As Integer, k As Integer, x As Integer, Cnt As Integer
  4. For i = 1 To 10
  5.     With Worksheets(i)
  6.         arr = .Range("N3:DE5500")
  7.         For i = 1 To UBound(arr, 2)
  8.             For k = 1 To UBound(arr)
  9.                 If arr(k, i) <> "" Then ar(Val(arr(k, i))) = ar(Val(arr(k, i))) + 1
  10.             Next k
  11.             For j = 0 To UBound(ar)
  12.                 If ar(j) = "" Then
  13.                     Cnt = Cnt + 1
  14.                     re(Cnt, 1) = Format(j, "000")
  15.                 End If
  16.             Next j
  17.             Erase ar
  18.         Next i
  19.         .Range("L3").Resize(UBound(re)) = re
  20.     End With
  21. Next
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-3-20 14:48 | 显示全部楼层
hwc2ycy 发表于 2014-3-20 14:22

有点问题,表1的结果也会放到表2的结果里去,后面没看,
回复

使用道具 举报

发表于 2014-3-20 14:59 | 显示全部楼层
oplkj 发表于 2014-3-20 14:48
有点问题,表1的结果也会放到表2的结果里去,后面没看,

你原来的代码表1的结果也放到表2了,只是加了个工作表限制符,没理由。
你上传测试的数据吧。

回复

使用道具 举报

 楼主| 发表于 2014-3-20 15:15 | 显示全部楼层
hwc2ycy 发表于 2014-3-20 14:59
你原来的代码表1的结果也放到表2了,只是加了个工作表限制符,没理由。
你上传测试的数据吧。

Book1.rar (132.01 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2014-3-20 15:30 | 显示全部楼层
  1.     On Error Resume Next
  2.     Dim ar(0 To 999), arr, re(1 To 9999, 1 To 1) As String
  3.     Dim i As Integer, j As Integer, k As Integer, x As Integer, Cnt As Integer
  4.     For i = 1 To 2
  5.         With Worksheets(i)
  6.             arr = .Range("N3:Q5500")
  7.             For x = 1 To UBound(arr, 2)
  8.                 For k = 1 To UBound(arr)
  9.                     If arr(k, x) <> "" Then ar(Val(arr(k, x))) = ar(Val(arr(k, x))) + 1
  10.                 Next k
  11.                 For j = 0 To UBound(ar)
  12.                     If ar(j) = "" Then
  13.                         Cnt = Cnt + 1
  14.                         re(Cnt, 1) = Format(j, "000")
  15.                     End If
  16.                 Next j
  17.                 Erase ar
  18.             Next x
  19.             .Range("L3").Resize(UBound(re)) = re
  20.             Erase re
  21.         End With
  22.     Next
复制代码
re数组忘了清除了。
回复

使用道具 举报

 楼主| 发表于 2014-3-20 15:41 | 显示全部楼层
hwc2ycy 发表于 2014-3-20 15:30
re数组忘了清除了。

表2的结果并不是从L3开始放
回复

使用道具 举报

发表于 2014-3-20 15:47 | 显示全部楼层    本楼为最佳答案   
oplkj 发表于 2014-3-20 15:41
表2的结果并不是从L3开始放
  1. Sub Mac1()

  2.     On Error Resume Next
  3.     Dim ar(0 To 999), arr, re(1 To 9999, 1 To 1) As String
  4.     Dim i As Integer, j As Integer, k As Integer, x As Integer, Cnt As Integer
  5.     For i = 1 To 2
  6.         With Worksheets(i)
  7.             arr = .Range("N3:Q5500")
  8.             For x = 1 To UBound(arr, 2)
  9.                 For k = 1 To UBound(arr)
  10.                     If arr(k, x) <> "" Then ar(Val(arr(k, x))) = ar(Val(arr(k, x))) + 1
  11.                 Next k
  12.                 For j = 0 To UBound(ar)
  13.                     If ar(j) = "" Then
  14.                         Cnt = Cnt + 1
  15.                         re(Cnt, 1) = Format(j, "000")
  16.                     End If
  17.                 Next j
  18.                 Erase ar
  19.             Next x
  20.             .Range("L3").Resize(UBound(re)) = re
  21.             Erase re
  22.             Cnt = 0
  23.         End With
  24.     Next
  25. End Sub
复制代码
我是觉着输出怪怪的,怎么多了空格,又忘了复位cnt了。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 06:57 , Processed in 0.381517 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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