2017-10-20 18 views
0

Je veux une macro de sorte que lorsque vous entrez un 0 dans une cellule/plage de cellules particulière qu'elle efface la cellule.Supprimer 0 de la cellule lors de l'entrée

J'ai écrit une macro simple comme ce

Sub RemoveZeros() 
'to remove 0 values that may be a result of a formula or direct entry. 

    For Each cell In Range("A1:D20") 
     If cell.Value = "0" Then cell.Clear 
    Next 

End Sub 

Cependant, je dois courir ce après avoir entré mes valeurs à effacer. Je voudrais que la cellule efface si un 0 est entré. Comment puis-je faire cela?

+2

Ouvrez le 'ThisWorkbook' module de créer un sous appelé' Private Sub Workbook_SheetChange (ByVal Sh En tant qu'objet, ByVal Target Range) 'et entrez votre code Là. Le code se déclenche lorsque vous modifiez une valeur de cellule sur n'importe quelle feuille. –

+0

Aussi - ne serait-il pas aussi facile de sélectionner une cellule et d'appuyer sur «Delete» si le résultat final est une cellule vide? Aucun VBA nécessaire. –

+0

Et utilisez la variable 'Target', exemple:' Si Target Like "* 0 *" Then Target.Clear' ou 'If Target = 0 Then Target.Clear' – danieltakeshi

Répondre

1

J'ai trouvé une solution

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
     If Target.Value = 0 Then Target.ClearContents 
    Application.EnableEvents = True 
End Sub 

Merci

+0

Oui, ça va le faire. Il fonctionnera sur n'importe quelle cellule de cette feuille et pas seulement dans la plage A1: D20. Si vous voulez limiter la plage, cela fonctionne sur envelopper vos trois lignes de code dans une instruction 'IF ... END IF':' Si Intersect (Target, Range ("A1: D20")) est Nothing Then' –

+0

Merci homme. Dans ce cas particulier, il y a une cellule que je veux changer à zéro. Cependant cette cellule est fusionnée. Comment puis-je contourner cela? – FrankWhite

+1

Vous pouvez utiliser 'Target.MergeArea.ClearContents'. Cela fonctionnera même si c'est une cellule unique non fusionnée. S'il s'agit d'une seule cellule, vous pouvez également utiliser 'If Target.Address =" $ E $ 10 "Then' plutôt que toute la propriété" Intersect ". –