Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

Salden aufteilen in Blätter

Salden aufteilen in Blätter
28.03.2017 13:16:35
Helmut
Hallo,
ich möchte die Salden so wie in der Datei dargestellt aufteilen.
Plus-Beträge in Blatt2,Negative Beträge in Blatt3, Nullsalden in Blatt 4
Das Blatt Rohdaten hat über 1000 Datensätze, wie wäre das zu lösen ?
Ich würde es gerne selbst versuchen, benötige aber bitte Hilfestellung
im Ablauf der Aufbereitung mit VBA...
https://www.herber.de/bbs/user/112481.xlsx
MfG
Helmut

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Salden aufteilen in Blätter
28.03.2017 15:44:48
UweD
Hallo Helmut
hier mal ein Makro.
in ein Normales Modul
Sub Sortieren()
    Dim LR As Long, ZZ, Anz As Integer
    Application.ScreenUpdating = False
    With Sheets("Rohdaten")
        If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten 
        
        LR = .Cells(.Rows.Count, "H").End(xlUp).Row 'letzte Zeile der Spalte 
        .Range("J1") = "TEMP"
        .Range("J2").FormulaArray = _
                "=IF(RC[-2]=""S A L D O"",INDEX(R[1]C[-2]:R" & LR & "C[-2],MATCH(TRUE,IF(R[1]C[-2]:R" _
                & LR & "C[-2]<>"""",TRUE),0)),"""")"
        .Range("J2").Copy .Range("J3:J" & LR)
        With .Range("J2:J" & LR)
            .Value = .Value
            .NumberFormat = "0.00"
        End With
        .Columns("J:J").EntireColumn.AutoFit

        
        
        'Positive 
        Set ZZ = Sheets("Positive")
        ZZ.Cells.ClearContents
        .Range("J1:J" & LR).AutoFilter Field:=1, Criteria1:=">0"
        Anz = WorksheetFunction.CountIf(.Range("J2:J" & LR), ">0")
        If Anz > 0 Then
            .Rows("2:" & LR).Copy ZZ.Rows(1)
            ZZ.Columns("D:D").Replace What:="Datum", Replacement:="Valuta", LookAt:=xlWhole
            ZZ.Cells.Font.Bold = False
        End If
        .AutoFilterMode = False

        'Negative 
        Set ZZ = Sheets("Negative")
        ZZ.Cells.ClearContents
        .Range("J1:J" & LR).AutoFilter Field:=1, Criteria1:="<0"
        Anz = WorksheetFunction.CountIf(.Range("J2:J" & LR), "<0")
        If Anz > 0 Then
            .Rows("2:" & LR).Copy ZZ.Rows(1)
            ZZ.Columns("D:D").Replace What:="Datum", Replacement:="Valuta", LookAt:=xlWhole
            ZZ.Cells.Font.Bold = False
         End If
         .AutoFilterMode = False
         
        'Null 
        Set ZZ = Sheets("Null")
        ZZ.Cells.ClearContents
        .Range("J1:J" & LR).AutoFilter Field:=1, Criteria1:="0,00"
        Anz = WorksheetFunction.CountIf(.Range("J2:J" & LR), "=0")
        If Anz > 0 Then
            .Rows("2:" & LR).Copy ZZ.Rows(1)
            ZZ.Columns("D:D").Replace What:="Datum", Replacement:="Valuta", LookAt:=xlWhole
            ZZ.Cells.Font.Bold = False
        End If
        .AutoFilterMode = False
        
        .Columns("J:J").ClearContents
    End With
End Sub

LG UweD
Anzeige
Liefert Ergebnis, aber Laufzeit ca.10 Sek.
28.03.2017 16:09:34
Helmut
Hallo Uwe,
danke für den Code der das gewünschte Ergebnis liefert, die Laufzeit bei
über 1200 Datenzeilen liegt bei +- 10 Sekunden.
Ich dachte eventuell an Array Lösung, aber da bin ich ziemlich 'unbefleckt' :-)
Falls keine weiteren Vorschläge kommen, werde ich mit Deiner Lösung leben ;-)
Vielen Dank
MfG
Helmut
AW: Liefert Ergebnis, aber Laufzeit ca.10 Sek.
28.03.2017 17:17:28
Daniel
Hi
probier mal das, könnte etwas schneller sein, da die Werte sortiert werden, bevor sie kopiert werden.
das ganze läuft in einer Kopie der Rohdaten, um diese nicht zu verändern:

Sub test()
Sheets("Negative").Cells.Clear
Sheets("Positive").Cells.Clear
Sheets("Null").Cells.Clear
Sheets("Rohdaten").Copy after:=Sheets("Rohdaten")
With ActiveSheet
.Cells(1, 3).Value = "x"
With .UsedRange.Columns(3)
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
.Formula = .Value
End With
With .UsedRange
.Sort key1:=.Cells(1, 8), order1:=xlAscending, Header:=xlYes
With .Columns(8).SpecialCells(xlCellTypeConstants, 1).Offset(0, 1)
.FormulaR1C1 = "=IF(RC8=0,true,if(RC8
Gruß Daniel
Anzeige
Schnell, aber nicht ganz so...
28.03.2017 18:50:33
Helmut
https://www.herber.de/bbs/user/112487.xlsm
Hallo Daniel,
ich habe einige Datensätze hinzugefügt,
schnell ist es, aber schau dir das Ergebnis an(Unterstreichungen)...
Wo könnte ich das im Code ändern?
MfG
Helmut
Die Lösung ist..
28.03.2017 20:08:14
Helmut
With ActiveSheet
.Columns("D:H").Borders.LineStyle = xlNone
im Code ergänzt, nun funktioniert es :-)
Danke UweD und Daniel
MfG
Helmut
AW: Die Lösung ist..
29.03.2017 10:20:23
Daniel
Hi
ggf reicht es auch aus, wenn du beim kopieren nicht alles kopierst, sondern nur die Werte und ggf die Zahlenformate,
dh du ersetzt das
.SpecialCells(xlCellTypeFormulas, 1).Offset(0, -8).Resize(, 8).Copy _
Sheets("Negative").Cells(1, 1)

durch
.SpecialCells(xlCellTypeFormulas, 1).Offset(0, -8).Resize(, 8).Copy
Sheets("Negative").Cells(1, 1).PasteSpecial, xlpastevaluesandnumberformats
und das natürlich für alle 3 Fälle
Gruß Daniel
Anzeige
Danke, viele Wege führen nach Rom ;-] owT
29.03.2017 16:28:00
Helmut

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige