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

For intZ = 0 To intZ - 1 und intZ läuft hoch?

For intZ = 0 To intZ - 1 und intZ läuft hoch?
21.12.2005 05:46:12
Reinhard
Hallo Wissende,
bin sehr ratlos,
Sub tt()
For intZ = 0 To intZ - 1
MsgBox intZ
Next intZ
End Sub

Da passiert genau was ich glaubte zu wissen, nämlich nicht viel bis gar nichts.
Aber hier wird die intZ-Schleife mehrfach ausgeführt, also intZ läuft erst bis 13, dann bis ca. 7 usw. !?
    With Sheets("Datenbank")
For Each rng In .Range(rngSuch.Address)
For intZ = 0 To intZ - 1
If rng = myarr(0, intZ) And rng.Offset(0, 1) = myarr(1, intZ) Then _
rng.Offset(0, 17) = rng.Offset(0, 17) - myarr(2, intZ)
Next
Next
End With

Codeteil gehört zum nachfolgenden Code, der in der noch offenen Frage: https://www.herber.de/forum/messages/710695.html in der hochgeladenen Datei: https://www.herber.de/bbs/user/29426.xls steht. Im Originalcode kommen Fehlermeldungen, die habe ich korrigiert im nachfolgendn Code.
Gruß
Reinhard
Public lngSchlussDatenbank As Long

Sub t()
Dim lzeileS As Variant, lZeileE As Variant
Dim rng As Range, ranrngSuch As Range, rngErg As Range
Dim myarr
Dim intZ As Integer
With Sheets("Datenbank")
'Suchbereich in Fixwerte umwandeln
lngSchlussDatenbank = Range("G65536").End(xlUp).Offset(0, 0).Row
Range("A3:A" & lngSchlussDatenbank).Copy
Range("A3:A" & lngSchlussDatenbank).PasteSpecial Paste:=xlValues
lzeileS = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rngSuch = Range("A3:A" & lzeileS)
End With
With Sheets("Abrechnung")
lZeileE = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rngErg = Range("A4:A" & lZeileE)
ReDim myarr(2, lZeileE)
For Each rng In .Range(rngErg.Address)
myarr(0, intZ) = rng
myarr(1, intZ) = rng.Offset(0, 1)
myarr(2, intZ) = rng.Offset(0, 3)
intZ = intZ + 1
Next
End With
With Sheets("Datenbank")
For Each rng In .Range(rngSuch.Address)
For intZ = 0 To intZ - 1
If rng = myarr(0, intZ) And rng.Offset(0, 1) = myarr(1, intZ) Then _
rng.Offset(0, 17) = rng.Offset(0, 17) - myarr(2, intZ)
'rng.Offset(0, 2) = myarr(2, intZ)
'Wenn du willst das die vorhandenen Werte addiert werden sollen, dann änder die obere 'Zeile in:
'                   rng.offset(0,2) = rng.offset(0,2) + myarr(2,intz)
Next
Next
End With
End Sub
Sub Umwandlung()
Windows("29426.xls").Activate
Sheets("Datenbank").Activate
lngSchlussDatenbank = Range("G65536").End(xlUp).Row
ActiveCell.FormulaLocal = "=(WENN($G3>0;WERT($G3&TEXT($H3;""000""));))"
Range("A3").AutoFill Destination:=Range("A3:A" & lngSchlussDatenbank), Type:=xlFillDefault
End Sub
Sub tt()
For intZ = 0 To intZ - 1
MsgBox intZ
Next intZ
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For intZ = 0 To intZ - 1 und intZ läuft hoch?
21.12.2005 09:14:24
MichaV
Hallo,
was soll da passieren?
intZ=0, For x=0 to 0-1 ist immer erfüllt.
Du sagst: Zähle den Zähler so lange um 1 hoch, bis er um 1 kleiner ist als der Zähler.
Das ist immer erfüllt, die Zählschleife wird garnicht erst begonnen.
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: For intZ = 0 To intZ - 1 und intZ läuft hoch?
21.12.2005 22:22:29
Reinhard
Hallo Micha,
deshalb verstehe ich ja nicht warum die Zählschleife:

For intZ = 0 To intZ - 1
If rng = myarr(0, intZ) And rng.Offset(0, 1) = myarr(1, intZ) Then _
rng.Offset(0, 17) = rng.Offset(0, 17) - myarr(2, intZ)
Next

durchlaufen wird, widerspricht völlig meiner Logik.
Ich sehe es ja so wie du :-)
Ich habe das mehrmals unbläubig getestet, die intZ Schleife wird mehrmals durchlaufen und jedesmal (pro rng mit unterschiedlichem Endwert für intZ) wird intZ um eins erhöht. warum, wieso weshalb?
Gruß
Reinhard
Anzeige
AW: For intZ = 0 To intZ - 1 und intZ läuft hoch?
21.12.2005 22:41:27
MichaV
Hallo,
weil da intZ nicht 0 ist, denn in der Zeile

myarr(2, intZ) = rng.Offset(0, 3)
intZ = intZ + 1
Next

wird intZ irgendein Wert zugewiesen. Deine Zählschleife ist dann:
intZ=5 (mal angenommen), For intZ=0 to 5-1 , die Schleife wird also 4x durchlaufen.
In Deiner tt-Sub ist intZ aber leer, also 0.
Gruß- Micha
PS: Rückmeldung wäre nett.
Mist eben 1:0 für Bayern .
21.12.2005 22:55:11
Reinhard
Danke dir wiedermal Mischa,
ich hätte noch weitere Stunden gebannt auf den Code schauen können...
... und das Wesentliche übersehen :-(
Gruß
Reinhard
Ja, ich musste auch grade kotzen
21.12.2005 23:12:09
MichaV
Hallo,
Du sagst: Zähle den Zähler so lange um 1 hoch, bis er um 1 kleiner ist als der Zähler.
Das ist immer erfüllt, die Zählschleife wird garnicht erst begonnen.

..ich hätte mich ja auch gleich besser ausdrücken können ;o) Dachte, Dein Konstrukt geht aus Prinzip nicht. Es geht aber nur nicht, wenn intZ kleiner ist als 1.
Gruß- Micha
Anzeige
zurück zu Excel sonst wird hier lang, so Threadmäß
21.12.2005 23:58:43
Reinhard
Hallo Micha,
da ich noch nie so ein Konstrukt sah kam ich gar nicht auf die Idee dass man einer Laufvariablen vorher einen Wert zuweist. Wieder was gelernt.
Gruß
Reinhard
...und wir verlieren gegen St.Pauli- wieder kotzen
22.12.2005 00:11:42
MichaV
Hallo,
was denkst Du, was For i= 0 to 10 bedeutet? ;o)
Gruß- Micha
? ups, ich dachte St. Pauli hätte jetzt den Auftra
22.12.2005 00:33:09
Reinhard
Hallo Micha,
For i= 0 to 10 ist mir nahezu komplett klar, aber dass
For O= 1 to O-1
funktioniert, irritierte mich halt bis zu deiner Auflösung :-)
Gruß
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige