楼主: Jykaner
2167 0

[问答] vba怎么减少循环次数 [推广有奖]

  • 1关注
  • 0粉丝

本科生

0%

还不是VIP/贵宾

-

威望
0
论坛币
20 个
通用积分
2.6527
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
885 点
帖子
40
精华
0
在线时间
60 小时
注册时间
2018-3-2
最后登录
2018-9-10

楼主
Jykaner 发表于 2018-3-21 21:27:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
自己写了一个vba的循环程序,计算量非常大,试着改写了一下,出现了错误,请大家帮忙看看,谢谢啦!
以下是vba程序内容,其中for i 的值我想改为 for i = 2+(n-2)*20 to (n-1)*25,也就是对于每个n不需要循环那么多次,但是这么一改,if第一行就错误了,我自己尝试了一下不知道怎么改,希望大家给点意见。


Sub dummyvariables()

Dim i, j, n, a, b, c

  For j = 2 To 6519  '表rank的列数
    Application.StatusBar = j
    For n = 2 To 446  '表dummy variable的行数

          a = 0  '表rank单元格值为1的个数
          b = 0  '表rank单元格值为-1的个数
          c = 0  '表rank单元格值为0的个数

      For i = 2 To 9653  '表rank的行数


        If Not IsEmpty(Worksheets("rank").Cells(i, j).Value) And Month(Worksheets("rank").Cells(i, 1)) = Month(Worksheets("winners").Cells(n, 1)) And Year(Worksheets("rank").Cells(i, 1)) = Year(Worksheets("winners").Cells(n, 1)) Then
           '先判断rank的单元格不为空,然后判断rank单元格的年月和winners相同
          If Worksheets("rank").Cells(i, j).Value = 1 Then
            a = a + 1
          ElseIf Worksheets("rank").Cells(i, j).Value = -1 Then
            b = b + 1
          ElseIf Worksheets("rank").Cells(i, j).Value = 0 Then
            c = c + 1
          End If
        End If
      Next i

            If a > 0 And b = 0 Then
            Worksheets("winners").Cells(n, j).Value = 1
            ElseIf a = 0 And b > 0 Then
            Worksheets("losers").Cells(n, j).Value = 1
            ElseIf a > 0 And b > 0 Then
            Worksheets("both").Cells(n, j).Value = 1
            ElseIf a = 0 And b = 0 And c > 0 Then
            Worksheets("never").Cells(n, j).Value = 1
            End If
    Next n

  Next j


End Sub


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:VBA Application worksheets worksheet Variables

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 05:52