2017-05-24 10 views
1

Ich habe die folgenden Daten für eine Tabelle, ich möchte ein Makro machen, die alle Werte mit #N/A ganz unten gruppiert. Bitte helfen.Gruppieren von Wert mit 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 

verwenden ich den Code unten zunächst Zeilen mit Wert löschen #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 

aber eine

"Compile error: Next without For"

Fehlermeldung erscheint, ist, was ich zu VBA noch neu bin und es gibt einige Dinge, die ich noch nicht ganz verstehe, also weiß ich nicht, ob ich richtig oder falsch codiere.

+2

Willkommen bei Stack Overflow. Zuallererst ist dies kein kostenloser Code-Schreibdienst, daher müssen Sie (den Code) zeigen, was Sie bereits getan haben (Lesen [fragen]). Zweitens "* gruppiere alle Werte mit' # N/A' ganz unten * "ist keine wirklich klare Aussage. Hast du irgendwann gemeint "* ziehe die Linien mit' # N/A' nach unten * "? –

+0

Sub GroupRows() Dim rownum As Long Für rownum = 1 bis 1000 Wenn Zellen (rownum, 3) .Value = "# N/A" Dann Zeilen (rownum) .Delete Weiter rownum Zellen (rownum, 3) .Activate End Sub zuerst Ich wollte alle Zeilen löschen, die den "# N/A" Wert haben, also habe ich den Code oben verwendet, aber es gibt mir immer einen Fehler, also wollte ich sie am gruppieren unten zuerst, dann notieren Sie ein Makro, um sie zu löschen. – Kwezi

+0

Ich hoffe, was ich sage, ist klar. – Kwezi

Antwort

0

So sieht Ihr Code aus, wenn Sie die letzte Zeile anstelle einer festen Zeilennummer verwenden.

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 

Ihr Code wurde ein End if fehlt und Sie sollten immer ein Cells oder Range mit einem Arbeitsblatt wie ws.Cells oder ws.Range qualifizieren.