Der Teufel steckt im Detail (.Offset-Eigenschaft)

Guten Morgen zusammen und allen einen schönen Karfreitag,

auch heute möchte ich Euch wieder an meinem Problem teilhaben lassen.

Folgender Code ist vorhanden:

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

und

If Alle(strWas, rngWo.Offset(Zei + ZeiS, 0)) = True Then
 rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 5)

Als Beispiel, F13(=190) wird geprüft, ob ohne Rest durch K8(=5) teilbar ist. Hier ist True,also wird in Zelle G13 der Wert aus K2 eingetragen.

Funzt auch einwandfrei.

Nun wollte Frank ja wieder nen ganz schlauer sein.

Case "Durch-Pchn"
 intVergleich = Tabelle1.Cells(8, Zelle.Column + 5).Value
 On Error Resume Next
 Alle = IIf(Zelle.Value + Zelle.Offset(2, 0) Mod intVergleich = 0, True, False)
 On Error GoTo 0

hab mir gedacht,versuchst es mal so. F13+F15(=460) durch K8(5) teilen.
Müsste auch True sein und sollte dann auch hierher springen.

If Alle(strWas, rngWo.Offset(Zei + ZeiS, 0)) = True Then
 rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 5)

Aber nix passiert. Keine Eintragung,keine Fehlermeldung…es passiert was,aber nur was?

Dann ist mir eingefallen,dass es so richtig nicht funzen kann. Ich will bei True den Wert aus K2 in H13 eingetragen haben.

Aber selbst in diesem Zustand müsste der Code die 300 zumindest in Zelle G13 eintragen. So ist zumindest mein Gedankengang.

Kann es sein,dass ich gedanklich schon beim Mittagessen bin :wink: oder wo steckt der Fehler?

LG Frank

Grüezi Frank

Ich denke, das ist eine Frage der Prioritäten und der Klammer-Setzung und hat rein mathematische Gründe und keinen Bezug zur .Offset-Eigenschaft.

Als Beispiel, F13(=190) wird geprüft, ob ohne Rest durch
K8(=5) teilbar ist. Hier ist True,also wird in Zelle G13 der
Wert aus K2 eingetragen.

Funzt auch einwandfrei.

Nun wollte Frank ja wieder nen ganz schlauer sein.

Case „Durch-Pchn“
intVergleich = Tabelle1.Cells(8, Zelle.Column + 5).Value
On Error Resume Next
Alle = IIf(Zelle.Value + Zelle.Offset(2, 0) Mod intVergleich =
0, True, False)
On Error GoTo 0

hab mir gedacht,versuchst es mal so. F13+F15(=460) durch K8(5)
teilen.
Müsste auch True sein und sollte dann auch hierher springen.

Alle = IIf(Zelle.Value + Zelle.Offset(2, 0) Mod intVergleich =
0, True, False)

Hier meinst Du die Summe aus zwei Zellen auf Ganzzahligkeit zu prüfen, in Wahrheit aber prüfst Du nur den zweiten Wert und addierst dann den ersten.

Setze die korrekten Klammern, dann müsste das eigentlich passen:

Alle = IIf((Zelle.Value + Zelle.Offset(2, 0)) Mod intVergleich =
0, True, False)

Also per Klammer anweisen erst zu summieren und dann erst die Division vornehmen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Thomas,

Setze die korrekten Klammern, dann müsste das eigentlich
passen:

Alle = IIf((Zelle.Value + Zelle.Offset(2, 0)) Mod intVergleich =
0, True, False)

Asche auf mein Haupt. Wenn man schon abschreibt,dann sollte man es auch richtig tun. 5x kontrolliert und nicht gemerkt.

Also per Klammer anweisen erst zu summieren und dann erst die
Division vornehmen.

Klammern werden ja bekanntlich von innen nach aussen aufgelöst.

So dann hätte ich noch ne Frage. Da der Wert aus K2 bei Pchn in H13 usw. und Tisch in I13 usw.ausgegeben werden soll passt ja dann dieser Teil nicht dafür.

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)

End If
 End If
 Next ZeiS
 End If
 Next Zei
End With
Ende:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Die Funktion ALLE bezog sich ja bis jetzt nur auf die 3 Brechnungen für Solo,wo der Wert aus K2(.Cells(2, rngWo.Column + 5)) ja in G13 usw. eingetragen wird,was hiermit geschieht(rngWo.Offset(Zei + ZeiS, 1).Value).

Liege ich soweit mit meiner Vermutung richtig? Ich teste derweil mal weiter.

LG Frank