Frage von hanshuberplayer, 70

Excel VBA soll den Wert meiner Funktion erkennen?

Hi, hab wieder mal eine Frage zu Excel und zwar möchte ich wenn in A1 eine 1 steht dann soll zum wert in A2 + 1 addiert werden dass hab ich auch soweit geschafft:

Private Sub worksheet_selectionchange(ByVal target As Range)

Application.EnableEvents = False

If Range("A1").Value = "1" Then

Range("A2").Value = Range("A2").Value + 1

End If

Application.EnableEvents = True

End Sub

Jedoch funktioniert der Code nicht wenn ich eine Funktion in A1 eingebe z. B. =ZUFALLSBEREICH(1;5) wie schaff ich es also dass er den Wert meiner Funkton erkennt???

Danke schon mal im Vorraus mfg Hans ;)

Expertenantwort
von Oubyi, Community-Experte für Excel, 40

Das liegt nicht an der Funktion.
Auch damit klappt es.
Allerdings sehe ich das Problem darin, dass Du das SelectionChange-Ereingins abrufst. DAS wird natürlich nicht ausgelöst, wenn sich durch die Formel (z.b bei Drücken von F9) etwas ändert, sondern nur wenn Du - zusätzlich eine andere Zelle anklickst.
Bei Deinem Code, der wie Du sagst funktioniert, wird übrigens immer, wenn eine andere Zelle angeklickt wird und in dem Moment gerade 1 in A1 steht zu A2 eine 1 addiert. Ich glaube nicht, dass das Absicht ist, oder? (Da müsstest Du das target noch einschränken, siehe mein Beispiel)

Sinnvoller wäre da schon das Change-Ereignis.
Allerdings wird DAS nur ausgelöst, wenn eine Zelle "per Hand" geändert wird, also nicht, wie in Deinem Beispiel mit ZUFALLSBEREICH.
DARAUF zu reagieren wird schwierig.
Ist DAS dann das, was Du wirklich in Deinem Vorhaben realisieren willst, oder war das nur ein Beispiel zur "Vereinfachung"?
Vielleicht kannst Du Dein Vorhaben mal umreißen?
Ich gebe schon mal ein Beispiel, mit -Change, bei dem in A1 eine Formel steht -hier zum Beispiel =B1*C1 - und der Wert in A2 immer um 1 erhöht wird, wenn das Ergebnis in A1 gleich 1 ist:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:C1")) Is Nothing Then
If Range("A1").Value = 1 Then
Range("A2").Value = Range("A2").Value + 1
End If
End If
End Sub
Kommentar von hanshuberplayer ,

ja es ist eine vereinfachung ich möchte eine art Zähler basteln der wenn ich F9 drücke die einsen meines zufallsgenerators zählt jedoch weiß ich nicht genau wie das geht ....

Kommentar von Oubyi ,

Gerade fällt mir da Calculate ein.
Damit wären wir schon ein Stück weiter, allerdings tritt in folgendem Code ein Problem auf:

Private Sub Worksheet_Calculate()
On Error GoTo ErrorHandler
If Range("A1").Value = 1 Then
MsgBox Range("a1").Value
Application.EnableEvents = False
Range("A2").Value = Range("A2").Value + 1
End If
ErrorHandler:
Application.EnableEvents = True
End Sub

Und zwar wird, obwohl ich die Events ausschalte, beim Ändern von A2 eine neue Zufallszahl generiert, sodass die 1 zwar gezählt wird, in A1 aber nie angezeigt wird (sondern sofort wieder eine neue Zufallszahl).

Das habe ich im Code oben mal sichtbar gemacht, durch die Messagebox.

Wenn Du die raus nimmst, wird in A1 nie eine 1 angezeigt, obwohl sie generiert und gezählt wurde.

Es nutzt auch nichts im Code Calculation auf "manual" zu stellen, da man am Ende wieder auf "automatic" gehen muss und dann trotzdem neu berechnet wird.

Also entweder lässt Du die Messagebox drin, wenn Du damit leben kannst, oder Du stellst von Anfang an die Berechnung auf manuell (Formeln/ Berechnungsoptionen --> manuell). Dann klappt das Ganze mit F9 eigentlich optimal.

Du darfst nur nicht vergessen, hinterher wieder auf automatisch zu stellen.

Ich hoffe, dass die anderen Experten da vielleicht noch einen Trick kennen.

Expertenantwort
von Ninombre, Community-Experte für Excel, 32

Die Mischung aus Formel für den Zufallsgenerator und VBA ist eher nicht ideal. Wenn Du es nur mit Formeln lösen willst, dann nimmst Du ZUFALLSBEREICH einfach in einer Spalte untereinander, so viele Versuche Du eben auswerten willst und kannst mit ZÄHLENWENN die Anzahl der 1er ermitteln.

Oder auch die Zufallszahl in VBA ermitteln:
Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)

Kommentar von hanshuberplayer ,

ok und wenn ich eine wenn funktion verwende =WENN(Prüfung;1;"") kann ich da dann irgendwie die 1er zählen????

Kommentar von Ninombre ,

Steht bspw von A1 bis A100 jeweils Zufallsbereich, dann wären die 1er mit =zählenwenn(a1:a100;1)

Zu ermitteln 

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten