使用VBA对值进行分组

时间:2017-05-24 07:03:19

标签: excel vba excel-vba

我在桌面上得到了以下数据,我想创建一个宏,它将所有值组合在一起, 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

的行
public void NewMethod(string s1, string s2, string s3, string s4)
{
    string[] nonEmpty = new string[] { s1, s2, s3, s4 }.Where(s => !string.IsNullOrEmpty(s)).ToArray();
    if (nonEmpty.Length == 4)
    {
        oldmethod(s1, s2, s3, s4);
    }
    else if (nonEmpty.Length == 3)
    {
        oldmethod(s1, s2, s3);
    }
    else
    {
        // unexpected, fix or throw
    }
}

但是

  

"编译错误:下一个没有For"

弹出错误信息,事情是我对VBA还是新手,还有一些我还不太了解的事情,所以我不知道我的编码是否合适。

1 个答案:

答案 0 :(得分:0)

如果您使用上次使用的行而不是固定的最大行数,那么这就是您的代码的样子。

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

您的代码缺少End if,您应始终使用CellsRange等工作表来限定ws.Cellsws.Range