使用VBA对值进行分组

使用VBA对值进行分组,vba,excel,Vba,Excel,我在一个表中获得了以下数据,我想制作一个宏,将所有值分组,并在底部正确显示#N/a。请帮忙 A B C D E 1 Line Item Quantity Part Number Description 2 Line 1 Fan Motor 0 0 0 3 Line 2

我在一个表中获得了以下数据,我想制作一个宏,将所有值分组,并在底部正确显示
#N/a
。请帮忙

       A         B                     C        D           E
1     Line      Item               Quantity Part Number Description
2     Line 1    Fan Motor           0           0          0
3     Line 2    Fan                #N/A      #N/A         #N/A
4     Line 3    Fan guard           0           0          0
5     Line 4    Pump                0           0          0
6     Line 5    Access door         0           0          0
7     Line 6    Nozzle grommet      0           0          0
8     Line 7    Nozzle              0           0          0
9     Line 20   SST tube            0           0          0
10    Line 21   Flanges             2      205024M2P     HDGFLG  
11    Line 22   Part 11             #N/A      #N/A        #N/A
12    Line 23   Part 12             #N/A      #N/A        #N/A
16    Line 29   Terminal box         1     31123800P     TERMINAL BOX
14    Line 25   Check Valve         #N/A      #N/A        #N/A
15    Line 26   Buttefly Valve      #N/A      #N/A        #N/A
17    Line 30   Solenoid valve       1     31601700P     SOLENOID VALVE 1 PER8
18    Line 31   Coil                 1     31602000P     COIL FOR SOL. VALVE
我最初使用下面的代码删除值为
#N/A

Sub GroupRows()
    Dim rownum As Long

    For rownum = 1 To 1000
        If Cells(rownum, 3).Text = "#N/A" Then
            Rows(rownum).Delete

    Next rownum
    Cells(rownum, 3).Activate
End Sub
但是

“编译错误:下一步不带For”


弹出错误消息,问题是我还是VBA新手,还有一些事情我还不太了解,所以我不知道我的编码是否正确。

如果您使用最后使用的行而不是固定的最大行号,那么您的代码就是这样的

Sub GroupRows()
    Dim iRow As Long, lastRow As Long

    Dim ws As Worksheet
    Set ws = Worksheets("MySheetName") 'qualify your sheet

    lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 'find last used row

    For iRow = lastRow To 1 Step -1 'run from last used row backwards to row 1
        If ws.Cells(iRow, 3).Text = "#N/A" Or _
           ws.Cells(iRow, 4).Text = "#N/A" Then
            ws.Rows(iRow).Delete
        End If
    Next iRow

    ws.Cells(iRow, 3).Activate
End Sub

您的代码缺少一个
结束if
,您应该始终使用类似
ws.Cells
ws.Range
的工作表来限定
单元格
范围

如果您使用最后使用的行而不是固定的最大行号,那么您的代码就是这样的

Sub GroupRows()
    Dim iRow As Long, lastRow As Long

    Dim ws As Worksheet
    Set ws = Worksheets("MySheetName") 'qualify your sheet

    lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 'find last used row

    For iRow = lastRow To 1 Step -1 'run from last used row backwards to row 1
        If ws.Cells(iRow, 3).Text = "#N/A" Or _
           ws.Cells(iRow, 4).Text = "#N/A" Then
            ws.Rows(iRow).Delete
        End If
    Next iRow

    ws.Cells(iRow, 3).Activate
End Sub

您的代码缺少一个
结束if
,您应该始终使用类似
ws.Cells
ws.Range
的工作表限定
单元格或
范围

欢迎使用堆栈溢出。首先,这不是一个免费的代码编写服务,所以您需要显示(代码)您已经完成(阅读)的内容。其次,“将所有值分组,并在底部加上
#N/A
”并不是一个真正明确的说法。您最终的意思是“将带有
#N/A
的行移到底部”吗?如果单元格(rownum,3)为rownum=1到1000,则子组Rows()将rownum变暗。Value=“#N/A”然后是行(rownum)。删除下一个rownum单元格(rownum,3).Activate End Sub起初我想删除所有具有“#N/A”值的行,所以我使用了上面的代码,但它总是给我一个错误,所以我想先在底部对它们进行分组,然后录制一个宏来删除它们。我希望我说的是清楚的。请不要在注释中发布代码(因为它没有格式化,所以不可读)。而是你的问题添加它。然后描述你的代码实际做了什么(结果是什么)以及你期望它做什么(结果应该是什么)。如果有任何错误,请告诉我们错误是怎么说的,以及错误发生在代码的哪一行。如果删除行,则需要从rownum=1000的底部
开始循环,直到第1步-1
,否则循环运行时行号会更改。欢迎使用堆栈溢出。首先,这不是一个免费的代码编写服务,所以您需要显示(代码)您已经完成(阅读)的内容。其次,“将所有值分组,并在底部加上
#N/A
”并不是一个真正明确的说法。您最终的意思是“将带有
#N/A
的行移到底部”吗?如果单元格(rownum,3)为rownum=1到1000,则子组Rows()将rownum变暗。Value=“#N/A”然后是行(rownum)。删除下一个rownum单元格(rownum,3).Activate End Sub起初我想删除所有具有“#N/A”值的行,所以我使用了上面的代码,但它总是给我一个错误,所以我想先在底部对它们进行分组,然后录制一个宏来删除它们。我希望我说的是清楚的。请不要在注释中发布代码(因为它没有格式化,所以不可读)。而是你的问题添加它。然后描述你的代码实际做了什么(结果是什么)以及你期望它做什么(结果应该是什么)。如果有任何错误,请告诉我们错误是怎么说的,以及错误发生在代码的哪一行。如果删除行,则需要从rownum=1000的底部
开始循环,直到第1步-1
,否则循环运行时,行数会发生变化。