Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1076to1080
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
Inhaltsverzeichnis

Fragen beantworten

Fragen beantworten
03.06.2009 10:19:41
alifa
Hier einige Antworten,
1. Meine Aussagen waren tatsächlich widersprüchlich und ungenau. Mein Makro, das ich beifüge klärt einiges.
2. Das mit der Zahl 7 ist richtig
3. Das war mein Fehler!
4. Das Problem mit dem Divisionsskelett ist gelöst. Das Makro liegt vor im vorigen Thread.
5. Da habe ich etwas dazu gelernt
6. Das stimmt!
Diese Antworten sind im Zusammenhang mit "Problem mit VBA lösen".

Sub Zahlenpool() 'Ergebnis:in 0,14 s
Dim a(9) As Byte, i As Byte, t As Single
For i = 3 To 9
a(i) = i
Next i
t = Timer
Call Permutation(a, 3, 9)
MsgBox "Fertig nach " & Round(Timer - t, 2) & " Sekunden"
End Sub



Sub Permutation(ByVal a, k As Byte, n As Byte)
Dim i As Byte, x As Byte
If k = n Then
Call Auswerten(a)
Else
For i = k To n
x = a(i)
a(i) = a(k)
a(k) = x
Call Permutation(a, k + 1, n)
Next
End If
End Sub



Sub Auswerten(ByVal a)
Dim m&, n&, o%, p%, q%, r%, s%, v%, z%
m = Abs(a(3) - a(4))
n = Abs(a(4) - a(5))
o = a(5) - 1
p = a(6) - 1
q = Abs(a(6) - a(7))
r = Abs(a(5) - a(8))
s = Abs(a(8) - a(9))
v = a(4) - 2
If m  n And m  o And m  p And m  q And m  r And m  s And m  v And _
n  o And n  p And n  q And n  r And n  s And r  v And _
o  p And o  q And o  r And o  s And o  v And _
p  q And p  r And q  s And q  v And _
q  r And q  s And q  v And _
r  s And r  v And _
s  v Then
Cells(z + 1, 1) = a(3)
Cells(z + 1, 2) = a(4)
Cells(z + 1, 3) = a(5)
Cells(z + 1, 4) = a(6)
Cells(z + 1, 5) = a(7)
Cells(z + 1, 6) = a(8)
Cells(z + 1, 7) = a(9)
End If
End Sub


Gruß, Erhard

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schön ! - Antworten auf welchen Frage ?
03.06.2009 10:50:40
NoNet
Hallo Erhard,
schön, dass Du hier selbst einige Fragen beantwortest.
Aber auf welchen Thread beziehst Du Dich (bitte Link einfügen).
Es hat wohl kaum jemand Lust (zumindest ich nicht ;-), nach Deinem Thread zu suchen.
Danke, Gruß NoNet
AW: Na ja...
03.06.2009 14:12:39
Erich
Hi Erhard,
gut, dass Mike eine Verbindung zum alten Thread geschaffen hat. NoNets Kommentar kannst du verstehen, oder?
Das hatte ich dazu geschrieben:
"Du könntest einen neuen Thread eröffnen, am besten mit einem Link auf den alten Thread."
Obwohl ich da ja nun einigermaßen "drin" bin: Auch für mich ist kaum durchschaubar,
worauf sich deine nummerierten Antworten jeweils beziehen. Sei's drum...
An deinem Makro habe ich nun gesehen, was die Aufgabe wirklich ist/war.
Es geht um Permutationen der Zahlen von 3 bis 9. (Da können dann schon keine Gleichen auftreten.)
Dass m, n, ... größer als 0 und kleiner als 9 sein sollen, ist keine Bedingung, sondern ohnehin erfüllt.
Die wesentliche (und von dir bisher nicht erwähnte) Bedingung ist, dass im Pool M keine Ziffer doppelt auftreten darf.
In "Auswerten" gibt es noch Korrekturbedarf:

n  o And n  p And n  q And n  r And n  s And r  v And _
o  p And o  q And o  r And o  s And o  v And _
p  q And p  r And q  s And q  v And _

solltest du ersetzen durch


n  o And n  p And n  q And n  r And n  s And n  v And _
o  p And o  q And o  r And o  s And o  v And _
p  q And p  r And p  s And p  v And _

Außerdem kommt in "Auswerten" die Variable z vor, ohne dass sie je belegt würde.
Als Integer ist sie dann immer 0, geschrieben wird mmer in Zeile z+1=1, auch, wenn es mehrere Ergebnisse gäbe.
Hier meine Version:


Option Explicit
Dim z As Long                       ' z ist global
Sub Zahlenpool() 'Ergebnis:in 0,14 s
Dim a(9) As Byte, i As Byte, t As Single
z = 0
For i = 3 To 9
a(i) = i
Next i
t = Timer
Call Permutation(a, 3, 9)
MsgBox "Fertig nach " & Round(Timer - t, 2) & " Sekunden"
End Sub
Sub Permutation(ByVal a, k As Byte, n As Byte)
Dim i As Byte, x As Byte
If k = n Then
Call Auswerten(a)
Else
For i = k To n
x = a(i)
a(i) = a(k)
a(k) = x
Call Permutation(a, k + 1, n)
Next
End If
End Sub
Sub Auswerten(ByVal a)
Dim m&, n&, o%, p%, q%, r%, s%, v% ' z ist global
m = Abs(a(3) - a(4))
n = Abs(a(4) - a(5))
o = a(5) - 1
p = a(6) - 1
q = Abs(a(6) - a(7))
r = Abs(a(5) - a(8))
s = Abs(a(8) - a(9))
v = a(4) - 2
If m  n And m  o And m  p And m  q And m  r And m  s And m  v And _
n  o And n  p And n  q And n  r And n  s And n  v And _
o  p And o  q And o  r And o  s And o  v And _
p  q And p  r And p  s And p  v And _
q  r And q  s And q  v And _
r  s And r  v And _
s  v Then
z = z + 1                        ' Zeilennummer hochzählen
Cells(z, 1) = a(3)
Cells(z, 2) = a(4)
Cells(z, 3) = a(5)
Cells(z, 4) = a(6)
Cells(z, 5) = a(7)
Cells(z, 6) = a(8)
Cells(z, 7) = a(9)
Cells(z, 9) = m
Cells(z, 10) = n
Cells(z, 11) = o
Cells(z, 12) = p
Cells(z, 13) = q
Cells(z, 14) = r
Cells(z, 15) = s
Cells(z, 16) = v
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Aufgabe mit VBA lösen
04.06.2009 07:43:29
alifa
Heute ein Neues. Ich kriege das nicht hin (wegen der großen Zahlen?) Gesucht eine 10-stellige Zahl, teilbar durch sieben. Alle Ziffern von 0 bis 9 sind je ein Mal darin enthalten. Diese Zahl soll enthalten: Eine einstellige, eine zweistellige, eine dreistellige.............neunstellige Zahl, die alle durch 7 teilbar sind. Z.B.
1357902468 ist durch 7 teilbar. 7 , 35, 357 auch. Leider gibt es keine 4-stellige, die durch 7 teilbar wäre. Vielleicht etwas für VBA Freunde. Bis jetzt kriegte ich das Makro nicht hin.
Gruß, Erhard
AW: Aufgabe mit VBA lösen
04.06.2009 08:47:46
Erich
Hi, (eine kurze Anrede wäre nett) gewesen)
eigentlich nichts Neues heute: Nach wie vor scheinst du wenig vom Antworten auf meine Beiträge zu halten,
dafür umso mehr vom Stellen immer neuer Aufgaben.
Woher kommt diese neue Aufgabe? (Dies ist eine Frage, um deren Beantwortung ich dich bitte.)
Mir erscheint sie unlösbar, sinnlos, keinesfalls ein Makro wert.
Schau dir das mal an:
 ABCDE
1 ABCDEFGHIJ 10ABCDEFGHIJ ist durch 7 teilbar
2     
37_BCDEFGHIJ ABCDEFGHI_79BCDEFGHIJ oder ABCDEFGHI ist durch 7 teilbar
4     
57_7_CDEFGHIJ7_BCDEFGHI_7ABCDEFGH_7_78CDEFGHIJ oder BCDEFGHI oder ABCDEFGH ist durch 7 teilbar

ABCDEFGHIJ soll (durch 7) teilbar sein.
In Zeile 3 stehen die beiden 9stelligen Teilzahlen, von denen mindestens eine auch teilbar sein soll.
Dann muss auch die jeweils nicht verwendete Ziffer ( A oder J) durch 7 teilbar, also = 7 sein.
In Zeile 5 stehen die drei 8stelligen Teilzahlen, von denen mindestens eine auch teilbar sein soll.
Dann muss auch die jeweils nicht verwendete Ziffer durch 7 teilbar, also = 7 sein.
Und schon haben wir die Ziffer 7 doppelt - Ende der Fahnenstange.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Aufgabe mit VBA lösen
04.06.2009 09:35:28
alifa
Hallo Erich,
bis jetzt habe ich alle deine Fragen beantworten können und das auch getan. Siehe meine Makros. das Bild mit Divisionsskelett, die Sinnfrage und alle anderen auch. Mein letztes Makro hast du verbessert. Anerkennung! Mit deinem heutigen Beitrag liegst du leider völlig daneben. In Zeile 5 bleiben 2 Ziffern (10-8) und die können sehr wohl auch durch 7 teilbar sein. Ich habe stundenlang versucht, für dieses Problem selbst ein Makro zu schreiben. Nicht das ich vergesse: Diese Aufgabe habe ich im Internet gefunden, nähere Angaben möchte ich nicht machen. Mir ist das Makro viel wichtiger, als die Lösung und ich meine, die Aufgabe ist allemal ein Makro wert, weil sie weder sinnlos, noch unlösbar ist.
Gruß aus dem Oberbergischen, Erhard
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige