[EXCEL] per VBA Zellen>0 kopieren

-ian

Stammgast
Hallo Freunde
Excel: per VBA Zellen>0 kopieren
Die Zellen P7 bis V7 enthalten errechnete Werte.
Die Zeilen P8 bis V39 ebenfalls. Es sind jedoch meistens Nullen.
Aus der Matrix (P7:V39), möchte ich per VBA nur jene Werte in
eine andere Liste kopieren, die grösser als Null sind.
Sonst bekomme ich so 15 Zeilen Nullen bis zum nächsten Eitrag.
Besten Dank, Dem, der diese Nuss knackt.
 

pfuschi

Stammgast
Hallo -ian

Wie willst du die Werte >0 wieder ausgeben, einfach alle untereinander oder in einer bestimmten Anordnung?

Folgendes Makro durchläuft deine Matrix (P7:V39) von oben links nach unten rechts und speichert alle Werte >0 in einem Array.

Code:
Sub WerteGroesserNull()

Dim Werte(1000) As Integer
Dim Ausgangsbereich As Range

'Bereich definieren
Set Ausgangsbereich = Range(Cells(7, 16), Cells(39, 22))

'Werte welche grösser null sind in Array schreiben 
i = 1
For Each zelle In Ausgangsbereich
If zelle > 0 Then
Werte(i) = zelle
i = i + 1
End If
Next zelle

End Sub
 

-ian

Stammgast
Hallo Pfuschi
Du scheinst auch ein Nachtmensch zu sein.
Meine 7 Spalten sollten, sofern was drinsteht, in der selben Anordnung in Tabelle2
als Werte erscheinen. Die Zellen mit den Nullen müssen aber leer bleiben.
Gruss: -ian
 

pfuschi

Stammgast
Am nächsten Morgen wünsche ich mir jeweils ich wäre kein Nachtmensch;)

Wie auch immer, habe den Code entsprechend angepasst:

Code:
Sub WerteGroesserNull()

Dim Werte(1000) As Integer
Dim Ausgangsbereich As Range
Dim Zielbereich As Range

'Bereich definieren
Sheets("Tabelle1").Activate
Set Ausgangsbereich = Range(Cells(7, 16), Cells(39, 22))

'Werte in Array schreiben
i = 1
For Each zelle In Ausgangsbereich
Werte(i) = zelle
i = i + 1
Next zelle

'Werte grösser 1 wieder ausgeben
Sheets("Tabelle2").Activate
Set Zielbereich = Range(Cells(7, 16), Cells(39, 22))
i = 1
For Each zelle In Zielbereich
If Werte(i) > 0 Then
zelle.Value = Werte(i)
[COLOR="Red"]Else
zelle.Value = ""[/COLOR]
End If
i = i + 1
Next zelle

End Sub
 
Zuletzt bearbeitet:

Officer

Stammgast
Hallo -ian

Du weisst aber, dass Du auch 0-Werte ausblenden kannst (Extras -> Optionen -> Register 'Ansicht -> Null Werte)?

Oder in der anderen Tabelle einfach eine Formel: =Wenn(P7=0;"";P7)
 

-ian

Stammgast
@Officer
Mit ausgeblendeten Nullwerten steht in der Zelle immer noch Null.
Eine Zelle mit Gänsefüsschen ist auch nicht leer, sondern >0.
Ich brauche aber wirklich leere Zellen.

@Pfuschi
Bei Next zelle meint VBA: Fehler b. Kompilieren: Next ohne For
Lösche ich Next zelle, : For Steuervariable wird bereits verwendet
Ich bin noch am pröbeln.
Gruss: -ian
 

pfuschi

Stammgast
Hast du den Code von meinem letzten Posting 1:1 kopiert? Bei mir kommt da kein Fehler.

Fehlt beim If innerhalb der For-Schleife etwa das End If? Dann wäre dies der Grund für den Fehler...

EDIT: Habe gerade noch den Code oben ergänzt, jetzt werden Einträge in Tabelle 2 gelöscht sofern in Tabelle eins neu eine 0 steht wo vorhin ein positiver Wert stand (Codeergänzung ist im vorherigen Post rot markiert).
 
Zuletzt bearbeitet:

-ian

Stammgast
Bingo!
beim ersten Versuch voller Erfolg.
Ich weiss gar nicht warum Du dich Pfuschi nennst.
Na ja, vileicht hast Du andere, für mich nicht erkennbare Schwächen.
Jedenfalls herzlichen Dank für deine Bemühungen
-ian
 

Thomas Ramel

Stammgast
Grüezi Ian

Du kannst das Ganze durchaus auch ohne Schleife lösen; wenn der Bereich mal grösser ist könnte dies etwas schneller laufen:

Code:
Public Sub Copy_ohne_Null()
   With Worksheets("Tabelle2").Range("P7:V39")
      .Value = Worksheets("Tabelle1").Range("P7:V39").Value
      .Replace what:="0", Replacement:=""
   End With
End Sub
 
Zuletzt bearbeitet:
Oben