2012-03-29 17 views
2

Mit etwas Hilfe habe ich zwei Funktionen zusammen, die im Einklang alle meine Daten zuerst von dem "Text" -Format in ein "Zahl" -Format konvertieren werden. Danach wird jede Spalte auf eine feste Anzahl von Zeichen gesetzt.Excel: Auslassen von Zeilen/Spalten aus VBA-Makro

Die zwei Subroutinen, die ich verwende, sind unten aufgeführt, aber ich kann nicht herausfinden, wie bestimmte Zeilen/Spalten für die jeweiligen Funktionen weggelassen werden.

Wenn ich die Funktion psAdd ausführe, möchte ich die ersten drei Zeilen aus dem Bereich weglassen, und für die Funktion FormatFixedNumber möchte ich mehrere Spalten weglassen. Das Problem mit letzterem besteht darin, dass ich mehr als 1000 Spalten mit Daten und eine Schlüsselkopfzeile mit einer 1 oder 0 habe, die angibt, ob die Spalte konvertiert werden soll.

Wie könnte dieser Code geändert werden, um die ersten drei Zeilen in der ersten Untergruppe und mehrere Spalten, die in der zweiten mit einer 0 markiert sind, zu überspringen?

Sub psAdd() 
    Dim x As Range 'Just a blank cell for variable 
    Dim z As Range 'Selection to work with 

    Set z = Cells 
    Set x = Range("A65536").End(xlUp).Offset(1) 
    If x <> "" Then 
     Exit Sub 
    Else 
     x.Copy 
     z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd 
     Application.CutCopyMode = False 'Kill copy mode 
    End If 
    x.ClearContents 'Back to normal 
End Sub 

Sub FormatFixedNumber() 

    Dim i As Long 

    Application.ScreenUpdating = False 
    For i = 1 To lastCol 'replace 10 by the index of the last column of your spreadsheet 
     With Columns(i) 
      .NumberFormat = String(.Cells(2, 1), "0") 'number length is in second row 
     End With 
    Next i 
    Application.ScreenUpdating = True 
End Sub 

Antwort

3

1. Erster Code

Im Moment Sie mit z auf allen Zellen auf einem Blatt arbeiten. Sie können dies auf der UsedRange reduzieren - durch die ersten drei Reihen zu ignorieren

  • die UsedRange zwingen, bevor Sie es zu aktualisieren
  • Tests (redunant Zellen zu vermeiden), wenn die z 3 Reihen
  • überschreitet, wenn so die Größe z durch drei Reihen Offset und Resize mit

    Sub psAdd() 
    Dim x As Range 'Just a blank cell for variable 
    Dim z As Range 'Selection to work with 
    ActiveSheet.UsedRange 
    Set z = ActiveSheet.UsedRange 
    If z.Rows.Count > 3 Then 
        Set z = z.Cells(1).Offset(3, 0).Resize(z.Rows.Count - 3, z.Columns.Count) 
    End If 
    'using Rows is better than hard-coding 65536 (bottom of xl03 - but not xl07-10) 
    Set x = Cells(Rows.Count,"A").End(xlUp).Offset(1) 
    If x <> "" Then 
        Exit Sub 
    Else 
        x.Copy 
        z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd 
        Application.CutCopyMode = False 'Kill copy mode 
    End If 
    x.ClearContents 'Back to normal 
    End Sub 
    

2. Zweiter Code

Führen Sie einen einfachen Test auf jeder Kopfzelle gehen, wenn es nicht gleich 0. tut Unter der Annahme, dass die Header-Zelle in Zeile 1 ist, dann

Sub FormatFixedNumber() 
    Dim i As Long 
    Application.ScreenUpdating = False 
    For i = 1 To lastCol 'replace 10 by the index of the last column of your spreadsheet 
     If Cells(1, i) <> 0 Then 
      With Columns(i) 
       .NumberFormat = String(.Cells(2, 1), "0") 'number length is in second row 
      End With 
     End If 
    Next i 
    Application.ScreenUpdating = True 
End Sub 
+1

Wenn ich das verstehen Frage richtig in Bezug auf den zweiten Stück od Code, die 0 ist in Zeile 2, so würde die Bedingung sein "Wenn Zellen (2, i) <> 0 Then". – assylias

+0

Ich möchte auch das zweite Stück Code die ersten paar Header-Zeilen wie das erste Stück Code weglassen. – toolshed

Verwandte Themen