Microsoft Excel

Herbers Excel/VBA-Archiv

Array Makro löscht einafch Zahlen | Herbers Excel-Forum


Betrifft: Array Makro löscht einafch Zahlen von: Henning
Geschrieben am: 12.12.2009 12:53:16

Hallo zusammen,

im Anhang befindet sich ein Makro welches mir nach der Ausführung Zahlen löscht
https://www.herber.de/bbs/user/66546.xls

Das Makro summiert die Werte fehlerfrei hoch

Nur fehlen in einigen Spalten die Zahlen nach der Ausführung des Makros und zwar immer dann, wenn in der Spalte F "Budget" in einer Zelle kein Wert steht aber in den Spalten G, H oder I Werte in der gleiche Zeile sind.
Beispiel Spalte F Budget / Zeile 39 und 40 stehen keine Werte in der Zeile stehen aber in der Spalte G Werte.
Diese werden anschließend nicht mehr dargestellt komischerweise stimmt die Summe aber.

Kann mir jemand helfen?
Gruß
Henning

  

Betrifft: Bitte Link zur VORGESCHICHTE angeben ! von: NoNet
Geschrieben am: 12.12.2009 14:21:20

Hallo Henning,

wenn Du schon unbedingt einen neuen Thread eröffnest, anstatt im ursprünglichen Thread zu bleiben, dann gib doch bitte den Link zur "Vorgeschichte" an, damit andere Helfende sich davon ein Bild machen können :

https://www.herber.de/forum/messages/1123352.html

Beim ersten drüberschauen, scheint es, als würden die Zahlen gelöscht werden, bei denen in Budget kein Wert enthalten ist. Weshalb diese Werte gelöscht werden, überblicke ich aber gerade nicht...ich schau mal weiter rein...

Gruß, NoNet


  

Betrifft: AW: Array Makro löscht einafch Zahlen von: Nepumuk
Geschrieben am: 12.12.2009 14:24:56

Hallo,

das Makro löscht keine Werte weil es das lustig findet, sondern du hast dem Makro gesagt es soll die Werte löschen !!!

Ich hab einig Zeit benötigt, diesen verquerten Code zu durchschauen. Du suchst nach dem PSP-Element mit einem zusätzlichen Punkt und Stern hinten dran, wenn in der Budget-Spalte kein Wert steht.

Nehmen wir mal die Zeile 23 als Beispiel. PSP-Element K.07071.02.1.002 mit dem Anhang .*, also K.07071.02.1.002.* gibt es nicht. Also sind alle Werte 0 und dann löschst du mit If Arr(L, 3 + lngS) = 0 Then Arr(L, 3 + lngS) = "" die 0 aus dem Array. Damit verschwinden auch deine Werte.

Gruß
Nepumuk


  

Betrifft: @Nepumuk : Aber warum ALLE Werte ? von: NoNet
Geschrieben am: 12.12.2009 14:31:03

Hallo Nepumuk,

der Code ist eine Cooperation von Ransi (?) und einer Erweiterung von mir (s.o. : Link zur "Vorgeschichte").

die entscheidenden Zeilen sind doch wohl (hier mit Buchstaben anstatt "" belegt) :

            If Val(Arr(L, 3 + lngS)) = 0 Then Arr(L, 3 + lngS) = "a"
            If Val(Arr(L, 4 + lngS)) = 0 Then Arr(L, 4 + lngS) = "b"
            If Val(Arr(L, 5 + lngS)) = 0 Then Arr(L, 5 + lngS) = "c"
            If Val(Arr(L, 6 + lngS)) = 0 Then Arr(L, 6 + lngS) = "d"

Da aber jedes ARRAY-Element einzeln überprüft wird, sollten eigentlich nur die "leeren" Zellen ode r Nullwerte mit "" überschrieben werden und nicht ALLE Zellen, wenn Arr(L, 3 + lngS)=0 ist !!??!?

Das bereitet mir gerade etwas Kopfzerbrechen....

Gruß, NoNet


  

Betrifft: AW: @Nepumuk : Aber warum ALLE Werte ? von: Nepumuk
Geschrieben am: 12.12.2009 14:43:38

Hallo NoNet,

hab ich doch geschrieben. Der Suchbegriff wird nicht gefunden, darum wird in den vier Spalten des Arrays eine 0 eingetragen die dann gelöscht wird. Würde an Stelle von "K.07071.02.1.002.*" nach "K.07071.02.1.002*" gesucht, würde die Werte erhalten bleiben. Allerdings würden dann die Summen bis Zeile 10.014 runtergeschrieben werden, denn wenn kein PSP-Element mehr kommt, dann sucht das Makro nach "*" und findet damit alles.

Ich hab es ja auch als ziemlich verquerten Code bezeichnet. Denn wer macht ein Array schon größer als die Tabelle mit Daten.

Gruß
Nepumuk


  

Betrifft: AW: @Nepumuk : Aber warum ALLE Werte ? von: ransi
Geschrieben am: 12.12.2009 17:33:39

HAllo

In der "Urschleimversion" gab es bis die auf die Zellen in denen summiert werden sollte keine leeren Zellen.
Genau dafür war der Code geschrieben.

Jetzt sind zusätzliche leere Zellen im Listenbereich dazu gekommen. Da muss man natürlich nacharbeiten.
Einfach vor dem Einfügen der Suumewenn() abfragen ob die Zelle leer ist. Wenn ja-->Summewenn() wenn nein -->Nix machen
Dann wird auch nichts mehr überschrieben.

Option Explicit
Sub VariableSpalten()
Dim Arr As Variant, lngLS As Long, lngS As Long
Dim rngBereich As Range, rngPSP As Range
Dim L As Long

lngS = Application.Match("Budget", Rows("14:14"), 0) - 5 'Sucht "Budget" in Zeile 15
lngLS = Cells(14, Columns.Count).End(xlToLeft).Column

Set rngPSP = Range("C15").CurrentRegion.Offset(1).Resize(10000, 1)
Set rngBereich = Range("C15").CurrentRegion.Offset(1).Resize(10000, lngLS - 1)
Arr = rngBereich

For L = 1 To UBound(Arr)
    If Arr(L, 3 + lngS) = "" Then
        If Arr(L, 3 + lngS) = "" Then Arr(L, 3 + lngS) = WorksheetFunction.SumIf(rngPSP, Arr(L, 1) & ".*", _
            Range("E15:E10000").Offset(, lngS))
        If Arr(L, 4 + lngS) = "" Then Arr(L, 4 + lngS) = WorksheetFunction.SumIf(rngPSP, Arr(L, 1) & ".*", _
            Range("F15:F10000").Offset(, lngS))
        If Arr(L, 5 + lngS) = "" Then Arr(L, 5 + lngS) = WorksheetFunction.SumIf(rngPSP, Arr(L, 1) & ".*", _
            Range("G15:G10000").Offset(, lngS))
        If Arr(L, 6 + lngS) = "" Then Arr(L, 6 + lngS) = WorksheetFunction.SumIf(rngPSP, Arr(L, 1) & ".*", _
            Range("H15:H10000").Offset(, lngS))
        If Arr(L, 3 + lngS) = 0 Then Arr(L, 3 + lngS) = ""
        If Arr(L, 4 + lngS) = 0 Then Arr(L, 4 + lngS) = ""
        If Arr(L, 5 + lngS) = 0 Then Arr(L, 5 + lngS) = ""
        If Arr(L, 6 + lngS) = 0 Then Arr(L, 6 + lngS) = ""
    End If
Next
'Range("C15:H10000") = Arr
rngBereich = Arr
End Sub



ransi


  

Betrifft: Mal Licht ans Fahrrad gemacht... von: ransi
Geschrieben am: 12.12.2009 17:53:51

HAllo NoNet

Die "0" in den fraglichen Zellen wird hier gesetzt,
If Arr(L, 3 + lngS) = 0 Then Arr(L, 3 + lngS) = ""

aber nur weil dort vorher mit
If Arr(L, 3 + lngS) = "" Then
Arr(L, 3 + lngS) = WorksheetFunction.SumIf(rngPSP, Arr(L, 1) & ".*", _
Range("E15:E10000").Offset(, lngS))

die "=summewenn()" reingeschrieben wurde. Und die gibt nunmal 0...

Zur Entsthungsgeschichte des Codes:
In der allerersten Version in der der Code lief, gab es in "Budget" keine Leeren Zellen ausser denen in die die Summen rein sollten.
Dann läuft der Code schmerzfrei.

ransi


  

Betrifft: und nun ......????? von: Henning
Geschrieben am: 14.12.2009 08:00:38

Guten Morgen, zusammen,

erst einmal vielen Dank für eure Hilfe.

Aber, gibt es eine Lösung?????

Ich kann euern Erläuterungen nicht folgen :-( sorry.

ransi hat recht, in der ersten Version lief alles wunderbar.

Nur haben sich jetzt die Anforderungen dahingehend geändert, dass es nun in der Spalte auch leere Zellen geben kann.

Schönen Start in die Woche

Beste Grüße
Henning


Beiträge aus den Excel-Beispielen zum Thema "Array Makro löscht einafch Zahlen"