vba range ausfüllen bis 100% erreicht sind

... komplette Frage anzeigen

4 Antworten

Belege jede Zelle mit 0% vor. Dann schreibst du in eine freie Zelle:

=1-SUMME(B3:B41)

In der Zelle stehen die verbleibenden, zu verteilenden Prozentwerte.

Antwort bewerten Vielen Dank für Deine Bewertung

Das geht ganz sicher auch mit einer Formel (sverweis, Zählenwenn, wenn,.... Da sollen mal die Experten ran)

Aber es geht natürlich auch mit VBA.

Der Editor muss mit Alt F11 geöffnet werden.

Links in den Projekten klickst (Doppeltklick!) du dann die Tabelle an, in der deine Prozentwerte stehen.

Dann gehst du oben in der Auswahl von "(Allgemein)" auf "Worksheet".

Und rechts daneben auf "Change"

Dort fügst Du dann den folgenden Code ein:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngMaxProzent As Double
Dim I As Long

'nur auf Zeilen 3 bis 41 reagieren
If Target.Row < 3 Or Target.Row > 41 Then Exit Sub
'nur auf Spalte 2 (="B") reagieren
If Target.Column <> 2 Then Exit Sub
'den Maximalwert ermitteln
lngMaxProzent = WorksheetFunction.Max(Range("b2:B41"))
'Wenn Maximalwert 100 oder höher dann
If lngMaxProzent >= 100 Then
    'im Bereich Zeile 3 bis Zeile 41
    For I = 3 To 41
        'prüfen ob die Zelle leer ist
        If IsEmpty(Cells(I, 2)) Then
            'leere Zelle mit 0 füllen
            Cells(I, 2) = 0
        End If
    Next I
End If
End Sub

Hoffe es hilft

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
03.02.2015, 14:35

DH auch füt die detaillierte Erklärung!
Und dass man nach Auswahl Worksheet in den Deklarationen eine Liste aller möglichen Worksheet-Makros finden kann, wusste ich nach fast 20 Jahren VBA-learning-by-doing immer noch nicht!

1
Kommentar von carter89
03.02.2015, 15:52

Hallo,

Danke für deine Antwort. Ich denke du hast meine Anfrage gut verstanden trotz der schlechten beschreibung.

Ich habe alle schritte befolgt aber es passiert nichts. wenn ich 100% erreiche werden die zellen nicht gefüllt.

Habe die Tabelle wo die zahlen reinkommen ausgewählt, Wroksheet und change gewählt und deinen code reinkopiert.

Übersehe ich etwas?

Danke

1

Ich sehe gerade, dass man deine Aussage 100 % erreicht auf zwei Arten interpretieren kann.

1.wie unten im Code beschrieben, wenn 100 % als alleiniger Wert eingegeben wurde

und

2.wenn alle bisher eigegebenenn Zahlen in der Summe 100 % ergeben.

Für Fall 2 musst du nur eine Zeile ändern:

'aus
lngMaxProzent = WorksheetFunction.Max(Range("b2:B41"))
'wird
lngMaxProzent = WorksheetFunction.Sum(Range("b2:B41"))

Ich hoffe, das ist es jetzt. Gib mal Rückmeldung

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von schmiddi1967
04.02.2015, 23:02

DH!

Ich habe da auch noch eine Anmerkung dazu.

Wenn du deine Zellen als Prozent formatierst musst du

If lngMaxProzent >= 100 Then

in

If lngMaxProzent >= 1 Then

ändern, sonst macht er erst bei 10000 Schluß

1

Die Aufgabestellung ist mir nich klar. Nach welchem Muster / welcher Regel sollen da Zahlen eingefügt werden?

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?