Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
316to320
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
316to320
316to320
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler im Makro?

Fehler im Makro?
02.10.2003 15:45:14
ChrisO
Hi,
wollte aus einer Tabelle die doppelten Daten zusammenfassen und die Werte in den Spalten rechts daneben addieren. Habe nach Recherche im Archiv auch ein Makro gefunden, das ich auf meine Bedürfnisse angepasst habe:


Sub doppelsummieren()
Dim m%, erstezeile%, letztezeile As Long, n%, z%
'Erste Zeile mit einem Wert
erstezeile = 11
'Letzte Zeile mit einem Wert
letztezeile = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
ReDim v(65000, 9)
m = 4
For z = erstezeile To letztezeile
For n = 4 To m
If v(n, 0) = Worksheets(1).Cells(z, 1) Then GoTo nächste
Next
m = m + 1
v(m - 1, 0) = Worksheets(1).Cells(z, 1)
v(m - 1, 1) = Worksheets(1).Cells(z, 2)
nächste:
Next
For z = erstezeile To letztezeile
For i = 4 To m
If v(i, 0) = Worksheets(1).Cells(z, 1).Value Then
v(i, 2) = v(i, 2) + Worksheets(1).Cells(z, 3).Value
v(i, 3) = v(i, 3) + Worksheets(1).Cells(z, 5).Value
v(i, 4) = v(i, 4) + Worksheets(1).Cells(z, 6).Value
v(i, 5) = v(i, 5) + Worksheets(1).Cells(z, 8).Value
v(i, 7) = v(i, 7) + Worksheets(1).Cells(z, 10).Value
End If
Next
Next
For i = 0 To m
For sp = 0 To 9
Worksheets(2).Cells(i + 1, sp + 1) = v(i, sp)
Next
Next
End Sub


Es addiert bei doppelten Werten jeweils die Spalten C, E, F, H und J.
Leider wird alles was auf dem Ziel-Blatt steht (also Überschriften und Formeln) gelöscht bzw. mit leeren Zellen überschrieben. Bin blutiger VBA-Anfänger. Vielleicht kann mir also jemand helfen den Fehler zu finden?
Gruß
Chris
Zur Demonstration hier eine abgespeckte Version der Datei

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Makro?
03.10.2003 16:05:16
Björn B.
Hallo Chris,,

in dem Code

For i = 0 To m
For sp = 0 To 9
Worksheets(2).Cells(i + 1, sp + 1) = v(i, sp)
Next
Next

liegt der Fehler.

Da du die zweite Schleife von 0 bis 9 durchlaufen lässt, überschreibt Du Deine Formeln in der Zieltabelle.

Gruß
Björn
AW: Fehler im Makro?
04.10.2003 06:37:41
GraFri
Hallo

Hat zwar etwas gedauert - bei weiteren Fragen melden.



'Vorgangsweise:
'
'Schritt 1
'alle Artikel der Tabelle1 werden nacheinander durchlaufen und die einzelne
'Artikel-Namen in Tabelle2 eingetragen
'
'Schritt 2
'Jeder Artikel der Tabelle2 wird mit Tabelle1 verglichen, die Werte addiert,
'eingetragen und die Formel eingefügt

Sub Doppelte_Summieren()
    Dim nTab1           As Long
    Dim nTab2           As Long
    Dim ersteZeileTab1  As Integer
    Dim ersteZeileTab2  As Integer
    
    Dim anzTab2         As Long
    Dim TMP             As String
    
    Dim letzteZeile     As Long
    
    Dim C               As Double
    Dim E               As Double
    Dim F               As Double
    Dim H               As Double
    Dim J               As Double
    
    
'Erste Zeile mit einem Artikel in Tabelle1
    ersteZeileTab1 = 11
'Erste Zeile mit gesammelten (addierten)Artikel in Tabelle2
    ersteZeileTab2 = 5
'Letzte Zeile mit einem Wert der Spalte A
    letzteZeile = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
'wenn nur eine Zeile, dann Abbruch
    If ersteZeile = letzteZeile Then Exit Sub

'Schritt 1
'--------------------------------------------------------------------
anzTab2 = 0
'Alle Artikel der Tabelle1 nacheinander durchlaufen
For nTab1 = ersteZeileTab1 To letzteZeile
'Überprüfen, ob Artikel der Tabelle1 schon in Liste der Tabelle2 vorkommt
    TMP = Sheets(1).Cells(nTab1, 1)
    For nTab2 = ersteZeileTab2 To (ersteZeileTab2 + anzTab2 - 1)
        
        If TMP = Sheets(2).Cells(nTab2, 1) Then   'genaue Übereinstimmuung
            GoTo Nächster_Artikel
        End If
    
        If Right(TMP, 1) = "A" Then                 ' A als letzter Buchstabe
        If Left(TMP, Len(TMP) - 2) = Sheets(2).Cells(nTab2, 1) Then
            GoTo Nächster_Artikel
        End If
        End If
    
    Next nTab2

'Artikelbezeichnung in Tabelle2 eintragen
    Sheets(2).Cells(ersteZeileTab2 + anzTab2, 1) = Sheets(1).Cells(nTab1, 1)
'Anzahl der gesammelten Artikel um 1 erhöhen
    anzTab2 = anzTab2 + 1
Nächster_Artikel:
Next nTab1
    

'Schritt 2
'--------------------------------------------------------------------

For nTab2 = ersteZeileTab2 To (ersteZeileTab2 + anzTab2 - 1)
    For nTab1 = ersteZeileTab1 To letzteZeile
        If InStr(Sheets(1).Cells(nTab1, 1), Sheets(2).Cells(nTab2, 1)) Then
            C = C + Sheets(1).Cells(nTab1, 3)
            E = E + Sheets(1).Cells(nTab1, 5)
            F = F + Sheets(1).Cells(nTab1, 6)
            H = H + Sheets(1).Cells(nTab1, 8)
            J = J + Sheets(1).Cells(nTab1, 10)
        End If
    Next nTab1
    
    With Sheets(2)
'Werte in Tabelle2 schreiben
        .Cells(nTab2, 3) = C
        .Cells(nTab2, 4) = E
        .Cells(nTab2, 5) = F
        .Cells(nTab2, 6) = H
        .Cells(nTab2, 8) = J
'Formel eintragen
        .Cells(nTab2, 7).Formula = "=$F$" & nTab2 & "/24"
        .Cells(nTab2, 9).Formula = "=$H$" & nTab2 & "/24"
    End With
Next nTab2

End Sub


     Code eingefügt mit Syntaxhighlighter 2.4


mfg, GraFri
Anzeige
AW: Fehler im Makro?
04.10.2003 15:49:10
GraFri
Hallo

Leider kleiner Fehler

statt
If ersteZeile = letzteZeile Then Exit Sub

If ersteZeileTab1 = letzteZeile Then Exit Sub
verwenden

mfg, GraFri
Danke!!!
06.10.2003 09:28:45
ChrisO
Hi,
vielen Dank euch beiden. Das Makro funktioniert super!
Gruß
Chris
PS: Bedanke mich erst jetzt, da langes Wochenende = frei!!!
kleinen Fehler entdeckt...
06.10.2003 10:53:08
ChrisO
Hattest noch vergessen die Variablen C, E... auf null zu setzen. Aber ich kann ja auch was schaffen ;-)
Nochmals Danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige