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

vba-code nicht voll ständig

vba-code nicht voll ständig
10.10.2004 18:09:52
yusuf
hallo
ich zeige euch hier ein code der die lotto möglichkeiten einzeln aufführt. mein problem ist aber das es von spalte a - f ganz runter rechnet (also eine zahl pro spalte) und hört natürlicher weise bei 65500 auf. ich will aber das es dann auf spalte h - m springt und weiter rechnet und so weiter und so weiter bis die ganze tabelle voll wird. könnt ihr mir bitte helfen.
hier der code
Dim anzahl As Integer
Dim zeile As Long

Sub kombin()
Dim a() As Byte
Application.ScreenUpdating = False
zahl = 49 'z.B. 6 aus zahl
anzahl = InputBox("Wieviel Zahlen?") * 1
ReDim a(anzahl - 1)
f = InputBox("Führende Zahl") * 1
zeile = 1 'Ausgabe beginnt in Zeile 1
'Berechnung Anzahl der Kombinationen zur Info
o = 1
u1 = 1
u2 = 1
n = zahl - f + 1
k = anzahl
For i = 1 To n
o = o * i
Next
For i = 1 To n - k
u1 = u1 * i
Next
For i = 1 To k
u2 = u2 * i
Next
MsgBox ("es gibt " & o / u1 / u2 & " Kombinationen")
'weiter mit Ausgabe
wieviel = 65500 'max 65500 Zahlenreihen wegen Blattlänge
For j = 0 To anzahl - 1
If j = 0 Then
a(j) = f
Else: a(j) = a(j - 1) + 1
End If
Next
ausgabe (a)
j = 1
Do While j < wieviel
s = anzahl - 1
If a(s) < zahl Then
a(s) = a(s) + 1
Else
s = anzahl - 1
Do
s = s - 1
If s = -1 Then Exit Sub
Loop Until a(s) < zahl And a(s) + anzahl - s <= zahl
a(s) = a(s) + 1
For i = s + 1 To anzahl - 1
a(i) = a(i - 1) + 1
Next
End If
ausgabe (a)
j = j + 1
Loop
Application.ScreenUpdating = True
End Sub


Sub ausgabe(a)
For i = 0 To anzahl - 1
Cells(zeile, i + 1) = a(i)
Next
zeile = zeile + 1
End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
kann mir denn keiner helfen
yusuf
man könnte doch, hoffe ich dem existierenden code was anhängen damit es in die nächsten zeilen springt oder?
mfg
yusuf
OT kann mir denn keiner helfen
PeterW
Hallo Yusuf,
du hast auf K.Rolas Lösung nach 18 Stunden geantwortet und im selben Thread eine Nachfrage gestellt. Warte doch bitte, bis du dort eine Antwort erhältst, auch wenn es mal ein paar Minuten länger dauert. Es ist immerhin Wochenende.
Gruß
Peter
AW: OT kann mir denn keiner helfen
yusuf
ich weiß das war dumm aber als ich die hoffnung aufgegeben habe, dachte ich, ich probiere es noch mal weil ich nicht gedacht hätte das rola mir wieder antwortet
mfg
yusuf
Lottokombinationen
Reinhard
Hi Yusuf,

Dim anzahl As Integer
Dim zeile As Long
Dim spalte As Integer
Sub kombin()
Dim a() As Byte
spalte = 0
Application.ScreenUpdating = False
zahl = 49 'z.B. 6 aus zahl
anzahl = InputBox("Wieviel Zahlen?") * 1
ReDim a(anzahl - 1)
f = InputBox("Führende Zahl") * 1
zeile = 1 'Ausgabe beginnt in Zeile 1
'Berechnung Anzahl der Kombinationen zur Info
o = 1
u1 = 1
u2 = 1
n = zahl - f + 1
k = anzahl
For i = 1 To n
o = o * i
Next
For i = 1 To n - k
u1 = u1 * i
Next
For i = 1 To k
u2 = u2 * i
Next
MsgBox ("es gibt " & o / u1 / u2 & " Kombinationen")
'weiter mit Ausgabe
wieviel = 65500 'max 65500 Zahlenreihen wegen Blattlänge
For j = 0 To anzahl - 1
If j = 0 Then
a(j) = f
Else: a(j) = a(j - 1) + 1
End If
Next
ausgabe (a)
j = 1
Do While j < wieviel
s = anzahl - 1
If a(s) < zahl Then
a(s) = a(s) + 1
Else
s = anzahl - 1
Do
s = s - 1
If s = -1 Then Exit Sub
Loop Until a(s) < zahl And a(s) + anzahl - s <= zahl
a(s) = a(s) + 1
For i = s + 1 To anzahl - 1
a(i) = a(i - 1) + 1
Next
End If
ausgabe (a)
j = j + 1
Loop
Application.ScreenUpdating = True
End Sub
Sub ausgabe(a)
For i = 0 To anzahl - 1
ActiveSheet.Cells(zeile, spalte + i + 1) = a(i)
Next
zeile = zeile + 1
If zeile > 65536 Then ' 100 zum Testen
spalte = spalte + anzahl
If spalte + anzahl > 255 Then
Worksheets.Add
spalte = 0
End If
zeile = 1
End If
End Sub

Gruß
Reinhard
Anzeige
AW: Lottokombinationen
yusuf
hallo reinhard,
danke reinhard, ich werde es gleich ausprobieren und gebe dir dann bescheid.
danke, vielen dank.
mfg
yusuf
AW: Lottokombinationen
yusuf
hallo reinhard,
irgend was ist falsch, der ganze ablauf hört genau bei 65500 und springt nicht rüber in die nächste spalte. bitte hilf mir
mfg
yusuf
irgend wie klappt es nicht
yusuf
irgendwie will es nicht klappen, ich habe es paar mal versucht aber vergeblich. bis 65500 läuft es super aber dann springt es nicht in die nächste spalte.
AW: irgend wie klappt es nicht
Reinhard
Hi Yusuf,
bei mir läuft das fehlerfrei ab. Kopiere den nachstehenden Code komplett und lass ihn laufen, er funktioniert.
Natürlich habe ich nach der vierten Zusatztabelle abebrochen, aber seh da keinen Fehler
Es wird sauber im Bereich A65530:IV6536 gefüllt
Oder nimm diese Datei:
https://www.herber.de/bbs/user/11923.xls
In xl2000 darf long 2 Milliarden oder noch mehr werden, Zeile ist mit long definiert, wie gross darf den long werden xc8.0?
Gruß
Reinhard
Dim anzahl As Integer
Dim zeile As Long
Dim spalte As Integer
Sub kombin()
Dim a() As Byte
spalte = 0
Application.ScreenUpdating = False
zahl = 49 'z.B. 6 aus zahl
anzahl = InputBox("Wieviel Zahlen?") * 1
ReDim a(anzahl - 1)
f = InputBox("Führende Zahl") * 1
zeile = 65530 'Ausgabe beginnt in Zeile 1
'Berechnung Anzahl der Kombinationen zur Info
o = 1
u1 = 1
u2 = 1
n = zahl - f + 1
k = anzahl
For i = 1 To n
o = o * i
Next
For i = 1 To n - k
u1 = u1 * i
Next
For i = 1 To k
u2 = u2 * i
Next
MsgBox ("es gibt " & o / u1 / u2 & " Kombinationen")
'weiter mit Ausgabe
wieviel = 65500 'max 65500 Zahlenreihen wegen Blattlänge
For j = 0 To anzahl - 1
If j = 0 Then
a(j) = f
Else: a(j) = a(j - 1) + 1
End If
Next
ausgabe (a)
j = 1
Do While j < wieviel
s = anzahl - 1
If a(s) < zahl Then
a(s) = a(s) + 1
Else
s = anzahl - 1
Do
s = s - 1
If s = -1 Then Exit Sub
Loop Until a(s) < zahl And a(s) + anzahl - s <= zahl
a(s) = a(s) + 1
For i = s + 1 To anzahl - 1
a(i) = a(i - 1) + 1
Next
End If
ausgabe (a)
j = j + 1
Loop
Application.ScreenUpdating = True
End Sub
Sub ausgabe(a)
For i = 0 To anzahl - 1
ActiveSheet.Cells(zeile, spalte + i + 1) = a(i)
Next
zeile = zeile + 1
If zeile > 65536 Then ' 100 zum Testen
spalte = spalte + anzahl
If spalte + anzahl > 255 Then
Worksheets.Add
spalte = 0
End If
zeile = 65530
End If
End Sub

Anzeige
225 leere tabellen
yusuf
ich habe 225 leere tabellen mit dem code bekommen. irgend etwas mache ich falsch, weil wenn es bei dir klappt warum bei mir nicht.
AW: 225 leere tabellen
Reinhard
Hi Jusuf, die sind nicht leer, schau dir sie mal unten an, Zeile 65536.
Gruß
Reinhard
AW: 225 leere tabellen
yusuf
aha, aber was ich nicht verstehe warum sind die oberen 65500 jetzt leer
AW: 225 leere tabellen
Reinhard
Hi Yusuf,
beim testen fülle ich doch nicht 13 Millionen Zellen?
deshalb sagte ich dem Makro im Code (Zeile=65530), nur in den Zeilen von 65530 bis 65536um zu prüfen ob spaltenwechsel und Tabellenerzeugen korrekt funktioniert.
Gruß
Reinhard
Dim anzahl As Integer
Dim zeile As Long
Dim spalte As Integer

Sub kombin()
Dim a() As Byte
spalte = 0
Application.ScreenUpdating = False
zahl = 49 'z.B. 6 aus zahl
anzahl = InputBox("Wieviel Zahlen?") * 1
ReDim a(anzahl - 1)
f = InputBox("Führende Zahl") * 1
zeile = 1 'Ausgabe beginnt in Zeile 1
'Berechnung Anzahl der Kombinationen zur Info
o = 1
u1 = 1
u2 = 1
n = zahl - f + 1
k = anzahl
For i = 1 To n
o = o * i
Next
For i = 1 To n - k
u1 = u1 * i
Next
For i = 1 To k
u2 = u2 * i
Next
MsgBox ("es gibt " & o / u1 / u2 & " Kombinationen")
'weiter mit Ausgabe
wieviel = 65500 'max 65500 Zahlenreihen wegen Blattlänge
For j = 0 To anzahl - 1
If j = 0 Then
a(j) = f
Else: a(j) = a(j - 1) + 1
End If
Next
ausgabe (a)
j = 1
Do While j < wieviel
s = anzahl - 1
If a(s) < zahl Then
a(s) = a(s) + 1
Else
s = anzahl - 1
Do
s = s - 1
If s = -1 Then Exit Sub
Loop Until a(s) < zahl And a(s) + anzahl - s <= zahl
a(s) = a(s) + 1
For i = s + 1 To anzahl - 1
a(i) = a(i - 1) + 1
Next
End If
ausgabe (a)
j = j + 1
Loop
Application.ScreenUpdating = True
End Sub


Sub ausgabe(a)
For i = 0 To anzahl - 1
ActiveSheet.Cells(zeile, spalte + i + 1) = a(i)
Next
zeile = zeile + 1
If zeile > 65536 Then ' 100 zum Testen
spalte = spalte + anzahl
If spalte + anzahl > 255 Then
Worksheets.Add
spalte = 0
End If
zeile = 1
End If
End Sub

Anzeige
was muß ich am code ändern
yusuf
du entschuldige aber jetzt habe ich den letzten code her genommen. das hatte ich auch schon gemacht. kannst du es für mich mal ausprobieren, dauert nicht lange weil es jetzt zeile 1 anfängt und bei 65500 aufhört und springt nicht rüber wie bei deinem test vorgang
was muß ich am code ändern
yusuf
du entschuldige aber jetzt habe ich den letzten code her genommen. das hatte ich auch schon gemacht. kannst du es für mich mal ausprobieren, dauert nicht lange weil es jetzt zeile 1 anfängt und bei 65500 aufhört und springt nicht rüber wie bei deinem test vorgang
AW: 225 leere tabellen
Ramses
Hallo Reinhard
da ist ein Logikfehler drin :-)
Es werden NIE mehr als 65000 Zeilen generiert.
Do While j im zweiten Makro

Sub ausgabe(a)
For i = 0 To anzahl - 1
ActiveSheet.Cells(zeile, spalte + i + 1) = a(i)
Next
zeile = zeile + 1
If zeile > 65536 Then ' 100 zum Testen
spalte = spalte + anzahl
If spalte + anzahl > 255 Then
Worksheets.Add
spalte = 0
End If
zeile = 1
End If
End Sub

prüfst du zwar ob die Spaltenanzahl überschritten wird, aber der Zeilenzähler wird nicht zurückgesetzt, deshalb steigt das Makro bei
Do While j aus, weil in dieser Situation j > wieviel ist :-)
Ein Workaround wäre
Public StartNew As Boolean
in das Makro
Sub Ausgabe(a) diese Prüfung
If zeile > 65500 Then ' 10000000 zum Testen
spalte = spalte + anzahl
If spalte + anzahl > 255 Then
Worksheets.Add
spalte = 0
End If
'Beginne mit neuer Zeilenzahl
StartNew = True
zeile = 1

End If
End Sub
und in das andere Makro
End If
ausgabe (a)
If StartNew = True Then
j = 1
Else
j = j + 1
End If

Loop
den Rest habe ich noch nicht getestet.
Grundsätzlich würde ich aber DRINGENDST eine saubere Deklaration der Variablen mit aussagekräftigen Namen empfehlen. Der Code ist kaum zu lesen, weil ständig neue Variablen auftauchen und man nicht weiss wozu die gut sein sollen.
Gruss Rainer
Anzeige
AW: 225 leere tabellen
Reinhard
Hallo Rainer,
danke dir, habe nur auf die ausgabe()-Sub geachtet und das mit wieviel glatt übersehen :-)
Und natürlich nie solange laufen lassen, wozu brauch ich 214 Tabellenblätter.
Gruß
Reinhard
danke
yusuf
hallo zusammen,
ich bin gerade von der arbeit zurück gekommen und habe gehofft das jemand mir geantwortet hat. Vielen, vielen dank, das war echt nett von euch.
ich lieeeeeeeeeeeeeeebe euch.
PS: hoffentlich liest ihr das noch einmal und sagt mir wo genau ich das code einsetzen soll. ich mache sonst bestimmt den ganzen code unbrauchbar
mfg
yusuf
AW: Lottokombinationen
Milorad
bitte geben sie mir alle möglichen lotto kombinationen , zahlen von 1-49
lotto aus 6-49er
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige