Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code umschreiben?

Forumthread: Code umschreiben?

Code umschreiben?
27.11.2006 11:43:03
Metman
Hallo leute,
ich hab ein Code das mir Werte auf einem anderen Tabellenblatt sucht, dann die werte mit einem offset (-2,0) in einem Array speichert. Das array wird mit 6 Werten gefüllt.
Hier mal mein Code, ich möchte das aber in verkürzter Form als schleife haben, kriege das nicht hin

Sub zykluszeit_erfassen()
Dim rngFindID As Object, ersteAdresse$
Dim zeilen_max As Long, i As Long
Dim Identifier As String
Dim sheetDB As Worksheet
Dim sheetImp As Worksheet
Dim rangeImpD As Range
Dim firstAddress As String
Dim arrFeld(6) As Variant
Set sheetDB = Worksheets("Datenbasis")
Set sheetImp = Worksheets("imported")
Set rangeImpD = sheetImp.Columns(4)
zeilen_max = sheetDB.Cells(65536, 2).End(xlUp).Row
For i = 8 To zeilen_max
Identifier = sheetDB.Cells(i, 2)
If Identifier <> "" Then
With Worksheets("imported").Range("D:D")
Set rngFindID = .Find(Identifier)
If Not rngFindID Is Nothing Then
ersteAdresse = rngFindID.Address
arrFeld(0) = rngFindID.Offset(0, -2)
sheetDB.Cells(i, 6).ClearContents
Do
Set rngFindID = .FindNext(rngFindID)
If Not rngFindID.Address = ersteAdresse Then 'Exit Do
If Not rngFindID Is Nothing Then
arrFeld(1) = rngFindID.Offset(0, -2)
sheetDB.Cells(i, 6).ClearContents
Exit Do
End If
End If
Loop While Not rngFindID Is Nothing And rngFindID.Address <> ersteAdresse
Do
Set rngFindID = .FindNext(rngFindID)
If Not rngFindID.Address = ersteAdresse Then 'Exit Do
If Not rngFindID Is Nothing Then
arrFeld(2) = rngFindID.Offset(0, -2)
sheetDB.Cells(i, 6).ClearContents
Exit Do
End If
End If
Loop While Not rngFindID Is Nothing And rngFindID.Address <> ersteAdresse
Do
Set rngFindID = .FindNext(rngFindID)
If Not rngFindID.Address = ersteAdresse Then 'Exit Do
If Not rngFindID Is Nothing Then
arrFeld(3) = rngFindID.Offset(0, -2)
sheetDB.Cells(i, 6).ClearContents
Exit Do
End If
End If
Loop While Not rngFindID Is Nothing And rngFindID.Address <> ersteAdresse
Do
Set rngFindID = .FindNext(rngFindID)
If Not rngFindID.Address = ersteAdresse Then 'Exit Do
If Not rngFindID Is Nothing Then
arrFeld(4) = rngFindID.Offset(0, -2)
sheetDB.Cells(i, 6).ClearContents
Exit Do
End If
End If
Loop While Not rngFindID Is Nothing And rngFindID.Address <> ersteAdresse
Do
Set rngFindID = .FindNext(rngFindID)
If Not rngFindID.Address = ersteAdresse Then 'Exit Do
If Not rngFindID Is Nothing Then
arrFeld(5) = rngFindID.Offset(0, -2)
sheetDB.Cells(i, 6).ClearContents
Exit Do
End If
End If
Loop While Not rngFindID Is Nothing And rngFindID.Address <> ersteAdresse
sheetDB.Cells(i, 6).Value = (((arrFeld(1) - arrFeld(0)) + (arrFeld(3) - arrFeld(2)) + (arrFeld(5) - arrFeld(4))) / 3 * 1000)
sheetDB.Cells(i, 6).Interior.ColorIndex = 24
End If
End With
End If
Next i
End Sub

Hier unten wird ein Mittelwert gebildet und das wird dann in sheetdb.Cells eingeschrieben und mit farbe gefüllt. Funktioniert tadellos aber als schleifenkonstrukt kriege ich es nicht hin.
gruß
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code umschreiben?
27.11.2006 17:21:34
fcs
Hallo Metman,
ungetestet kann man etwa wie folgt eine Schleife einbauen.
Gruß
Franz

Sub zykluszeit_erfassen()
Dim rngFindID As Range, ersteAdresse$
Dim zeilen_max As Long, i As Long
Dim Identifier As String
Dim sheetDB As Worksheet
Dim sheetImp As Worksheet
Dim rangeImpD As Range
Dim firstAddress As String
Dim arrFeld(6) As Variant, arrIndex As Long
Set sheetDB = Worksheets("Datenbasis")
Set sheetImp = Worksheets("imported")
Set rangeImpD = sheetImp.Columns(4)
zeilen_max = sheetDB.Cells(65536, 2).End(xlUp).Row
For i = 8 To zeilen_max
Identifier = sheetDB.Cells(i, 2)
If Identifier <> "" Then
With rangeImpD
Set rngFindID = .Find(Identifier)
If Not rngFindID Is Nothing Then
ersteAdresse = rngFindID.Address
arrIndex = 0
sheetDB.Cells(i, 6).ClearContents
Do
arrFeld(arrIndex) = rngFindID.Offset(0, -2)
arrIndex = arrIndex + 1
If arrIndex > 5 Then Exit Do
Set rngFindID = .FindNext(rngFindID)
Loop While Not rngFindID Is Nothing And rngFindID.Address <> ersteAdresse
sheetDB.Cells(i, 6).Value = (((arrFeld(1) - arrFeld(0)) + (arrFeld(3) - arrFeld(2)) + (arrFeld(5) - arrFeld(4))) / 3 * 1000)
sheetDB.Cells(i, 6).Interior.ColorIndex = 24
End If
End With
End If
Next i
End Sub

Anzeige
AW: Code umschreiben?
27.11.2006 19:53:26
Metman
Hallo Franz,
ich probiers gleich morgen früh aus und melde mich nochmal!!
Gruß
metman
AW: Code umschreiben?
28.11.2006 07:24:22
Metman
Guten Morgen,
es funktioniert tadellos. Danke dir.
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige