VBA - 在if中减少for循环

时间:2017-03-02 10:52:33

标签: excel vba if-statement for-loop

我正在运行一个宏来清理工作簿中的空行,并且由于For循环的运行方式,它会错过连续的空行,例如:

  • 检查第14行
  • 删除第14行,因为空白
  • 第15行向上移动成为 new 第14行
  • For循环移至第15行,错过新第14行

我的(可能是有缺陷的)解决方案是在删除将for循环递减一步的行之后添加一个步骤,以便它将连续捕获。

我试过了:

For i = 1 To 2000
    If IsEmpty(Cells(i, 6)) = True Then
        Rows(i).EntireRow.Delete
        i = i - 1
    End If
Next i

这似乎无限循环。我也尝试了i - = 1, - i等,但是由于预期的表达而失败了。 i = --i atleast运行但似乎无法删除空白行。

有什么建议吗?如果遗漏了明显的东西,请提前道歉。

2 个答案:

答案 0 :(得分:5)

删除时你应该倒退一步,所以从2000开始向下工作以确保没有跳过任何行。

For i = 2000 To 1 step -1
    If IsEmpty(Cells(i, 6)) = True Then
        Rows(i).EntireRow.Delete
    End If
Next i

答案 1 :(得分:1)

尝试反向运行它,所以从2000开始(使用你的例子,或者我认为是Worksheet.Rows.Count)然后再回到1.这样你就不需要在删除循环索引时摆弄它一排。

所以:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.kamran.ebloodbank">

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity
                android:name=".SplashScreen"
                android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".MainActivity"
                android:label="E Blood Bank"
                android:screenOrientation="portrait"/>
            <activity
                android:name=".LogIn"
                android:label="@string/loghead"
                android:screenOrientation="portrait"/>
            <activity
                android:name=".RegisterForm"
                android:label="Registration Form"
                android:screenOrientation="portrait"/>
            <activity
                android:name=".FindDonor"
                android:label="Find Donor"
                android:screenOrientation="portrait"/>
            <activity
                android:name=".FindBloodBank"
                android:label="Find Blood Bank"
                android:screenOrientation="portrait"/>
            <activity android:name=".GuestActivity"
                android:screenOrientation="portrait"/>
            <activity android:name=".AfterLoginMain"
                android:screenOrientation="portrait"/>
            <activity android:name=".ViewProfile"
                android:label="View Profile"
                android:screenOrientation="portrait"></activity>
        </application>

    </manifest>

你当前代码循环的原因是第2000行是空白的,所以它删除它并将你的循环计数设置回1999,所以它再次尝试第2000行,这是空白等等。