Sub
Balk_Report()
Dim
bu, aBu
As
Integer
Dim
buDict
As
Dictionary
Dim
i
As
Integer
Dim
filterArray()
As
String
Dim
ueberschuss
As
Integer
, used
As
Integer
Dim
kennNummer
As
Integer
Dim
index
As
Integer
Dim
values
As
Range
Dim
header
As
String
Application.DisplayAlerts =
False
Set
buDict =
New
Scripting.Dictionary
buDict.CompareMode = BinaryCompare
buDict.RemoveAll
index = 0
Sheets(
"HelperTable"
).Visible =
True
Sheets(
"HelperTable"
).
Select
ActiveSheet.AutoFilterMode =
False
Cells.
Select
DeleteBorder
Selection.Delete Shift:=xlUp
Sheets(
"MainTable"
).
Select
Call
SortByKriterium
For
Each
brs
In
BRSDict
Set
aBrs = BRSDict(brs)
If
aBrs.State <>
"rejected"
Then
If
Not
buDict.Exists(aBrs.ST_BU)
Then
buDict.Add aBrs.ST_BU, Count_BRS_for_BUs(aBrs.ST_BU)
End
If
End
If
Next
Set
buDict = SortDictKeys(buDict)
ReDim
filterArray(buDict.Count)
Do
While
buDict.Count <> 0
For
Each
bu
In
buDict
Starting:
aBu = buDict.Item(bu)
If
i >= 15
Then
If
ueberschuss = 0
Then
ReDim
Preserve
filterArray(index - 1)
ActiveSheet.Range(
"A1:H"
& Range(
"H1"
).
End
(xlDown).row).AutoFilter Field:=3, Criteria1:=filterArray, Operator:=xlFilterValues
Set
mergedRange = Union(Range(
"A1:B1"
), Range(
"E1:H1"
), Range(FilterErsteZelle(used), Range(
"B1"
).
End
(xlDown)), Range(Range(
"E"
& FilterErsteZelle(used).row), Range(
"H1"
).
End
(xlDown)))
mergedRange.
Select
Selection.Copy
Call
DisplayHelperTable(header)
Sheets(
"MainTable"
).
Select
ReDim
filterArray(buDict.Count)
index = 0
i = 0
header =
""
Else
ReDim
Preserve
filterArray(index - 1)
ActiveSheet.Range(
"A1:H"
& Range(
"H1"
).
End
(xlDown).row).AutoFilter Field:=3, Criteria1:=filterArray, Operator:=xlFilterValues
Set
mergedRange = Union(Range(
"A1:B1"
), Range(
"E1:H1"
), Range(FilterErsteZelle(used), Range(
"B"
& FilterLetzteZelle(ueberschuss))), Range(Range(
"E"
& FilterErsteZelle(used).row), Range(
"H"
& FilterLetzteZelle(ueberschuss))))
mergedRange.
Select
Selection.Copy
Call
DisplayHelperTable(header)
Sheets(
"MainTable"
).
Select
ReDim
filterArray(buDict.Count)
index = 0
i = 0
header =
""
End
If
End
If
If
i < 15
Then
If
(i + aBu) <= 15
Then
filterArray(index) = bu
i = i + aBu
header = header & bu &
" | "
buDict.Remove (bu)
index = index + 1
ueberschuss = 0
ElseIf
i + aBu <= 18
Then
filterArray(index) = bu
i = i + aBu
header = header & bu &
" | "
buDict.Remove (bu)
index = index + 1
ueberschuss = 0
ElseIf
i + aBu > 15
Then
used = 0
filterArray(index) = bu
used = 15 - i
header = header & bu &
" x/y"
&
" | "
ueberschuss = 15 - i
ueberschuss = aBu - ueberschuss
buDict.Item(bu) = ueberschuss
i = 15
index = index + 1
GoTo
Starting
End
If
End
If
Next
Loop
ReDim
Preserve
filterArray(index - 1)
ActiveSheet.Range(
"$A$1:$H$149"
).AutoFilter Field:=3, Criteria1:=filterArray, Operator:=xlFilterValues
Set
mergedRange = Union(Range(
"A1:B"
& Range(
"B1"
).
End
(xlDown).row), Range(
"E1:H"
& Range(
"H1"
).
End
(xlDown).row))
mergedRange.
Select
Selection.Copy
Call
DisplayHelperTable(header)
Sheets(
"MainTable"
).
Select
Sheets(
"HelperTable"
).Visible =
False
buDict.RemoveAll
Set
buDict =
Nothing
Application.DisplayAlerts =
True
End
Sub