Option
Explicit
Option
Base 1
Public
Const
anzAltersgruppen = 6
Sub
WanderungsDatenStrukturieren()
Dim
StrSteuersheet
As
String
Dim
StrKreissheet
As
String
Dim
IntHerkunfskreisSpalte
As
Integer
Dim
IntZielkreisSpalte
As
Integer
Dim
IntAltersgruppeSpalte
As
Integer
Dim
IntSortierKriteriumAltersgruppe
As
Integer
Dim
IntErsteZeiteDatensheet
As
Integer
Dim
intEndzeileDatensheet
As
Integer
Dim
StrAltersgruppen()
As
String
Dim
IntAltersgruppen()
As
Integer
Dim
LngAltersgruppenFehlend()
As
Long
Dim
StrKreisSchluesselZiel()
As
String
Dim
StrKreisSchluesselHerk()
As
String
Dim
IntAnzHerkunftskreiseLeer
As
Integer
Dim
anzZielKreise
As
Integer
Dim
anzHerkKreise
As
Integer
Dim
IntAltersgruppeErg
As
Integer
Dim
LngAltersgruppenEintrag
As
Long
Dim
i
As
Integer
Dim
i2
As
Integer
Dim
i3
As
Integer
Dim
izeile
As
Long
Dim
ifehl
As
Integer
Dim
idurchlauf
As
Integer
Dim
iadd
As
Integer
Dim
iendzeile
As
Long
Dim
ialter
As
Long
Dim
ikreisZiel
As
Integer
Dim
ikreisHerk
As
Integer
StrSteuersheet =
"Steuer"
Sheets(StrSteuersheet).
Select
StrKreissheet = Range(
"C11"
)
anzHerkKreise = Range(
"C13"
)
anzZielKreise = Range(
"C14"
)
IntErsteZeiteDatensheet = Range(
"C15"
)
intEndzeileDatensheet = Range(
"C16"
)
IntHerkunfskreisSpalte = Range(
"C17"
)
IntZielkreisSpalte = Range(
"C18"
)
IntAltersgruppeSpalte = Range(
"C19"
)
IntSortierKriteriumAltersgruppe = Range(
"C20"
)
LngAltersgruppenEintrag = 0
iadd = 10
ialter = IntErsteZeiteDatensheet
ReDim
StrAltersgruppen(anzAltersgruppen)
As
String
ReDim
IntAltersgruppen(anzAltersgruppen)
As
Integer
ReDim
LngAltersgruppenFehlend(anzAltersgruppen)
As
Long
ReDim
StrKreisSchluesselZiel(anzZielKreise)
As
String
ReDim
StrKreisSchluesselHerk(anzHerkKreise)
As
String
Sheets(StrSteuersheet).
Select
Range(
"C3"
).
Select
For
i = 1
To
anzAltersgruppen
StrAltersgruppen(i) = Cells(i + 2, 3)
IntAltersgruppen(i) = i
Next
Sheets(StrSteuersheet).
Select
Range(
"F3"
).
Select
For
i = 1
To
anzHerkKreise
StrKreisSchluesselHerk(i) = Cells(i + 2, 6)
Debug.Print StrKreisSchluesselHerk(i)
Next
Sheets(StrSteuersheet).
Select
Range(
"G3"
).
Select
For
i = 1
To
anzZielKreise
StrKreisSchluesselZiel(i) = Cells(i + 2, 7)
Next
Sheets(StrKreissheet).
Select
Cells(IntErsteZeiteDatensheet, IntSortierKriteriumAltersgruppe).
Select
iendzeile = intEndzeileDatensheet
izeile = IntErsteZeiteDatensheet
For
ikreisHerk = 1
To
anzHerkKreise
If
Cells(izeile, IntHerkunfskreisSpalte) = StrKreisSchluesselHerk(ikreisHerk)
Then
ikreisZiel = 1
For
ikreisZiel = 1
To
anzZielKreise
If
Cells(izeile, IntZielkreisSpalte) = StrKreisSchluesselZiel(ikreisZiel)
Then
For
i = 1
To
anzAltersgruppen
LngAltersgruppenFehlend(i) = 0
Next
ifehl = 1
idurchlauf = 1
For
i = 1
To
6
If
IsNull(
CStr
(Cells(izeile, IntAltersgruppeSpalte)))
Then
Exit
Sub
IntAltersgruppeErg = Altersgruppe2Zahl(
CStr
(Cells(izeile, IntAltersgruppeSpalte)))
If
IntAltersgruppeErg < idurchlauf
Then
For
i2 = i
To
anzAltersgruppen
LngAltersgruppenFehlend(ifehl) = i2 + LngAltersgruppenEintrag
ifehl = ifehl + 1
Next
Exit
For
End
If
If
IntAltersgruppeErg = 99
Then
Exit
Sub
If
IntAltersgruppeErg = i
Then
Cells(izeile, IntSortierKriteriumAltersgruppe) = IntAltersgruppeErg + LngAltersgruppenEintrag
izeile = izeile + 1
Else
LngAltersgruppenFehlend(ifehl) = i + LngAltersgruppenEintrag
ifehl = ifehl + 1
End
If
idurchlauf = idurchlauf + 1
Next
For
i = 1
To
ifehl - 1
Cells(iendzeile, IntSortierKriteriumAltersgruppe) = LngAltersgruppenFehlend(i)
iendzeile = iendzeile + 1
Next
LngAltersgruppenEintrag = LngAltersgruppenEintrag + iadd
Else
Rows(izeile &
":"
& izeile + 5).
Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(izeile, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + 1
Cells(izeile + 1, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + 2
Cells(izeile + 2, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + 3
Cells(izeile + 3, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + 4
Cells(izeile + 4, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + 5
Cells(izeile + 5, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + 6
izeile = izeile + 6
LngAltersgruppenEintrag = LngAltersgruppenEintrag + iadd
iendzeile = iendzeile + anzAltersgruppen
End
If
Next
Else
IntAnzHerkunftskreiseLeer = anzAltersgruppen * anzZielKreise
MsgBox
"Den Herkunftskreis mit dem Kreisindex "
& ikreisZiel &
" gibt es nicht! Für Kreis xy werden sechs * "
& anzZielKreise &
" eingefügt. Dies sind "
& IntAnzHerkunftskreiseLeer &
" Zeilen."
Rows(izeile &
":"
& izeile + IntAnzHerkunftskreiseLeer - 1).
Select
Debug.Print
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Debug.Print
For
i2 = 1
To
IntAnzHerkunftskreiseLeer
For
i3 = 1
To
anzAltersgruppen
Cells(izeile, IntSortierKriteriumAltersgruppe) = LngAltersgruppenEintrag + i3
izeile = izeile + 1
Next
LngAltersgruppenEintrag = LngAltersgruppenEintrag + iadd
i2 = i2 + anzAltersgruppen
Next
iendzeile = iendzeile + IntAnzHerkunftskreiseLeer
End
If
Next
End
Sub
Public
Function
Altersgruppe2Zahl(StrAltersgruppe
As
String
)
As
Integer
Select
Case
StrAltersgruppe
Case
"unter 18"
Altersgruppe2Zahl = 1
Case
"18 - 25"
Altersgruppe2Zahl = 2
Case
"25 - 30"
Altersgruppe2Zahl = 3
Case
"30 - 50"
Altersgruppe2Zahl = 4
Case
"50 - 65"
Altersgruppe2Zahl = 5
Case
"65 und älter"
Altersgruppe2Zahl = 6
Case
Else
MsgBox
"Altersgruppe nicht definiert, Prozedur wird abgebrochen"
Altersgruppe2Zahl = 99
End
Select
End
Function