Frage von HalloAleks, 62

Gibt es hier VBA Experten?

Ich will in einer Spalte überprüfen ob der Wert kleiner ist als 30000 und wenn er kleiner als 30.000 soll es auf 30.000 gerundet werden sonst soll die Eingabe gleich bleiben, ich habe keine Ahnung mit dem Bereich und auch so relativ wenig Ahnung

Danke für eure Hilfe

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Suboptimierer, Community-Experte für Excel, 52

Muss es VBA sein? 

In Excel löst du das mit einer Spalte daneben (hier B), in der du schreibst: 

=MAX(A1;30000)

Die Spalte kannst du, wenn du möchtest, als Wert auf Spalte A kopieren.

Die VBA-Lösung lautet entsprechend:

Sub min30000()
  Dim rZelle As Range
  For Each rZelle In Range("A1:A1000")
    If Not IsEmpty(rZelle) Then _
      rZelle.Value = WorksheetFunction.Max(30000, rZelle.Value)
  Next
End Sub
Kommentar von HalloAleks ,

Danke für die schnelle Antwort ich probiere es gleich mal aus 

Kommentar von Suboptimierer ,

Bitteschön!

Kommentar von HalloAleks ,

Sub ist ja nur die Definition oder ? Wo rufe ich dann die Sub auf ? wie funktioniert das in VBA ? 

Kommentar von Suboptimierer ,

Du kannst die Sub über mehrere Wege starten. Entweder du erstellst im Excelsheet ein Formularsteuerelement (Button) und legst das Makro darauf oder du betätigst im VBA-Editor den grünen Pfeil in der Symbolleiste.

Du kannst die Sub auch durch ein ausgelöstes Ereignis aufrufen. 

Es bleibt dir überlassen, wo du sie aufrufst.

Kommentar von HalloAleks ,

Okay, habe es im Change eingefügt danke nochmal funktioniert einwandfrei ! :D 

Kommentar von Suboptimierer ,

Bitteschön!

Kommentar von HalloAleks ,

Okay ich habe noch eine frage, bei der Fehlerbehebung ist es möglich wenn in dem Bereich ein String vorkommt das nicht nur ein Fehler geworfen wird sondern auch die letzte Eingabe entfernt  wird ?

Kommentar von Ninombre ,

Um den Fehler und den Abbruch zu verhindern, könntest Du abfragen, ob eine Zahl in der Zelle steht:
If Not IsEmpty(rZelle) And IsNumeric(rZelle) = True Then _

Damit werden Zellen mit String einfach übersprungen. Bin aber nicht sicher,ob Du das wolltest.

Wie meintest Du "letzte Eingabe entfernen"? Also die Zelle, die vor dem String stand auf den alten Wert zurücksetzen und die Bearbeitung abbrechen?

Kommentar von Suboptimierer ,

Besser zwei Ifs machen. Dann kann man bei nicht numerischen Zellen in den Else verzweigen und den gewünschten Zurücksetzen-Vorgang einleiten.

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

ich denke, das hier eine hilfreichste Antwort für Suboptimierer angemessen wäre.

Kommentar von HalloAleks ,

Da überlege ich gar nicht lange, aber das geht ja erst nach 24 Std. ! 

Keine passende Antwort gefunden?

Fragen Sie die Community