Schleifen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Schleifen
von: golem
Geschrieben am: 09.10.2003 15:23:36

Hi,
allgemeine Frage: wann gebraucht man welche Schleife?
Meiner Meinung nach kann man aus einer schleife mit If Bedingungen etc "jede" andere Schleife erzeugen.

Stimmt es das manche Schleifen schneller als andere sind?

Ist for-next Schleife langsamer als eine do Loop Schleife?

Gruß Golem

Bild


Betrifft: AW: Schleifen
von: Michael Scheffler
Geschrieben am: 09.10.2003 15:41:37

Hallo Golem,

Konstruiere mir bitte Folgendes:

Mit einer If-Schleife (1000) mal schreiben:
"Ich brauche Schleifen für repetierende Vorgänge!!!"
Gruß

Micha


Bild


Betrifft: AW: Schleifen
von: golem
Geschrieben am: 09.10.2003 15:51:47

hi Micha,
ich weiß If ist eine ANWEISUNG.
Meinte in meiner Frage:
...aus einer schleife(z.B.For next) MIT zusätslichen If Bedingungen etc "jede" andere Schleife erzeugen.
So kann man in c++ aus einer Whileschleife eine For schleife machen, wenn man eine If Bedingung zufügt oder einfach vorher z.B.i=0 setzt, aber egal. Hab mich schlecht ausgedrückt.

Frage: werden manche Schleifen schneller abgearbeitet als andere Schleifenarten?
Annahme:beide produzieren das selbe Ergebnis in "gleicher" Weise.

Gruß Goli


Bild


Betrifft: AW: Schleifen
von: Andi
Geschrieben am: 09.10.2003 16:10:04

is zwar vielleicht nicht hübsch, aber es geht doch (oder hab' ich dich falsch verstanden?):


Private Sub CommandButton1_Click()
Dim x As Integer
x = 0
schleifenanfang:
  
  Debug.Print "Ich brauche Schleifen für repetierende Vorgänge!!!"
  x = x + 1
  If x < 1000 Then
    GoTo schleifenanfang
  Else
    GoTo Schleife_zu_ende
  End If
Schleife_zu_ende:
End Sub



Gruß
Andi


Bild


Betrifft: AW: Schleifen
von: Michael Scheffler
Geschrieben am: 09.10.2003 16:23:04

Ja und dann gibt es noch die kleine Feinheit mir Abweis- und Nichtabweis-Schleifen.

Das ist die andere Geschichte (außer der Performance), die unterscheidet sich schon.

Es gibt da Untersuchungen drüber - finden sich im Netz. Musst mal schauen.

Nicht jede Scheife ist für jeden Zweck ideal.

"Do While" ist für das Einlesen von Dateien gut geeignet.

"For Next" für Schleifen, wo man vorher die Grenzen weiß.

"For Each" für Auflistungs/Collection-Schleifen.

Klar kannst Du z.B. auch mit einem "If" ein "Exit For" programmieren,
aber das "If" versaut einem die Performace ganz erheblich...

Man kann das auch immer anders machen, es ist ja kein Dogma.
Aber es ist eben meistens nicht nur "nicht" schön, sondern auch unzweckmäßig.


Gruß

Micha


Bild


Betrifft: hübsch o.T. darauf muss man mal kommen
von: golem
Geschrieben am: 10.10.2003 09:31:37




Bild


Betrifft: AW: Schleifen
von: xXx
Geschrieben am: 09.10.2003 16:12:24

Hallo,
hinsichtlich der Laufzeit unterscheiden sich die Schleifen nur marginal(siehe Test). Ein anderes Kriterium ist die Übersichtlichkeit. Anstatt eines Haufens verschachtelter If's und ElseIf's würde ich z.B. eine Select-Case Konstruktion vorziehen.


Sub SchleifenTest()
  Dim i As Long, t As Double, n As Long
  
  Application.ScreenUpdating = False
  n = 10000
  
  t = Timer
  For i = 1 To n
  Cells(i, 1) = "Testtext " & i
  Next i
  Cells(i, 1) = Timer - t
  
  t = Timer
  i = 1
  Do While i <= n
  Cells(i, 2) = "Testtext " & i
  i = i + 1
  Loop
  Cells(i, 2) = Timer - t
  
  t = Timer
  i = 1
Schleife1:
  Select Case i
    Case Is <= n
      Cells(i, 3) = "Testtext " & i
      i = i + 1
      GoTo Schleife1
  End Select
  Cells(i, 3) = Timer - t
  
  i = 1
  t = Timer
Schleife2:
  If i <= n Then
    Cells(i, 4) = "Testtext " & i
    i = i + 1
    GoTo Schleife2
  Else
    Cells(i, 4) = Timer - t
  End If
  Application.ScreenUpdating = True
End Sub

Gruß aus'm Pott
Udo
http://www.excelerator.de

P.S. Das Forum lebt auch von den Rückmeldungen der Frager an die Antworter!


Bild


Betrifft: AW: Schleifen
von: Karl-Otto Reimann
Geschrieben am: 09.10.2003 17:47:37

Hallo Udo
"Marginal" ist gut.
Falsche Referenzierung und Variablendeklaration kosten Minuten.
Glück Auf KO


Bild


Betrifft: AW: Schleifen
von: Hans W. Hofmann
Geschrieben am: 09.10.2003 19:36:51

Wollt Ihr werklich Speed, dann lasst einen Makro4 ran:
Wie war dass noch mal.
Schleife
=FÜR("i";1;10000)
=FORMEL("Text "&i;"Z"&i"S")
=WEITER()
=RÜCKSPRUNG()

Testen und :-)
BTW: Kann sich rentieren da was auszulagern. Wie isses Golem, dass bringet
Deinen Salesman ans rennen...

Gruß HW


Bild


Betrifft: Hallo Hans!
von: golem
Geschrieben am: 10.10.2003 10:39:46

Hi,
schaust Du mal wieder im Forum vorbei- TSP : habe info@lemitec.de geschrieben. Bis jetzt
keine Antwort.
Zur Zeit bin ich in VBA geblieben und habe nichts in DLL "ausgelagert". MS VB++ erstellt DLL Dateien mit Bibliotheken von denen ich noch nie gehört habe und in einer Art und Weise, dass ich nicht weiß wo ich meine Unterfunktion reinquetschen könnte.
Habe festgestellt, dass es nur eine Unterfunktion gab, die stark zeitraubend war.
Bei wenigen Restriktionen(5-10 von 100 möglichen) dauert es 30-120sec, naja immerhin keine Viertelstunde+ oder so...

Ist Dein geposteter Code eine Excelfkt oder noch in VBA umzuschreiben?

Schön mal wieder von Dir zu hören!


Bild


Betrifft: AW: Hallo Hans!
von: Hans W. Hofmann
Geschrieben am: 10.10.2003 13:22:12

Ajee, das ist unsere Allgemein Adresse und ich bin zur Zeit nicht auf Arbeit (komme da nicht ran) bin auf Leergang. Du hast ja meine private Adresse - bitte keine Email veröffentlichen - Es wird z.Z. alles ausgelesen und gespamt was das Zeug hält.

VB kannst Du vergessen das bringt net viel: Wie sieht denn Dein Zeit intensiver Codeteil aus. Lass halt mal sehen?

Ich weiss etzat net ob Du noch XL4.0 gekannt hast. Aber das war noch nix mit VBA und dem dadurch verursachten Overhead. Ein Makro4.0 läuft in einem speziellen Makro-Tabellenblatt. Vielleicht weiß hier jemand, wo da noch Dokumentation zu finden ist. Kann DIr höchstens ein Beispiel schicken...


Gruß HW


Bild


Betrifft: AW: Hallo Hans!
von: golem
Geschrieben am: 10.10.2003 16:05:04

Hallo,
ich werde und habe Deine Adresse natürlich nicht veröffentlicht, wieso sollte ich auch?

-Was ist Xl4.0, eine Programmiersprache?
-Beispiele erhalte ich gerne, bin sowas wie ein Sammler.
-Ist im TSP die DLL Datei mit XL4.0 programmiert(sofern XL eine Sprache ist)?
Der Code ist etwas abgewandelt von meiner Dienststelle, deshalb könnte ich Dir höchstens ein paar zeitraubende Schleifen zukommen lassen und nicht das gesamte Programm, wäre dann aber sicherlich schlecht zu verstehen.
Zuhause versuche ich z.Zt. ein Programm zur Depotverwaltung/Mitarbeiterverwaltung/Maschinenverwaltung zu bauen, dass im Grunde für diese 3(durchaus mehr) Bereiche universell einsetzbar ist/sein soll. Vielleicht werde ich eines Tages Microsoft/SAP etc vom Markt verdrängen ;-)

Projekt aufbauen und selbständig werden, bist Du dabei? :-)
Viele Grüsse
Golem



Bild


Betrifft: AW: Hallo Hans!
von: Hans W. Hofmann
Geschrieben am: 11.10.2003 20:33:38

Ich spreche von unserer info Adresse und meine TSP-Dll ist C++!
Ich bin wieder an meinem Rechner, und kann auf meine Datenbank zugreifen.
Also alles was es in komprimierter Form zu den XL interna gibt findest Du im XL-SDK97. bei MS oder z.B. unter
http://www.jens-thiel.de/static/libXLL/
zu downloaden. Auch das Makro4-Handbuch ist dabei.
Vielleicht würde Dir ja ein C++Addin (XLA) mit einigen wenigen Tabellenfunktionen reichen. Leider setzt die Technik auf dem API for Microsoft Excel auf und das ist 97 stehen geblieben (viel C-Code und wenig C++), also entsprechend schwierig zu handeln.


Gruß HW


Bild


Betrifft: Super Bsp! Danke
von: golem
Geschrieben am: 10.10.2003 10:14:21




 Bild

Beiträge aus den Excel-Beispielen zum Thema " zeile ausblenden"