Help..I need somebody...
19.07.2005 19:55:13
Ramon
den ca 12000 Zeilen einer Tabelle (die diesem Makro zugehörige) verglichen. Nachdem die entsprechende Zeile gefunden wurde, wird ein zugehöriger Wert aus einer weiteren Tabelle (Sheet("Pf_IC-IF")sowie die Nummer der Suchzeile in das sheed "Total" geschrieben. Soweit so gut, das funktioniert dank den erwähnten Helden auch jetzt sehr schnell. Da ich jedoch den Hals nicht voll kriege möchte ich jetzt die 7 Zellen der Einlesezeile (also die Spalten 3 bis 9 dieser Zeile) mehrmals beschreiben, was ca. 19000 verschiedene Kombinationen dieser Zeile ergeben würde und somit auch 19000 Ergebnisse im sheet "Total". Ich hab das im unten angefuehrten Makro bis jetzt fuer 3 der 7 Parameter (j, z, k) getan...klappt auch alles, aber wenn ihr euch die Programierzeilen anschaut, müsste euch, wenn ihr etwas davon versteht, schlecht werden, weil zusammengefummelt. Die Variable j habe ich erfolgreich mit in die Ausgabezeile eingebaut (also eine Abhängigkeit zwischen Ausgabezellen und Einleseparameter erzeugt-das wäre eine Lösung wenn man das für alle Variablen machen könnte), bei den weiteren Variablen hörte der Spass dann aber auf. Somit habe ich diese über lästige If-Bedingungen und die Laufvariable l in der Ausgabezeile berücksichtigt. Was anderes ist mir heute den ganzen tag nicht eingefallen, Hut ab Ramon...ich habe um diesen Text verständlcher zu machen an das Makro nochmal Kommentare geschrieben. Hauptproblem ist also ca 19000 "Zeilen" einlesen zu lassen und dann das jeweils zugehörige Ergebnis in ein sheet schreiben zu lassen. Ausserdem wäre ich über eine Vereinfachung der ein oder anderen Programmierzeile dankbar (s.u.)...vielen Dank bereits im Vorraus, Ramon
Sub Total()
Dim l As Integer 'l ist die Laufvariable im Ausgabesheet "Total"
Dim j As Integer
Dim i As Integer
Dim x As Integer
Dim Var 'oder auch Var()
For j = 1 To 5
Sheets("Input").Cells(16, 10) = j ' j ist die erste Variable der Einlesezeile
For z = 1 To 6 'z ist genau wie k ebenso Variable der
'Einlesezeile
If Not z = 4 Then ' wie kann ich das einfacher formulieren?
If Not z = 5 Then ' z soll 1,2,3 und 6 sein!!!
Sheets("Input").Cells(18, 10) = z
End If
End If
For k = 0.5 To 8 Step 0.5 'das gleiche auch für k (k=0.5, 5 und 8)
If Not k = 1 Then
If Not k = 1.5 Then
If Not k = 2 Then
If Not k = 2.5 Then
If Not k = 3 Then
If Not k = 3.5 Then
If Not k = 4 Then
If Not k = 4.5 Then
If Not k = 5.5 Then
If Not k = 6 Then
If Not k = 6.5 Then
If Not k = 7 Then
If Not k = 7.5 Then
Sheets("Input").Cells(18, 5) = k
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
For x = 1 To 8
If Sheets("Input").Cells(8, 10) < Sheets("Pf_Steel").Cells(47 + x * 9, 3) Then Exit For
Var = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(Sheets("Pf_Steel").Range(Sheets("Pf_Steel").Cells(46 + x * 9, 3), Sheets("Pf_Steel").Cells(46 + x * 9, 9)))), "#")
If j = 1 Then 'Das verringert die Suchzeit,so sucht
datensatzanfang = 5 'das Programm für ein bestimmtes j
datensatzgroesse = 2951 'auch nur einen bestimmten Zeilenbereich
End If 'ab...hat sonst keine Funktion...
If j = 2 Then
datensatzanfang = 2957
datensatzgroesse = 2951
End If
If j = 3 Then
datensatzanfang = 5909
datensatzgroesse = 2087
End If
If j = 4 Then
datensatzanfang = 7997
datensatzgroesse = 2087
End If
If j = 5 Then
datensatzanfang = 10085
datensatzgroesse = 2087
End If
For suchzeile = datensatzanfang To datensatzanfang + datensatzgroesse
If Var = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(Range(Cells(suchzeile, 3), Cells(suchzeile, 9)))), "#") Then
If k = 0.5 And z = 1 Then l = 1 ' Gibt es eine Möglichkeit ohne diese
If k = 0.5 And z = 2 Then l = 2 ' If-Bedingungen auszukommen? Bei
If k = 0.5 And z = 3 Then l = 3 ' 19000 verschiedenen Kombinationen
If k = 0.5 And z = 6 Then l = 4 ' müsste ich, die Variable j ausgenommen
If k = 5 And z = 1 Then l = 5 ' (da diese als einzige in die
If k = 5 And z = 2 Then l = 6 ' Ausgabezeile (s.u.) mit-eingearbeitet
If k = 5 And z = 3 Then l = 7 ' ist),19000/5 mal diese Bedingung
If k = 5 And z = 6 Then l = 8 ' formulieren, was viel Arbeit ist.
If k = 8 And z = 1 Then l = 9 '(bis jetzt sind es nur 12 (60/5) If-Beding.
If k = 8 And z = 2 Then l = 10 'da ich bis jetzt nur 3 Variablen habe,(j,z,k)
If k = 8 And z = 3 Then l = 11 'die kombiniert zu 60 Kombinat. führen!!!
If k = 8 And z = 6 Then l = 12
Sheets("Total").Cells((13 * (5 * l - (5 - j)) - 8), 14 - (9 - x)) = Sheets("Pf_IC-IF").Cells(suchzeile, 6)
Sheets("Total").Cells((13 * (5 * l - (5 - j)) - 9), 14 - (9 - x)) = suchzeile
'Das sind die "Ausgabezeilen"
Exit For
End If
Next suchzeile
Next x
Next k
Next z
Next j
End Sub