Excel精英培训网

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

[已解决]vba求救:多重循环问题,太难了,

[复制链接]
发表于 2015-2-7 11:27 | 显示全部楼层 |阅读模式
       为什么我外层循环只跑了一次?
Sub qh100()
Dim daq&, ca%, rq, zda&, x&, y&, z%, t&, rng&
daq = Sheet1.Range("i10000").End(xlUp).Row
ca = daq - 100
rq = Sheet1.Range("a" & ca & ":i" & daq)
Sheet2.Range("a3:i103") = rq
zda = Sheet2.Range("c10000").End(xlUp).Row
rng = Sheet2.Range("xfd4").End(xlToLeft).Column
For t = 29 To rng Step 32
For y = 1 To 33
   For x = 4 To zda
    z = (Cells(x, rng - t) + y) Mod 33
      If z = 0 Then
        Cells(x, rng + y) = 33
      Else
        Cells(x, rng + y) = z
      End If
    Next x
Next y
Next t
End Sub
         2年了,因工作较忙,赵老师的视频断断续续只看到21集,依然还是个菜鸟。为什么最外层只循环了一次,请老师们帮忙。
最佳答案
2015-2-7 11:39
按f8一步步走看下rng具体值是什么?
发表于 2015-2-7 11:39 | 显示全部楼层    本楼为最佳答案   
按f8一步步走看下rng具体值是什么?
回复

使用道具 举报

 楼主| 发表于 2015-2-7 11:49 | 显示全部楼层
Zipall 发表于 2015-2-7 11:39
按f8一步步走看下rng具体值是什么?

完整代码是这个:

Sub qh100()
Dim daq&,  ca%, rq, zda&, x&, y&, z%, t&, rng&
daq = Sheet1.Range("i10000").End(xlUp).Row
ca = daq - 100
rq = Sheet1.Range("a" & ca & ":i" & daq)
Sheet2.Range("a3:i103") = rq
zda = Sheet2.Range("c10000").End(xlUp).Row

For x = 3 To zda
   For y = 3 To 9
     Cells(x + 1, y + 7) = Cells(x, y)
    Next
Next

zda = Sheet2.Range("j10000").End(xlUp).Row
For x = 4 To zda
   For y = 11 To 16
    z = (Cells(x, 10) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 6) = 33
      Else
        Cells(x, y + 6) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 12 To 16
    z = (Cells(x, 11) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 11) = 33
      Else
        Cells(x, y + 11) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 13 To 16
    z = (Cells(x, 12) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 15) = 33
      Else
        Cells(x, y + 15) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 14 To 16
    z = (Cells(x, 13) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 18) = 33
      Else
        Cells(x, y + 18) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 15 To 16
    z = (Cells(x, 14) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 20) = 33
      Else
        Cells(x, y + 20) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 16 To 16
    z = (Cells(x, 15) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 21) = 33
      Else
        Cells(x, y + 21) = z
      End If
    Next
Next

For x = 4 To zda
    z = (Cells(x, 10) + Cells(x, 11) + Cells(x, 12) + Cells(x, 13) + Cells(x, 14) + Cells(x, 15)) Mod 33
      If z = 0 Then
        Cells(x, 38) = 33
      Else
        Cells(x, 38) = z
      End If

    z = (Cells(x, 10) + Cells(x, 11) + Cells(x, 12) + Cells(x, 13) + Cells(x, 14) + Cells(x, 15) + Cells(x, 16)) Mod 33
      If z = 0 Then
        Cells(x, 39) = 33
      Else
        Cells(x, 39) = z
      End If
Next

rng = Sheet2.Range("xfd4").End(xlToLeft).Column
For t = 29 To rng Step 32
For y = 1 To 33
   For x = 4 To zda
    z = (Cells(x, rng - t) + y) Mod 33
      If z = 0 Then
        Cells(x, rng + y) = 33
      Else
        Cells(x, rng + y) = z
      End If
    Next x
Next y
Next t

End Sub
回复

使用道具 举报

 楼主| 发表于 2015-2-7 21:37 | 显示全部楼层
Zipall 发表于 2015-2-7 11:39
按f8一步步走看下rng具体值是什么?

谢谢Zipall大师,已按大师指点调试解决,以下为解决后的完整代码:

Sub qh100()
Dim daq&,ca%, rq, zda&, x&, y&, z%, t&, rng&
daq = Sheet1.Range("i10000").End(xlUp).Row
ca = daq - 100
rq = Sheet1.Range("a" & ca & ":i" & daq)
Sheet2.Range("a3:i103") = rq
zda = Sheet2.Range("c10000").End(xlUp).Row

For x = 3 To zda
   For y = 3 To 9
     Cells(x + 1, y + 7) = Cells(x, y)
    Next
Next

zda = Sheet2.Range("j10000").End(xlUp).Row
For x = 4 To zda
   For y = 11 To 16
    z = (Cells(x, 10) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 6) = 33
      Else
        Cells(x, y + 6) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 12 To 16
    z = (Cells(x, 11) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 11) = 33
      Else
        Cells(x, y + 11) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 13 To 16
    z = (Cells(x, 12) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 15) = 33
      Else
        Cells(x, y + 15) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 14 To 16
    z = (Cells(x, 13) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 18) = 33
      Else
        Cells(x, y + 18) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 15 To 16
    z = (Cells(x, 14) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 20) = 33
      Else
        Cells(x, y + 20) = z
      End If
    Next
Next

For x = 4 To zda
   For y = 16 To 16
    z = (Cells(x, 15) + Cells(x, y)) Mod 33
      If z = 0 Then
        Cells(x, y + 21) = 33
      Else
        Cells(x, y + 21) = z
      End If
    Next
Next

For x = 4 To zda
    z = (Cells(x, 10) + Cells(x, 11) + Cells(x, 12) + Cells(x, 13) + Cells(x, 14) + Cells(x, 15)) Mod 33
      If z = 0 Then
        Cells(x, 38) = 33
      Else
        Cells(x, 38) = z
      End If

    z = (Cells(x, 10) + Cells(x, 11) + Cells(x, 12) + Cells(x, 13) + Cells(x, 14) + Cells(x, 15) + Cells(x, 16)) Mod 33
      If z = 0 Then
        Cells(x, 39) = 33
      Else
        Cells(x, 39) = z
      End If
Next

rng = Sheet2.Range("xfd4").End(xlToLeft).Column
For t = 29 To 967 Step 32
For y = 1 To 33
   For x = 4 To zda
    z = (Cells(x, rng - t) + y) Mod 33
      If z = 0 Then
        Cells(x, rng + y) = 33
      Else
        Cells(x, rng + y) = z
      End If
    Next x
Next y
rng = Sheet2.Range("xfd4").End(xlToLeft).Column
Next t

End Sub

      再次向Zipall大师表示感谢,提前祝大师春节愉快!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 12:15 , Processed in 0.319641 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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