Excel VBA: Eine ganze Zeile bei der Verarbeitung überspringen, wenn die Bedingung erfüllt ist

Excel VBA: Eine ganze Zeile bei der Verarbeitung überspringen, wenn die Bedingung erfüllt ist

Hallo zusammen, ich bin relativ neu in der VBA-Codierung in Excel (aktuelle Version 2010) und versuche, ein einfaches Programm zu verbessern, das kleine Werte in den von meiner Organisation veröffentlichten Tabellen unterdrückt. Das Format meiner Daten ist wie folgt.

In der Spalte ganz links (normalerweise C) habe ich die Zeilenbeschriftungen (z. B. Krankenhaus, Heim, Sonstiges, Fehlende Daten). In der folgenden Spalte haben wir die Anzahl der Datensätze in dieser Kategorie. In der letzten Spalte haben wir einen Prozentwert für diese Zeile.

Bei der Ergebnisberichterstattung unterdrücken wir immer die Zellengrößen von 1 bis 5. Wir unterdrücken jedoch nicht die Anzahl der Datensätze in der Zeile „Fehlende Daten“.

Ich habe mit Hilfe anderer Benutzer in diesem Forum das folgende Makro generiert, ein Programm, das alle n-Werte in unseren Tabellen durch „<6“ ersetzt. Der Grund für die Formatanweisung ist, dass ich Prozentsätze nicht unterdrücken möchte und sie immer als Zahlen mit einem einzigen Dezimalpunkt formatiert sind.

Sub SuppressN()
Dim rng As Range, cell As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
For Each cell In rng.Cells
   If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And 
   cell.Value <= 5 Then cell.Value = "<6"
Next
End Sub

Ich möchte Excel mitteilen, dass es den Code nicht ausführen soll, wenn es die Zeichenfolge "Fehlende Daten" findet.alle Werte in dieser Zeile.

Ich bin für jede Hilfe dankbar, die Sie mir geben können. Danke!

Antwort1

Wenn Sie eine Zeile überspringen möchten, können Sie sie Cellsin aufteilen Rowsund dann die Bedingung verwenden, um zu entscheiden, ob die Zeile ausgeführt werden soll. Tatsächlich teilen Sie sie Rowszuerst in auf und führen dann die Ausführung Cellsjeder Zeile aus. Dies ist am einfachsten, wenn Sie wissen, wo Missing Dataangezeigt wird.

Codeschließt Ihre Bedingungen ein und fügt eine äußere Schleife hinzu, die durchlaufen Selectionwird Rows.

Sub SuppressN()

    Dim rng As Range
    Set rng = Selection

    If rng Is Nothing Then Exit Sub

    'go through by rows first
    Dim rng_row As Range
    For Each rng_row In rng_data.Rows
        If rng_row.Cells(1, 1) <> "Missing Data" Then
            'if good keep going on all the cells
            Dim cell As Range
            For Each cell In rng_row.Cells
                If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And cell.Value <= 5 Then
                    cell.Value = "<6"
                End If
            Next
        End If
    Next
End Sub

Bild zeigt vorher und nachher

Vor nach

Beachten Sie, dass ich den Code mit der NumberFormatausgeschlossenen Bedingung ausgeführt habe, da ich diese nicht emulieren wollte. Ich habe sie für den endgültigen Code wieder eingefügt, damit Sie nichts ändern müssen.

Dieser Code erfordert, dass Sie über eine zuverlässige Methode verfügen, um zu prüfen, ob irgendwo in der Zeile Missing Datavorhanden ist. Ich habe gerade die erste Zelle der Spalte geprüft (das klingt nach dem, was Sie haben), aber Sie können diese Prüfung auch auf verschiedene andere Arten durchführen (z. B. mithilfe von Find, durch Durchlaufen und Prüfen von Werten usw.).

verwandte Informationen