Clever-Excel-Forum

Normale Version: zwei Zellen mit gleichen Wert, Werte Löschen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo VBA Profis
Ich habe eine Tabelle für ein kleines Warenlager erstellt (Exel 2016).
Funktioniert, Dank Forum Google und eigenes kleines Wissen, auch super.
Nun möchte ich gerne, wenn bestellte Anzahl und gelieferte Anzahl gleich
ist, dass in diesen 2 Zellen dann nichts mehr drin steht.
Dadurch werden bedingte Formatierungen zurückgesetzt und die
Bestellung abgeschlossen.

Das ganze geht ab Zeile 6 los. Darüber sind Überschriften.

in Spalte I trage ich die bestellte Anzahl ein
in Spalte K die Lieferung/Teillieferung  
in Spalte L werden die Werte von K addiert

sinngemäß: (wenn L>=I dann L und I ="")

Das ganze natürlich als VBA-Code.

Da ich von VBA  Null Ahnung habe,
wäre es super, wenn Ihr Profis mir
helfen würdet.

Diesen Code habe ich ausprobiert:

Dim i As Integer
Dim ADD_L As String
Dim ALL_I As String
For i = 6 To 32766
    ADD_L = "L" + Trim(CStr(i))
    ALL_I = "I" + Trim(CStr(i))
If Range(ADD_L).Value >= Range(ALL_I).Value Then
    Range(ADD_L).Value = ""
    Range(ALL_I).Value = ""
End If
Next i

Nach "Sub Ausführen" hat es einmal funktioniert
danach hat sich Exel "Aufgehangen".

Danke alabama01
Hallo,

so:

Code:
Option Explicit

Public Sub Leeren()
Dim loLetzte As Long, i As Long

Application.ScreenUpdating = False

With Worksheets("Tabelle1") 'Blattname anpassen
   loLetzte = .Cells(.Rows.Count, "I").End(xlUp).Row
   If loLetzte > 5 Then
       For i = 6 To loLetzte
           If .Cells(i, "L") >= .Cells(i, "I") Then
               .Cells(i, "I").ClearContents
               .Cells(i, "L").ClearContents
           End If
       Next i
   End If
End With
End Sub


Gruß Werner
Vielen Lieben Dank Werner.M für die schnelle Antwort 

Ich habe Deinen Code gleich ausprobiert
Funktioniert super wenn ich auf das kleine Dreieck
"Sub/User Form ausführen" klicke. Leider nicht Automatisch.
Weißt du was ich falsch mache?

 Gruß alabama01(Frank)
Hallo,

da war je jetzt nicht wirklich die Rede davon.
Und was heißt hier "automatisch"?
Die Codeausführung kann nur auf ein Ereignis reagieren, z.B. auf eine Werteeingabe des Benutzers in der Tabelle.
Dann stellt sich aber die Frage: Auf welches Ereignis soll die Reaktion erfolgen. Sprich der Code soll starten wenn der Nutzer wo eine Eingabe macht?

Gruß Werner
Hallo Werner

in Spalte I Trage ich die bestellte Menge ein. z.B. 30
in Spalte K die gelieferte Menge/Teillieferung z.B  15
bei der nächsten Lieferung wieder                 z.B 15
in Spalte L wird die Teillieferung addiert.      = 30

Nun Dachte ich, wenn in Spalte L der gleichen wert wie in Spalte I
erreicht wird, dass eben "Automatisch" Spalte I und L in der gleichen
Zeile die 30 gelöscht wird (b.z.w. Zellen leer).

Habe ich diesen Code Falsch Platziert?



Code:
Private Sub Worksheet_Change(ByVal Target As Range)

'Waren Ausgang "-Bestand"
If Target.Column = 5 Then
  On Error GoTo Err_Exit
  Application.EnableEvents = False
 Cells(Target.Row, 7) = Cells(Target.Row, 7) - Target
End If

'Waren Eingang "+Bestand/Teillieferung"
If Target.Column = 11 Then
  On Error GoTo Err_Exit
  Application.EnableEvents = False
 Cells(Target.Row, 7) = Cells(Target.Row, 7) + Target
 Cells(Target.Row, 12) = Cells(Target.Row, 12) + Target
 End If
 
   '"Datum" Waren Eingang
If Target.Column = 11 And Target.Value <> 0 Then Cells(Target.Row, 13) = Date

'"Datum" Bestellung
If Target.Column = 9 And Target.Value <> 0 Then Cells(Target.Row, 10) = Date

'"Datum" Waren Ausgang
If Target.Column = 5 And Target.Value <> 0 Then Cells(Target.Row, 6) = Date

'Waren Ausgang "Eingabe Löschen"
If Not Application.Intersect(Target, Range("e6:e200")) _
Is Nothing Then Range("e6:e200") = ""

'Waren Eingang "Eingabe Löschen"
If Not Application.Intersect(Target, Range("k6:k200")) _
Is Nothing Then Range("k6:k200") = ""

Err_Exit:
Application.EnableEvents = True
End Sub


Public Sub Leeren()
Dim loLetzte As Long, i As Long

Application.ScreenUpdating = False

With Worksheets("Test") 'Blattname anpassen
   loLetzte = .Cells(.Rows.Count, "I").End(xlUp).Row
   If loLetzte > 5 Then
       For i = 6 To loLetzte
           If .Cells(i, "L") >= .Cells(i, "I") Then
               .Cells(i, "I").ClearContents
               .Cells(i, "L").ClearContents
           End If
       Next i
   End If
End With
End Sub


Gruß Frank
Hallo Frank,

lad mal deine Mappe hier hoch.

Gruß Werner
[attachment=23922]
Hallo Werner
PW FrankT
Hallo Frank,

schau dir deine Datei mal an.

Im Eingabefeld für die Lieferung/Teillieferung wird dir immer der Wert der letzten Lieferung/Teillieferung angezeigt.
Das so lange, bis die Lieferung der Bestellmenge entspricht (oder größer ist).
Dann werden die entsprechenden Felder, incl. das Datum für den Warenausgang, geleert.

Gruß Werner
Hallo Werner

Das ist ja Mega-Super. Vielen lieben Dank.
Für mich sieht das wie eine "Doktor-Arbeit" aus.
Alles super, so wie ich mir das vorgestellt habe.

Danke dir!
Gruß Frank