Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
636to640
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
636to640
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Help..I need somebody...

Help..I need somebody...
19.07.2005 19:55:13
Ramon
Guten Tag....Da bin ich wieder...genau einen Tag hats gedauert bis ich vor einem neuen Problem stehe, nachdem das erste dank Ransi und vor allem Micha (Looob) so excellent gelöst wurde...bei dem Makro handelt es sich (fuer alle die nicht Ransi und Micha heissen) um eine Suchfunktion...eine Zeile (sheet."pf_steel"(Zeile 46+x*9, Spalten 3 bis 9) wird eingelesen und dann mit
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

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

Betreff
Datum
Anwender
Anzeige
AW: Help..I need somebody...
20.07.2005 00:33:08
Berber
Hallo Ramon,
gleich vorweg, ich habe Deinen Code nicht in der Gesamtheit auf Verbesserungsmöglichkeiten geprüft.
Ich habe auch meinen Vorschlag nicht auf "Läuft" geprüft.
Alternativ zu den grossen if... end if Blocks solltest Du Select verwenden.
for z= 1 to 6
Select Case z
Case 1,2,3,6 'wenn z =1,oder 2,oder 3,oder 6
Sheets("Input").Cells(18, 10) = z
end Select
For k = 0.5 To 8 Step 0.5
select case k
case k 1, 1.5, 2, 2.5 'usw....
Sheets("Input").Cells(18, 5) = k
end select
'der grösste If-Block in Deiner Beschreibung
select case k
case k = 0.5
'------------------------------k+0.2-------------z:100----------------- -z
'Beispiel z= 1 k= 0.5/ 0.5+0.2=0,7/ 0.7-0.01 x1=0.69/ 0,69+1=1,69/ int(1,69)= 1
l=int((k+0.2)-z:100*z+1)
'Die obige Formel löst wenn k=0.5 und z= 1 bis 6, hat mich etwas zeit gekostet,
'da ich kein Ass im Rechnen bin, rechne mal auf dem Papier ob es funzt.

'wenn k gösser 0.5 z.B. 5,8 oder mehr
case k &gt 0.5
'wenn z 1,2 oder 3
select case z
case 1,2,3
' 5+1-1 = 5 wenn z = 1, oder 5+2-1=6 wenn z=2, oder 5+3-1=7 wenn z=3
l=k+z-1
case 6 ' wenn Z=6 haben wir einen besonderen Fall der mit obigen
' Berechnungnicht zu lösen ist
' 5+6-3=8 oder 8+6-3=11
l=k+z-3
end select ' case z
end select ' case k
'das Schleifenende von for Z=1 to und for K= 1 to habe ich nicht gesetzt, da mir nicht
'bekannt
So, das müsste Deinen Code etwas kürzen.
Bei Fragen gerne melden, ich bin aber bis 22.07 in nicht mehr im Netz, daher etwas Geduld.
Gruss
Berber
Anzeige
AW: Help..I need somebody...
27.07.2005 08:55:27
Ramon
Hatte vergessen mich zu bedanken fuer deine Hilfe Berber...hat mir ein Stück weitergeholfen...mitlerweile komme ich klar...vielen Dank, Ramon
Die Anfrage ist mir zu "breit" o.w.T.
20.07.2005 03:41:01
Reinhard
Gruß
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige