Thema Datum  Von Nutzer Rating
Antwort
23.08.2017 16:31:07 Neuling
NotSolved
Blau Vergleich Werte und Berechnung
24.08.2017 13:31:55 Ben
*****
NotSolved
24.08.2017 14:07:25 Ben
NotSolved
25.08.2017 09:29:40 Neuling
Solved

Ansicht des Beitrags:
Von:
Ben
Datum:
24.08.2017 13:31:55
Views:
783
Rating: Antwort:
  Ja
Thema:
Vergleich Werte und Berechnung

Hallo,

in dieser ZIP-Datei befinden sich folgende Arbeitsmappen:

  • Kunden.xlsx mit Beispiel-Daten
  • Abgleich - 2017-07.xlsx mit Beispiel-Abgleichsdaten für den Juli 2017
  • Analyse.xlsm Mit einem Auswerungs-Makro

Das Auswertungs-Makro liest alle beiden xlsx-Arbeitsmappen ein und stellt die Angaben in der gewünschten Form gegenüber:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
Option Explicit
 
Private Const MONEYFORMAT = "_-* #,##0.00 [$€-407]_-;-* #,##0.00 [$€-407]_-;_-* ""-""?? [$€-407]_-;_-@_-"
Private Const PERCENTFORMAT = "0.00%"
 
Sub Analyse()
    Dim wbkNew As Workbook, wbkKd As Workbook, wbkLast As Workbook
    Dim wshNew As Worksheet, wshKd As Worksheet, wshLast As Worksheet
     
    Dim colWorkbookOpened As New Collection
     
    ' Analyse in dieser Arbeitsmappe erstellen
    Set wbkNew = ThisWorkbook
    Set wshNew = wbkNew.Worksheets(1)
     
    ' Arbeitsmappe Kunden
    Set wbkKd = GetWorkbook(ThisWorkbook.Path & "\Kunden.xlsx", colWorkbookOpened)
    Set wshKd = wbkKd.Worksheets(1)
     
    ' Arbeitsmappe Letzter Abgleich
    Set wbkLast = GetWorkbook(ThisWorkbook.Path & "\Abgleich - " & LastMonth & ".xlsx", colWorkbookOpened)
    Set wshLast = wbkLast.Worksheets(1)
     
    ' Neue Arbeitsmappe vorbereiten (etwaige Inhalte werden gelöscht!)
    wshNew.UsedRange.Delete
    wshNew.Range("A1").Value = "Kd-Nummer"
    wshNew.Range("B1").Value = "Betrag aktuell"
    wshNew.Range("C1").Value = "Betrag letzter"
    wshNew.Range("D1").Value = "Differenz"
    wshNew.Range("E1").Value = "Prozentual"
     
    wbkNew.Activate
    wshNew.Activate
     
    CopyData wshKd, wshNew, 1
    CopyData wshLast, wshNew, 2
     
    CloseOpenedWorkbooks colWorkbookOpened
     
    SortData wshNew
     
End Sub
 
Sub SortData(wshData As Worksheet)
    Dim rngData As Range
    With wshData.Sort
        With .SortFields
            .Clear
            Set rngData = wshData.Range(wshData.Range("A2"), wshData.Range("A2").End(xlDown))
            .Add Key:=rngData, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .SetRange wshData.UsedRange
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
End Sub
 
Sub CopyData(wshSrc As Worksheet, wshDest As Worksheet, iColOffsetMoney As Integer)
    Dim rng As Range
    Dim lngTime As Long
    Dim rngDestKd As Range
    Set rng = wshSrc.Range("A2")
    Do
        Set rngDestKd = wshDest.Range("A:A").Find(what:=rng.Value, lookAt:=xlWhole)
        If rngDestKd Is Nothing Then
            ' neuen Eintrag anlegen
            If IsEmpty(wshDest.Range("A2")) Then
                Set rngDestKd = wshDest.Range("A2")
            Else
                Set rngDestKd = wshDest.Range("A1").End(xlDown).Offset(RowOffset:=1)
            End If
            With rngDestKd
                .Value = rng.Value
                .NumberFormat = rng.NumberFormat
                With .Offset(ColumnOffset:=3)
                    '.FormulaR1C1 = "=IF(AND(ISNUMBER(RC[-2]),ISNUMBER(RC[-1])),RC[-2]-RC[-1],"""")"
                    .FormulaR1C1 = "=RC[-2]-RC[-1]"
                    .NumberFormat = MONEYFORMAT
                End With
                With .Offset(ColumnOffset:=4)
                    .FormulaR1C1 = "=IF(ISNUMBER(RC[-1]),IF(RC[-3]=0,-1,RC[-1]/RC[-3]),"""")"
                    .NumberFormat = PERCENTFORMAT
                End With
            End With
        End If
        With rngDestKd.Offset(ColumnOffset:=iColOffsetMoney)
            .Value = rng.Offset(ColumnOffset:=1).Value
            .NumberFormat = MONEYFORMAT
        End With
         
        Set rng = rng.Offset(RowOffset:=1)
        ' Bei sehr langen Vorgängen Meldung "Application not Response" vermeiden...
        If Abs(lngTime - Timer) > 10 Then
            VBA.DoEvents
            lngTime = Timer
        End If
    Loop Until Intersect(wshSrc.UsedRange, rng) Is Nothing
     
End Sub
 
Function GetWorkbook(sFilename As String, col As Collection) As Workbook
    Dim wbk As Workbook
    Dim bFound As Boolean
    For Each wbk In Application.Workbooks
        If wbk.FullName = sFilename Then
            bFound = True
            Set GetWorkbook = wbk
            Exit For
        End If
    Next
    If Not bFound Then
        Set GetWorkbook = Application.Workbooks.Open(sFilename)
        col.Add GetWorkbook
    End If
End Function
 
Sub CloseOpenedWorkbooks(col As Collection)
    Dim wbk As Workbook
    Dim iPos As Integer
    For iPos = 1 To col.Count
        Set wbk = col.Item(iPos)
        wbk.Close False
    Next
End Sub
 
Function LastMonth() As String
    Dim dat As Date
    dat = DateSerial(Year(Date), Month(Date), 1)
    dat = DateAdd("m", -1, dat)
    LastMonth = Format(dat, "YYYY-MM")
End Function

LG, Ben


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
23.08.2017 16:31:07 Neuling
NotSolved
Blau Vergleich Werte und Berechnung
24.08.2017 13:31:55 Ben
*****
NotSolved
24.08.2017 14:07:25 Ben
NotSolved
25.08.2017 09:29:40 Neuling
Solved