
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 Cells
in aufteilen Rows
und dann die Bedingung verwenden, um zu entscheiden, ob die Zeile ausgeführt werden soll. Tatsächlich teilen Sie sie Rows
zuerst in auf und führen dann die Ausführung Cells
jeder Zeile aus. Dies ist am einfachsten, wenn Sie wissen, wo Missing Data
angezeigt wird.
Codeschließt Ihre Bedingungen ein und fügt eine äußere Schleife hinzu, die durchlaufen Selection
wird 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
Beachten Sie, dass ich den Code mit der NumberFormat
ausgeschlossenen 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 Data
vorhanden 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.).