Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
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
Inhaltsverzeichnis

mir fällt kein passender Betreff ein ;-(

mir fällt kein passender Betreff ein ;-(
Chandy
Hallo liebe VBA-Künstler,
ich habe einen VBA Code vor längerer Zeit einmal hier im Forum erhalten. Jetzt erst ist ein Bug aufgefallen. Es werden in einer Spalte Beträge zusammenadiert, das funktioniert immer, wenn es mehr als eine Zeile ist. Steht aber nur ein Wert dort, klappt es nicht mehr. Dann wird der Bereich "Adresse" bis zur letzten Zeile in der Tabelle als markierter Bereich genommen (E12:E65536)
So ist der Code:
Sub SummeFormel()
Dim Zelle As Range, A As Long, Adresse As String
For A = 1 To Application.WorksheetFunction.CountIf(Columns("A:A"), 1)
Set Zelle = Range("A:A").Find(What:="1", After:=Range("A1"), LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
Adresse = Range(Zelle, Zelle.End(xlDown)).Offset(0, 4).Address
Zelle.End(xlDown).Offset(1, 4).Formula = "=SUM(" & Adresse & " )"
Zelle.End(xlDown).Offset(1, 4).NumberFormat = "#,##0.00"
With Zelle.End(xlDown).Offset(1, 4).Font
.Name = "Arial"
.FontStyle = "Fett"
End With
End Sub
Habt Ihr vielleicht eine Idee, wie es auch bei einem Wert funktionieren könnte?
Vielen Dank für eure Hilfe.
Chandy

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
nimm das For A = 1 to ... raus
03.04.2011 09:29:09
Matthias
Hallo
Entferne das mal
For A = 1 To Application.WorksheetFunction.CountIf(Columns("A:A"), 1)
das Next hat ja eh schon gefehlt ;o)
dann sollte es laufen.
Gruß Matthias
alles verstehe ich aber nicht?!
03.04.2011 09:34:32
Tino
Hallo,
wenn ich Deinen Code richtig verstehe, müsste es so gehen.
Allerdings verstehe ich die Schleife nicht und die eingebaute Suche?
Wenn es in Spalte A, 5-mal den Wert 1 gibt, machst Du 5-mal dieselbe Aktion?
Sub SummeFormel()
Dim varErste, lngLetzte As Long, rngBereich As Range
Dim strFormel As String
'Suche nach 1 in Spalte 1 
varErste = Application.Match(1, Columns(1), 0)

If IsNumeric(varErste) Then 'gefunden? 
    lngLetzte = Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zelle suchen 
    If varErste > 1 And lngLetzte >= lngLetzte Then
        Set rngBereich = Range(Cells(varErste, 1), Cells(lngLetzte, 1)).Resize(, 5)
        
        With rngBereich
            strFormel = "=SUM(" & .Columns(.Columns.Count).Address & " )"
            With .Cells(.Rows.Count, .Columns.Count).Offset(1, 0)
                .Formula = strFormel
                .NumberFormat = "#,##0.00"
            End With
        End With
    End If
End If
End Sub
Gruß Tino
Anzeige
Korrektur einer Zeile
03.04.2011 09:37:44
Tino
Hallo,
korrigiere die Zeile noch
If varErste > 1 And lngLetzte >= varErste Then

Gruß Tino
AW: Korrektur einer Zeile
03.04.2011 14:07:04
Chandy
Hallo Tino,
erst einmal vielen Dank für die super kompetente Hilfe.
Du hast ja recht, das Makro war nicht vollständig. Ich verstehe ja auch nicht richtig, was das Makro im einzelnen macht und dachte, der zweite Teil ist nicht so wichtig ;-)
Sub SummeFormel()
Dim Zelle As Range, A As Long, Adresse As String
For A = 1 To Application.WorksheetFunction.CountIf(Columns("A:A"), 1)
If A = 1 Then
Set Zelle = Range("A:A").Find(What:="1", After:=Range("A1"), LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
Adresse = Range(Zelle, Zelle.End(xlDown)).Offset(0, 4).Address
Zelle.End(xlDown).Offset(1, 4).Formula = "=SUM(" & Adresse & " )"
Zelle.End(xlDown).Offset(1, 4).NumberFormat = "#,##0.00"
With Zelle.End(xlDown).Offset(1, 4).Font
.Name = "Arial"
.FontStyle = "Fett"
End With
Else
Set Zelle = Range("A:A").FindNext(After:=Zelle)
Adresse = Range(Zelle, Zelle.End(xlDown)).Offset(0, 4).Address
Zelle.End(xlDown).Offset(1, 4).Formula = "=SUM(" & Adresse & ")"
Zelle.End(xlDown).Offset(1, 4).NumberFormat = "#,##0.00"
With Zelle.End(xlDown).Offset(1, 4).Font
.Name = "Arial"
.FontStyle = "Fett"
End With
End If
Next A
End Sub
Jedenfalls addiert es die Beträge blockweise aus Spalte E. Ich habe aber auch das Gefühl, dass es immer wieder addiert, auch bei den Blöcken, wo schon eine Summe steht ?!?
Na jedenfalls funktioniert es nicht, wenn nur eine ein Betrag in einem Block steht.
Sorry, ich weiss nicht, wo ich Deine Makroschnipsel einsetzen soll.
Kannst Du mir bitte noch einmal helfen ;-x
Ich danke Dir.
Chandy
Anzeige
jetzt ergibt es einen Sinn.
03.04.2011 16:01:22
Tino
Hallo,
versuch mal so.
Sub SummeFormel()
Dim Zelle As Range, A As Long, Adresse As String
Dim MaxRow&
For A = 1 To Application.WorksheetFunction.CountIf(Columns("A:A"), 1)
 
 If A = 1 Then
    Set Zelle = Range("A:A").Find(What:="1", After:=Range("A1"), LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
 Else
  
    Set Zelle = Range("A:A").FindNext(After:=Zelle)
 End If
 
    MaxRow = Zelle.End(xlDown).Row
    If MaxRow = Rows.Count Then MaxRow = Zelle.Row
    
    With Cells(MaxRow, 1)
         Adresse = Range(Zelle, .Cells).Offset(0, 4).Address

         .Offset(1, 4).Formula = "=SUM(" & Adresse & " )"
         .Offset(1, 4).NumberFormat = "#,##0.00"
        
         With .Offset(1, 4).Font
             .Name = "Arial"
             .FontStyle = "Fett"
         End With
    End With
Next A

End Sub
Gruß Tino
Anzeige
:-(
03.04.2011 17:25:10
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige