Dieser Code treibt mich noch in den Wahnsinn

Hallo Leute,

ich bin ja bemüht,zu lernen und zu verstehen.Wenn aber Magie mit im Spiel ist,kapituliere ich.
Ich liste jetzt mal meine einzelnen Codes auf und am Ende erklär ich mal mein Problem.

Modul 1:

Function Alle(Was As String, ByRef Zelle As Range) As Boolean
Dim intI As Integer, Wert As Integer, intVergleich As Integer
Select Case Was
 Case "QS-Solo"
 intVergleich = Tabelle1.Cells(8, Zelle.Column + 1).Value
 For intI = 1 To Len(Zelle.Value)
 Wert = Wert + CInt(Mid(Zelle.Value, intI, 1))
 Next
 Alle = IIf(Wert = intVergleich, True, False)
 Case "Durch-Solo"
 intVergleich = Tabelle1.Cells(8, Zelle.Column + 5).Value
 On Error Resume Next
 Alle = IIf(Zelle.Value Mod intVergleich = 0, True, False)
 On Error GoTo 0
 Case "Prim-Solo"
 For intI = 2 To Int(Sqr(Zelle.Value))
 If Zelle.Value Mod intI = 0 Then Exit For
 Next intI
 Alle = intI \> Int(Sqr(Zelle.Value))
 Case Else
 'nix
End Select
End Function

Anmerkung: Alle 3 „Case-Anweisungen“ klappen einwandfrei

Sub Berechne(strWas As String, strWo As String)
Dim strZ As String, ZeiS As Long, ZeiP As Long, Zei As Long
Dim rngWo As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Worksheets("Tabbi")
 Set rngWo = .Range(strWo)
 rngWo.Offset(0, 1).Resize(154, 3).ClearContents
 If strWas = "Nix machen" Then GoTo Ende
 For Zei = 0 To 150 Step 5
 If Application.Sum(rngWo.Offset(Zei, 0).Resize(4, 1)) 0 Then
 For ZeiS = 0 To 3 Step 1
 If rngWo.Offset(Zei + ZeiS, 0) "" Then
 If Alle(strWas, rngWo.Offset(Zei + ZeiS, 0)) = True Then
 rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 5) 'rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 3)
 End If
 End If
 Next ZeiS
 End If
 Next Zei
End With
Ende:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Tabelle 1:

Private Sub Worksheet\_Change(ByVal Target As Range)
Dim OK As Boolean, N As Integer, Wert, Auswahl As String
On Error GoTo hell
If Target.Count \> 1 Then Exit Sub
If Target.Row \> 166 Or Target.Row 5 Then
 For N = 6 To 104 Step 7
 If Target.Column = N Then
 OK = True
 Exit For
 End If
 Next N
Else
 OK = True
End If
If OK = False Then Exit Sub
If Target.Value = "" And Target.Column = 5 Then Exit Sub 'Von nier
If Target.Column = 5 Then
 If Target.Value = "" Then Exit Sub
 If Application.CountIf(Range("E13:E166"), Target.Value) \> 1 Then
 Application.EnableEvents = False
 MsgBox Target.Value & " ist doppelt vorhanden"
 Target.ClearContents
 Target.Select
 Application.EnableEvents = True
 End If 'bis hier ist der Teil beinahe identisch mit dem auskommentierten weiter unten
Else
 Application.EnableEvents = False
 Auswahl = Tabelle1.OLEObjects("Runde" & CInt((Target.Column + 1) / 7)).Object.Value
 If Auswahl "Nix machen" Then
 Call Berechne(Auswahl, Cells(13, Target.Column).Address(0, 0))
 End If
End If
hell:
If Err.Number 0 Then MsgBox Err.Number & vbCr & Err.Description
Application.EnableEvents = True
End Sub




Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
Dim Ber As Range, Index As Integer, i, Wert, N As Integer
If Target.Count 1 Then Exit Sub
If Target.Row 166 Then Exit Sub
For N = 1 To 15 'Anzahl der Runden
 If Not Ber Is Nothing Then
 Set Ber = Application.Union(Ber, Columns(6 + (N - 1) \* 7))
 Else
 Set Ber = Columns(6 + (N - 1) \* 7)
 End If
Next N
If Intersect(Target, Ber) Is Nothing Then Exit Sub
Wert = Application.Sum(Target.Offset(-(Target.Row + 2) Mod 5, 0).Resize(4, 1))
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Cells(2, Target.Column + 1).Value = Wert 'Range(Ber(Index) & "2").Value = Wert Diese Zeile muss m.E. abgeändert werden
Cells(3, Target.Column + 1).Value = "Tisch " & Cells(Target.Offset(-(Target.Row + 2) Mod 5).Row, 4).Value 'Range(Ber(Index) & "3").Value = "Tisch " & Cells(Target.Offset(-(Target.Row + 2) Mod 5).Row, 4).Value Diese Zeile muss m.E. abgeändert werden
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub

So,ich habe mittlerweile gelernt,dass es die Funktion „Primzahl“ als vordefinierte Funktion gibt,Quersumme und Division nicht,sondern nur als benutzerdefinierte.

Wenn ich nun aber die benutzerdefinierte Funktion von Quersumme auskommentiere,die sogar nachträglich erst hinzugekommen ist,und die Case-Anweisung QS-Solo trotzdem funktioniert,fange ich an zu verzweifeln.

Da Reinhard die gute Seele erst aus dem KH entlassen worden ist,möchte ich ihn nicht direkt damit überfallen.

Deshalb meine Frage an Euch. Wo in dem gottverdammten Code stecken die 3 Berechnungen der Case-Anweisungen „QS-Solo“,„Durch-Solo“ und „Prim-Solo“? Irgendwo müssen die doch mit qsum,prim oder dem / Strich angesprochen werden,oder mit was auch immer.

Wenn ich das gefunden habe,kann ich auch weiter nachlesen.Achso,ist es normal, dass ich diese Codezeilen nicht mit der F8-Taste Zeile für Zeile abarbeiten kann.Es kommt immer nur ein Ping.Bei anderen Teilen klappt das wunderbar.

Hier könnt ihr Euch die Tabbi mal ansehen,wer mag
http://www.file-upload.net/download-7285085/Meine-Te…

LG Frank

Hallo Leute,

Hallo Frank,

ich bin ja bemüht,zu lernen und zu verstehen.Wenn aber Magie
mit im Spiel ist,kapituliere ich.

Nein, es ist keine Magie im Spiel (auch Reinhard kann nicht zaubern :wink:

So,ich habe mittlerweile gelernt,dass es die Funktion
„Primzahl“ als vordefinierte Funktion gibt,

Ich glaube, da hast du was falsches gelernt. Ich habe noch nie gehört, dass es in VBA eine Funktion „Primzahl“ gibt, die (was auch immer) mit Primzahlen macht.

Quersumme und
Division nicht,sondern nur als benutzerdefinierte.

Auch diese Funktionen gibt es im Code nicht, auch nicht als benutzer-definiert.

Wenn ich nun aber die benutzerdefinierte Funktion von
Quersumme auskommentiere,die sogar nachträglich erst
hinzugekommen ist,und die Case-Anweisung QS-Solo trotzdem
funktioniert,fange ich an zu verzweifeln.

Ich hatte dir in einem früheren Faden schon mal geschrieben, dass die Funktion qsum im Code nur von der Sub Step4 aufgerufen wird, und die wird in den „Berechnungen“ auch nicht verwendet.

Deshalb meine Frage an Euch. Wo in dem gottverdammten Code
stecken die 3 Berechnungen der Case-Anweisungen
„QS-Solo“,„Durch-Solo“ und „Prim-Solo“? Irgendwo müssen die
doch mit qsum,prim oder dem / Strich angesprochen werden,oder
mit was auch immer.

Die "Berechnungen finden alle(!) in einer einzigen Zeile statt:

rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 5)

in Sub Berechne (Modul1).
Gehe den ganzen Code mal systematisch durch:
Setze im Codebereich von Tabbelle1(Tabbi) einen Haltepunkt vor

Call Berechne(Runde1.Value, "F13")

(klick auf den grauen Balken davor).
Jetzt gehe in die Tabelle und ändere etwas im Dropdownfeld von Runde 1.
Der Code läuft an und bleibt am Haltepunkt stehen. Jetzt kannst du mit F8 weitermachen und schauen, wo der Code hinläuft und wann die „Berechnungen“ kommen.

Wenn ich das gefunden habe,kann ich auch weiter
nachlesen.Achso,ist es normal, dass ich diese Codezeilen nicht
mit der F8-Taste Zeile für Zeile abarbeiten kann.Es kommt
immer nur ein Ping.Bei anderen Teilen klappt das wunderbar.

Das ist normal. Code in einer Funktion kann nur aus einer Sub aufgerufen werden, aber nicht von Hand durchlaufen werden.

LG Frank

Gruß, Andreas

Hallo Andreas,

Ich glaube, da hast du was falsches gelernt. Ich habe noch nie
gehört, dass es in VBA eine Funktion „Primzahl“ gibt, die (was
auch immer) mit Primzahlen macht.

Dann habe ich da was verkehrt verstanden und werde mit dem Begriff IstPrim in der Formel wohl ein Makro angeschmissen haben

Quersumme und
Division nicht,sondern nur als benutzerdefinierte.
Auch diese Funktionen gibt es im Code nicht, auch nicht als
benutzer-definiert.

Mit benutzerdefiniert meine ich so etwas wie bei mir das

Public Function Qsum(ByRef x As Long) As Long
 Dim i As Integer
 For i = 1 To Len(x)
 Qsum = Qsum + Val(Mid(CStr(x), i, 1))
 Next i
End Function

Die "Berechnungen finden alle(!) in einer einzigen Zeile
statt:

rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column +
5)

Hab ich den Satansbraten endlich gefunden.Nun gehts im an den Kragen :smiley:

Der Code läuft an und bleibt am Haltepunkt stehen. Jetzt
kannst du mit F8 weitermachen und schauen, wo der Code
hinläuft und wann die „Berechnungen“ kommen.

Genauso habe ich mir das vorgestellt :smile:

Das ist normal. Code in einer Funktion kann nur aus einer Sub
aufgerufen werden, aber nicht von Hand durchlaufen werden.

Ahso,und wieder was gelernt.

Verkrieche mich nun mal wieder in mein Excel und zerlege.

Vielen vielen Dank Andreas,du hast mich vor dem Wahnsinn bewahrt :wink:

LG Frank

Hallo Andreas,

Hi Frank,

Ich glaube, da hast du was falsches gelernt. Ich habe noch nie
gehört, dass es in VBA eine Funktion „Primzahl“ gibt, die (was
auch immer) mit Primzahlen macht.

Dann habe ich da was verkehrt verstanden und werde mit dem
Begriff IstPrim in der Formel wohl ein Makro angeschmissen
haben

Sorry. Ich habe deine Mappe durchsucht, sowohl die Formeln in den Tabellen als auch den gesamten VBA Code. Eine Formel IstPrim habe ich nirgends gefunden. Könntest du mir mal sagen, wo das steht?

Danke und Gruß,
Andreas

Hallo Andreas,

in meiner Mappe steht nichts dergleichen. Das habe ich irgendwo mal vor nem Jahr oder auch zwei in einem Forum gelesen und die Beispiel-Formel in eine Zelle geschrieben. So in etwa…=Wenn(IstPrim(A1))… - das da aber irgendwo noch nen Makro war,daran kann ich mich nicht erinnern.Und als Erklärung stand da,dass Prim mittlerweile ein fester Bestandteil von Excel sei. Aber wer weiss,was ich da gelesen habe.

Habe mir diesen ganzen Code jetzt mal angeschaut,so wie du gesagt hast,und ganz ehrlich? Ich glaube ich lasse das. Bei einem Pensum von 8 Stunden täglich,brauche ich mindestens ein Jahr,um diesen Code zu verstehen. Ich habe sowohl bei QS-Solo als auch Durch-Solo ca. 180x die F8-Taste gedrückt,aber was da teilweise durchlaufen wird und warum,entbindet sich mir jeglicher Logik. Ich müsste wirklich jemanden neben mir sitzen haben,der mir das erklärt.

Auch wenn ihr hier im Forum sehr sehr nett und hilfsbereit seid,meine Fragen dazu würden das ganze Brett sprengen.Hinzu kommt noch,dass ich meine Fragen hier in schriftlicher Form nicht konkret rüber bringen kann.

Zum Beispiel zähle ich die Anschläge der F8-Taste bis das erste Ergebnis kommt. 31x bis in Zelle F13(also der ersten) eine Zahl eingetragen wird. Dazwischen springt der Code 15x zwischen diesem Bereich hin und her

For N = 6 To 104 Step 7
 If Target.Column = N Then
 OK = True
 Exit For
 End If
 Next N

15x,das sagt mir,dass Excel irgendwas in allen anderen 14 Runden sucht.
6 to 104 = F - CZ.und das immer in 7ner Schritten.Warum? Ich habe keinen blassen Schimmer. Zumindest würde das zu den Betätigungen der F8-Taste passen.

LG Frank

Hallo Andreas,

Hallo Frank,

in meiner Mappe steht nichts dergleichen. Das habe ich
irgendwo mal vor nem Jahr oder auch zwei in einem Forum
gelesen und die Beispiel-Formel in eine Zelle geschrieben. So
in etwa…=Wenn(IstPrim(A1))… - das da aber irgendwo noch
nen Makro war,daran kann ich mich nicht erinnern.Und als
Erklärung stand da,dass Prim mittlerweile ein fester
Bestandteil von Excel sei. Aber wer weiss,was ich da gelesen
habe.

Ok, das vergessen wir jetzt mal.

Habe mir diesen ganzen Code jetzt mal angeschaut,so wie du
gesagt hast,und ganz ehrlich? Ich glaube ich lasse das. Bei
einem Pensum von 8 Stunden täglich,brauche ich mindestens ein
Jahr,um diesen Code zu verstehen. Ich habe sowohl bei QS-Solo
als auch Durch-Solo ca. 180x die F8-Taste gedrückt,aber was da
teilweise durchlaufen wird und warum,entbindet sich mir
jeglicher Logik. Ich müsste wirklich jemanden neben mir sitzen
haben,der mir das erklärt.

Mein Tipp: Versuch es trotzdem weiter. Nur so lernst du dazu. Bei Schleifen, die mehrmals durchaufen werden, wirst du irgendwann verstehen, was sie tun. Dann kannst du dir bei der nächsten Zeile, die du nicht verstehts wieder einen Haltepunkt setzen. In der Knopfzeile oben gibt es den grünen Pfeil nach rechts. Der führt den Code weiter aus bis zum nächsten Haltepunkt. so kannst du dich Stück für Stück durch den Code hangeln und ihn weiter ergründen. Nur so lernst du dazu.

Zum Beispiel zähle ich die Anschläge der F8-Taste bis das
erste Ergebnis kommt. 31x bis in Zelle F13(also der ersten)
eine Zahl eingetragen wird. Dazwischen springt der Code 15x
zwischen diesem Bereich hin und her

For N = 6 To 104 Step 7
If Target.Column = N Then
OK = True
Exit For
End If
Next N

15x,das sagt mir,dass Excel irgendwas in allen anderen 14
Runden sucht.
6 to 104 = F - CZ.und das immer in 7ner Schritten.Warum? Ich
habe keinen blassen Schimmer.

Weil jede Runde aus 7 Spalten besteht. Und mit 7 Spalten weiter bist du genau in der selben Spalte der nächsten Runde.

LG Frank

Gib nicht auf und versuche zu verstehen, was der Code tut.

Gruß, Andreas

Hallo Andreas,

Mein Tipp: Versuch es trotzdem weiter. Nur so lernst du dazu.
Bei Schleifen, die mehrmals durchaufen werden, wirst du
irgendwann verstehen, was sie tun. Dann kannst du dir bei der
nächsten Zeile, die du nicht verstehts wieder einen Haltepunkt
setzen. In der Knopfzeile oben gibt es den grünen Pfeil nach
rechts. Der führt den Code weiter aus bis zum nächsten
Haltepunkt. so kannst du dich Stück für Stück durch den Code
hangeln und ihn weiter ergründen. Nur so lernst du dazu.

Du hast gut reden.Es ärgert mich ja schon nur dran zu denken,eventuell aufzugeben.Aber hier alleine zu sitzen und keinen haben den ich direkt fragen kann und der mir das sofort erklärt,das nervt mich total.

For N = 6 To 104 Step 7
If Target.Column = N Then
OK = True
Exit For
End If
Next N

Weil jede Runde aus 7 Spalten besteht. Und mit 7 Spalten
weiter bist du genau in der selben Spalte der nächsten Runde.

Das habe ich ja schon verstanden mit den 7 Spalten und das dann immer dieselbe Spalte der nächsten Runde gemeint ist(Step 7).

Warum Excel aber 15 mal zwischen der Schleife hin und her springt,dass verstehe ich nicht.Für mich heisst dass,das Excel irgendwas in allen 15 Runden abfragt bzw. überprüft. Ich seh ja am Bildschirm auch nichts,was da im diesem Moment passiert(trotz zweier Bildschirme a 22"). Das war jetzt nur bei der QS-Solo,bei Durch-Solo springt der Code dann zusätzlich noch in die Funktion RSumme(die dürfte in der hochgeladenen Mappe nicht drin sein).Das verwirrt mich total.

Gib nicht auf und versuche zu verstehen, was der Code tut.

Ich bemühe mich ja und will es ja auch verstehen,ist aber nicht einfach.

LG Frank

Grüezi Frank

Das habe ich ja schon verstanden mit den 7 Spalten und das
dann immer dieselbe Spalte der nächsten Runde gemeint ist(Step
7).

Warum Excel aber 15 mal zwischen der Schleife hin und her
springt,dass verstehe ich nicht.Für mich heisst dass,das Excel
irgendwas in allen 15 Runden abfragt bzw. überprüft. Ich seh
ja am Bildschirm auch nichts,was da im diesem Moment
passiert(trotz zweier Bildschirme a 22").

Ich versuche mal, die Zeilen mit Kommentaren zu versehen, vielleicht wirds dann einfacher für dich (der Zusamenhang fehlt zwar ein wenig, da nicht bei allen Variablen klar ist wie sie belegt sind):

'Hier beginnt die Schleife mit der Varialben N - ihr wird der Wert 6 zugewiesen und dann bei jedem weiteren Durchlauf um 7 erhöht
For N = 6 To 104 Step 7

’ Hier wird die Variable ‚Target‘ geprüft ob sie in der Spalte liege deren Wert in der Variablen N steht (also Spalte 6.13,20…)
If Target.Column = N Then

'Wenn das zutrifft, dann wird der Variable ‚OK‘ der Wert 'True zugewiesen und die Schleife wird verlassen
OK = True
Exit For
End If

'Hier gehts dann wieder zum ‚For‘-Teil der Schleife und der nächste Wert wird abgearbeitet, sofern die Schleift nicht vorher verlassen worden ist
Next N

Das war jetzt nur
bei der QS-Solo,bei Durch-Solo springt der Code dann
zusätzlich noch in die Funktion RSumme(die dürfte in der
hochgeladenen Mappe nicht drin sein).Das verwirrt mich total.

In diesem Falle wird es so sein, dass die Funktion RSumme() innerhalb der Schleife aufgerufen wird um einen Wert zu berechnen.
Daher wird diese Funktion dann in jedem Schleifendurchlauf aufgerufen.

Gib nicht auf und versuche zu verstehen, was der Code tut.

Ich bemühe mich ja und will es ja auch verstehen,ist aber
nicht einfach.

…das hat auch niemand behauptet - aber Du bist auf gutem Wege :wink:

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Guten Morgen Thomas,

zunächst habe ich mal alle hochgeladenen Mappen gelöscht und die aktuelle hier hochgeladen:

http://www.file-upload.net/download-7370279/Meine-Kn…

Ich versuche mal, die Zeilen mit Kommentaren zu versehen,
vielleicht wirds dann einfacher für dich (der Zusamenhang
fehlt zwar ein wenig, da nicht bei allen Variablen klar ist
wie sie belegt sind):

'Hier beginnt die Schleife mit der Varialben N - ihr wird der
Wert 6 zugewiesen und dann bei jedem weiteren Durchlauf um 7
erhöht
For N = 6 To 104 Step 7

’ Hier wird die Variable ‚Target‘ geprüft ob sie in der Spalte
liege deren Wert in der Variablen N steht (also Spalte
6.13,20…)
If Target.Column = N Then

'Wenn das zutrifft, dann wird der Variable ‚OK‘ der Wert 'True
zugewiesen und die Schleife wird verlassen
OK = True
Exit For
End If

'Hier gehts dann wieder zum ‚For‘-Teil der Schleife und der
nächste Wert wird abgearbeitet, sofern die Schleift nicht
vorher verlassen worden ist
Next N

Das habe ich ja soweit auch verstanden und deshalb bin ich ja so verwirrt. Eigentlich bin ich ja ein logisch denkender Mensch auch wenn die Tatsache,dass ich zähle,wie oft ich die F8-Taste drücken muss,bis was am Bildschirm passiert für Euch Experten reichlich dämlich klingen muss.

Habe jetzt nochmal im Codebereich von Tabbelle1(Tabbi) einen Haltepunkt vor „Call Berechne(Runde1.Value, „F13“)“ gesetzt,dann im Dropdown-Feld auf QS-Solo gesetzt und die F8-Taste gedrückt.

31x bis in Zelle G13 300 erscheinen(in Zelle F13 steht 191 und es soll QS 11 geprüft werden),ohne auch nur ein einziges mal die Schleife durchlaufen zu haben.Weitere 92x bis in Zelle G15 300 eingetragen werden,wobei 45x die Schleife angesprochen wird,bevor sie verlassen wird(If Target.Column = N Then,End If und Next N je 15x).

Mir als blutiger Laie und mit dem was ich bisher gelernt habe, sagt dass,obwohl wir in Runde 1 sind,prüft Excel ob die Spalten der anderen 14 Runden vorhanden sind.
Wenn ja,muss das so sein?

bei der QS-Solo,bei Durch-Solo springt der Code dann
zusätzlich noch in die Funktion RSumme.

Kurioserweise wird diese Funktion nun nicht mehr innerhalb der Schleife aufgerufen.

…das hat auch niemand behauptet - aber Du bist auf gutem
Wege :wink:

Der Weg ist aber verdammt holprig und mit vielen Stolpersteinen gesät. :wink:

LG Frank

Grüezi Frank

Das habe ich ja soweit auch verstanden und deshalb bin ich ja
so verwirrt. Eigentlich bin ich ja ein logisch denkender
Mensch auch wenn die Tatsache,dass ich zähle,wie oft ich die
F8-Taste drücken muss,bis was am Bildschirm passiert für Euch
Experten reichlich dämlich klingen muss.

Habe jetzt nochmal im Codebereich von Tabbelle1(Tabbi) einen
Haltepunkt vor „Call Berechne(Runde1.Value, „F13“)“
gesetzt,dann im Dropdown-Feld auf QS-Solo gesetzt und die
F8-Taste gedrückt.

31x bis in Zelle G13 300 erscheinen(in Zelle F13 steht 191 und
es soll QS 11 geprüft werden),ohne auch nur ein einziges mal
die Schleife durchlaufen zu haben.Weitere 92x bis in Zelle G15
300 eingetragen werden,wobei 45x die Schleife angesprochen
wird,bevor sie verlassen wird(If Target.Column = N Then,End If
und Next N je 15x).

Mir als blutiger Laie und mit dem was ich bisher gelernt habe,
sagt dass,obwohl wir in Runde 1 sind,prüft Excel ob die
Spalten der anderen 14 Runden vorhanden sind.
Wenn ja,muss das so sein?

Das kann ich so nicht beurteilen - ich weiss ja nicht mal was die einzelnen Codes tun sollen, resp. Wann welche Berechnungen wie ablaufen sollen.
Mir entzieht sich hier also die prinzipielle Logik, sodass ich dann auch nicht auf deren codemässige Umsetzung schliessen kann.

bei der QS-Solo,bei Durch-Solo springt der Code dann
zusätzlich noch in die Funktion RSumme.

Kurioserweise wird diese Funktion nun nicht mehr innerhalb der
Schleife aufgerufen.

Ja, das habe ich auch gesehen und es befremdet mich ebenso.

Aber wie gesagt, ohne die genauen mathematischen Hintergründe zu kennen und was wann wie und unter welchen Voraussetzungen ablaufen und berechnet werden soll, kann ich keine Stellung nehmen.
Möglicherweise hätte ich den Code auch anders aufgebaut.

…das hat auch niemand behauptet - aber Du bist auf gutem
Wege :wink:

Der Weg ist aber verdammt holprig und mit vielen
Stolpersteinen gesät. :wink:

…vielleicht oder wahrscheinlich ist deine Mappe hier auch etwas komplex um dir die Grundlagen anzueignen…

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Frank

Hi Thomas,

Kurioserweise wird diese Funktion nun nicht mehr innerhalb der
Schleife aufgerufen.

Ja, das habe ich auch gesehen und es befremdet mich ebenso.

Ich vermute mal das Excel sich irgendwie aufgehangen hat oder dass die Formeln nicht eingetragen waren.

Möglicherweise hätte ich den Code auch anders aufgebaut.

Das habe ich mittlerweile auch desöfteren gelesen ,dass jeder so seinen eigenen Stil beim Programmieren hat,aber jeder damit ans gleiche Ziel gelangt.

…vielleicht oder wahrscheinlich ist deine Mappe hier auch
etwas komplex um dir die Grundlagen anzueignen…

Da wirst du mit Sicherheit recht haben und ich werde mit diesem Projekt das Pferd von hinten aufzäumen,aber Bücher zu lesen ist a) total öde und b)für mich alleine nicht der effektivste Weg. Ich hab gedacht,wenn ich den Code in meiner Mappe verstehe,da ich ja weiß,was passieren soll, könnte ich darauf aufbauen und hätte die eine oder andere Grundlage.

LG Frank

Hallo Frank,

ich denke, Thomas hat Recht: Für den Anfang ist der Code in deiner Mappe recht komplex. Auch ich scheitere an der Interpretation, weil mir die Grundlagen fehlen, sprich, ich weiß nicht, was diese Berechnungen tun sollen. Solange man das nicht weiß, ist es sehr schwer, fremden Code zu analysieren.

Du sollst ja nicht nach trockenen Büchern lernen. Aber es wäre für dich bestimmt einfacher und eher zielführend, wenn du dir erst mal selber Aufagben stellst, und versuchst, sie mit VBA umzusetzten. Das bringt dich weiter, als zu versuchen, fremden Code in einem komplexen Projekt zu analysieren.
Nimm dir doch z.B. einfach mal eine ganz einfache Teilaufgabe deiner Mappe:
Gib in irgend eine Zelle eine Zahl ein und schreibe einen Code, der die Quersumme ermittelt.

Außedem kann ich nur noch mal empfehlen, einfach hier im Forum mitzulesen, was andere so für Fragen haben. Ich denke, bei der einen oder anderen Aufgabe könntest du sicher auch schon eine Lösung erstellen - einfach für dich alleine. Und dann schau halt mal, was sonst so für Antworten kommen.
Glaub mir, diese einfache Weise hilft dir schneller, als zu versuchen, den Code deiner Kniffel-Mappe zu durchschauen.

Gruß, Andreas

Hi Andreas,

auf der Grundlage deiner Erklärung habe ich ja schon meinen ersten kleinen Code selbst geschrieben.

Public Sub QsTisch()
 Dim i As Long
 For i = 13 To 166 Step 5
 If Qsum(Sheets(1).Cells(i, 6).Value + Sheets(1).Cells(i + 1, 6).Value + Sheets(1).Cells(i + 2, 6).Value + Sheets(1).Cells(i + 3, 6).Value) = Sheets(1). \_
Cells(8, 7).Value Then
 Sheets(1).Cells(i, 9).Value = Sheets(1).Cells(2, 11).Value
 End If
 Next i
End Sub

Und so hoffe ich, Schritt für Schritt weiter zu kommen und die restlichen Funktionen auch irgendwie zustande zu bringen.

LG Frank

Grüezi Andreas

auf der Grundlage deiner Erklärung habe ich ja schon meinen
ersten kleinen Code selbst geschrieben.

Kannst Du uns bitte auch noch sagen, was genau der Code bewirken soll?
Denn nur wenn wir den Hintergrund des Codes, also das was er genau macht, verstehen, können wir dir auch besser helfen.

Ich versuche einfach mal zu interpretieren…

Public Sub QsTisch()
Dim i As Long
For i = 13 To 166 Step 5

Hier gehsT Du ab Zile 13 in 5-er Schritten alle Zeilen-Blöcke durch (in nehme an das sind die einzelnen Tische)

If Qsum(Sheets(1).Cells(i, 6).Value + Sheets(1).Cells(i + 1,
6).Value + Sheets(1).Cells(i + 2, 6).Value + Sheets(1).Cells(i

  • 3, 6).Value) = Sheets(1).Cells(8, 7).Value Then

Zählst die gemachten Punkte zusammen und berechnest die Quersumme der Summe dieser 4 Werte.

Diese Quersumme vergleichst Du dann mit dem Wert der Zelle G8.
Stimmt der Wert überein, wird der Wert aus der ersten Zeile des Pblockes Spalte I in die Zelle K2 geschrieben.

Sheets(1).Cells(i, 9).Value = Sheets(1).Cells(2, 11).Value
End If
Next i

Das geht dann so weiter, bis alle Tische abgearbeitet sind.

End Sub

Was soll denn der Code genau tun - am Ende steht (bei Übeeinstimmung der Quersumme) der Wert des letzten Tisches in der genannten Zelle.

Und so hoffe ich, Schritt für Schritt weiter zu kommen un die
restlichen Funktionen auch irgendwie zustande zu bringen.

Wir unterstützen dich auch gerne dabei, aber dafür müssen wir wissen welche Berehnungen Du denn genau anstellen willst - also die mathematischen Hintergrunde und/oder Rechenregeln, die Du verwenden willst/musst.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Andreas Frank owT
.

Guten Morgen Thomas,

Kannst Du uns bitte auch noch sagen, was genau der Code
bewirken soll?
Denn nur wenn wir den Hintergrund des Codes, also das was er
genau macht, verstehen, können wir dir auch besser helfen.

Das will ich gerne tun.

Ich versuche einfach mal zu interpretieren…

Public Sub QsTisch()
Dim i As Long
For i = 13 To 166 Step 5

Hier gehsT Du ab Zile 13 in 5-er Schritten alle Zeilen-Blöcke
durch (in nehme an das sind die einzelnen Tische)

Genauso ist es.

:If Qsum(Sheets(1).Cells(i, 6).Value + Sheets(1).Cells(i + 1,


> 6).Value + Sheets(1).Cells(i + 2, 6).Value + Sheets(1).Cells(i  
> + 3, 6).Value) = Sheets(1).Cells(8, 7).Value Then

Zählst die gemachten Punkte zusammen und berechnest die
Quersumme der Summe dieser 4 Werte.

So sollte es eigentlich funktionieren.

Diese Quersumme vergleichst Du dann mit dem Wert der Zelle G8.
Stimmt der Wert überein, wird der Wert aus der ersten Zeile
des Pblockes Spalte I in die Zelle K2 geschrieben.

Nein,genau umgedreht,der Wert aus K2 wird bei Übereinstimmung in die erste Zeile der Spalte I geschrieben.

:Sheets(1).Cells(i, 9).Value = Sheets(1).Cells(2, 11).Value


> End If  
> Next i

Das geht dann so weiter, bis alle Tische abgearbeitet sind.

Richtig,und das soll dann je nach Bedarf für jede Runde geschehen,jenachdem was im Dropdown-Feld ausgewählt wird

End Sub

Was soll denn der Code genau tun - am Ende steht (bei
Übeeinstimmung der Quersumme) der Wert des letzten Tisches in
der genannten Zelle.

Eigentlich das,wie von mir beschrieben.Und das macht der Code ja auch bei mir in der Mappe
Habe das auf der Basis der Erklärung von Andreas- siehe hier
/t/was-bedeutet-der-code-zu-deutsch-und-im-einzelnen…
für den Pchen-Code entsprechend auf den Tisch angepasst(den fehler hab ich geändert)

Und so hoffe ich, Schritt für Schritt weiter zu kommen un die
restlichen Funktionen auch irgendwie zustande zu bringen.

Wir unterstützen dich auch gerne dabei, aber dafür müssen wir
wissen welche Berehnungen Du denn genau anstellen willst -
also die mathematischen Hintergrunde und/oder Rechenregeln,
die Du verwenden willst/musst.

Es geht immer um Quersumme,Primzahl und teilbar durch. Mal als Solo(jede zelle für sich),mal als Pchen(F13+F15 usw.) und mal als Tisch(F13-F16). Je nachdem,was im Dropdown-Feld steht.

LG Frank

Guten Morgen Andreas,

hat dieses „ohne weiteren Text“ irgendwas besonderes zu bedeuten?

Gruß Frank

nein,

es sollte nur ein Hinweis für Thomas sein, dass er unsere Namen verwechselt hat.

Gruß, Andreas

Hallihallo,

habe mir mal folgendes zurecht gebastelt.

Aus nem Forum(http://www.office-loesung.de/ftopic226249_0_0_asc.php) diesen Code für Primzahlen in mein Modul Primzahlen rein kopiert,

Public Function PrimZ(zahl) As Boolean
Dim wurzel
Dim L
Dim bol As Boolean
bol = True
'Eine Schleife aufsetzen bis zur Wurzel der Zahl.
'Ist die Zahl durch ein Element der Schleife teilbar dann ist
'die Zahl keine Primzahl.
wurzel = Int(Sqr(zahl))
For L = 2 To wurzel
 If (zahl / L) = Int(zahl / L) Then
 bol = False
 Exit For
 End If
Next
PrimZ = bol
End Function

und dann folgenden Code selbst gebastelt.

Public Sub PrimPchen()
 Dim i As Long

 'Es wird im Blatt "Tabbi" immer der erste in so einem Viererpack von Teilnehmern betrachtet.
 For i = 13 To 166 Step 5

 'Hier werden die Punkte (aus Spalte F) des ersten und dritten Teilnehmers des Viererpacks addiert,
 'und die gebildete Summe wird auf Primzahl überprüft.
 If PrimZ(Sheets(1).Cells(i, 6).Value + Sheets(1).Cells(i + 2, 6).Value) = True Then

 'Wenn die Summe eine Primzahl ist, wird in H13 für den ersten Teilnehmer des Viererpacks der Wert eingetragen, der in Zelle K2 steht
 Sheets(1).Cells(i, 8).Value = Sheets(1).Cells(2, 11).Value
 End If

 'Entsprechendes gilt für den zweiten und vierten Teilnehmer des Viererpacks
 If PrimZ(Sheets(1).Cells(i + 1, 6).Value + Sheets(1).Cells(i + 3, 6).Value) = True Then
 Sheets(1).Cells(i + 2, 8).Value = Sheets(1).Cells(2, 11).Value
 End If

 'Mit dieser Anweisung wird zum nächsten Viererpack gesprungen
 Next i
End Sub

habe den Code gestartet,und siehe da,es hat funktioniert.

***** Freu *****

Was sagt ihr zu dem Code. Würde er ne Abnahme bekommen,oder kann man ihn noch verbessern?

Und ist es für die Programmierung von Vortei,wenn man weiss,wo die Obergrenze der Primazahlen ist(die also vorkommen können)

LG Frank

Hallo Frank,

der Code sieht doch ganz gut aus.
Einen „Verbesserungs“-Vorschlag hätte ich noch, damit du dir in Zukunft etwas Tipparbeit sparen kannst:
Kennst du die With-Anweisung? Ich versuch’s hier jetzt nicht genau zu erklären, schau einfach mal in die VBA-Hilfe.
Damit sähe der Code dann so aus:

Public Sub PrimPchen()
 Dim i As Long

 With Sheets(1)
 'Es wird im Blatt "Tabbi" immer der erste in so einem Viererpack von Teilnehmern betrachtet.
 For i = 13 To 166 Step 5

 'Hier werden die Punkte (aus Spalte F) des ersten und dritten Teilnehmers des Viererpacks addiert,
 'und die gebildete Summe wird auf Primzahl überprüft.
 If PrimZ(.Cells(i, 6).Value + .Cells(i + 2, 6).Value) = True Then

 'Wenn die Summe eine Primzahl ist, wird in H13 für den ersten Teilnehmer des Viererpacks der Wert eingetragen, der in Zelle K2 steht
 .Cells(i, 8).Value = .Cells(2, 11).Value
 End If

 'Entsprechendes gilt für den zweiten und vierten Teilnehmer des Viererpacks
 If PrimZ(.Cells(i + 1, 6).Value + .Cells(i + 3, 6).Value) = True Then
 .Cells(i + 2, 8).Value = .Cells(2, 11).Value
 End If

 'Mit dieser Anweisung wird zum nächsten Viererpack gesprungen
 Next i
 End With
End Sub

Gruß, Andreas