Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1040to1044
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

Array-Problem?

Array-Problem?
20.01.2009 13:45:13
Petra
Schönen Tag allerseits
hier ein kurzer Beispielcode:

Sub sum_man()
Dim lRow, Z
Dim LR
Dim a As Integer
Dim SP1, SP2, SP3 '.usw....bis ca. SP50.
nrech = True
With ActiveSheet
a = .Cells.Find(What:="summe gesamt", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
lRow = a - 2
For Z = lRow To 4 Step -1
If UCase(Cells(Z, 4)) = UCase(Cells(Z - 1, 4)) Then
SP1 = SP1 + Cells(Z, 28)
SP2 = SP2 + Cells(Z, 29)
SP3 = SP3 + Cells(Z, 30)
Else
Rows(Z).Insert Shift:=xlDown
Cells(Z, 4) = "ZW"
SP1 = SP1 + Cells(Z + 1, 28)
Cells(Z, 28) = SP1
SP1 = 0
SP2 = SP2 + Cells(Z + 1, 29)
Cells(Z, 29) = SP2
SP2 = 0
SP3 = SP3 + Cells(Z + 1, 30)
Cells(Z, 30) = SP3
SP3 = 0
'usw. bis SP50
End If
Next Z
End With
nrech = False
End Sub


Mein Problem: wie kann ich die "Z"-Schleife in ein Array packen, damit das Ganze kürzer wird?
Vielen Dank für Eure Beiträge
Liebe Grüße Petra

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array-Problem?
20.01.2009 14:20:04
fcs
Hallo Petra,
ungetestet -mangels Testdaten
Gruß
Franz

Sub sum_man()
Dim lRow, Z
Dim LR
Dim a As Integer
Dim SP() As Double
Dim intI As Integer
Const Anzahl_SP As Integer = 50 'Anzahl der Spalten, die im Array enthalten sein sollen
nrech = True
ReDim SP(1 To Anzahl_SP) 'Array dimensionieren
With ActiveSheet
a = .Cells.Find(What:="summe gesamt", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
lRow = a - 2
For Z = lRow To 4 Step -1
If UCase(Cells(Z, 4)) = UCase(Cells(Z - 1, 4)) Then
intI = 0 'Array-Zeilenzähler zurücksetzen
For Spalte = 28 To 30 'Spalten-Zähler
intI = intI + 1 'Array-Zeilenzähler
SP(intI) = SP(intI) + Cells(Z, Spalte)
Next
Else
Rows(Z).Insert Shift:=xlDown
Cells(Z, 4) = "ZW"
intI = 0 'Array-Zeilenzähler zurücksetzen
For Spalte = 28 To 28 + 49 'Spalten-Zähler
intI = intI + 1 'Array-Zeilenzähler
SP(intI) = SP(intI) + Cells(Z + 1, Spalte)
Cells(Z, 28) = SP(intI)
SP(intI) = 0
Next
End If
Next Z
End With
nrech = False
End Sub


Anzeige
AW: Array-Problem?
20.01.2009 14:42:00
Petra
Danke Franz
leider funktionierts nicht (abgesehen davon, daß "Spalte" nicht dimensioniert war).
Wer hat noch einen Tipp für mich?
Liebe Grüße Petra
AW: Array-Problem?
20.01.2009 15:01:46
fcs
Hallo Petra,
was funktioniert denn nicht.
Eigentlich zählen die Array-Zähler
SP(1), SP(2), usw. für Spalte 28, 29, usw
genau so durch wie vorher
SP1, SP2, usw. mit der entsprechenden Spaltennummer in der Cells-Anweisung.
Dann muss schon in deiner Prozedur irgendein Ablauf nicht korrekt sein.
Eine kleine Beispieldatei mit anonymisierten Daten wäre dann hilfreich.
Gruß
Franz
AW: Array-Problem?
20.01.2009 15:27:08
Petra
Hallo Franz
ich hab mit deinem Makro etwas experimentiert, so klappt es:

Sub sum_man_A()
Dim lRow, Z
Dim LR
Dim a As Integer
Dim SP() As Double
Dim intI As Integer
Dim Spalte
Const Anzahl_SP As Integer = 29 'Anzahl der Spalten, die im Array enthalten sein sollen
nrech = True
ReDim SP(1 To Anzahl_SP) 'Array dimensionieren
With ActiveSheet
a = .Cells.Find(What:="summe gesamt", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
lRow = a - 2
For Z = lRow To 4 Step -1
If UCase(Cells(Z, 4)) = UCase(Cells(Z - 1, 4)) Then
intI = 0 'Array-Zeilenzähler zurücksetzen
For Spalte = 50 To 78 'Spalten-Zähler
intI = intI + 1 'Array-Spaltenzähler
SP(intI) = SP(intI) + Cells(Z, Spalte)
Next Spalte
Else
Rows(Z).Insert Shift:=xlDown
Cells(Z, 4) = "ZW"
intI = 0 'Array-Zeilenzähler zurücksetzen
For Spalte = 50 To 78 'Spalten-Zähler
intI = intI + 1 'Array-Spaltenzähler
SP(intI) = SP(intI) + Cells(Z + 1, Spalte)
Cells(Z, Spalte) = SP(intI)
Next
ReDim SP(1 To Anzahl_SP) 'Array dimensionieren
End If
Next Z
End With
nrech = False
End Sub


Vielen Dank für Deinen Denkanstoss und liebe Grüße
Petra

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige