2017-10-21 84 views
-1

Y a-t-il un moyen de déterminer si une valeur dans une colonne est inférieure à la limite autorisée? Par exemple: J'ai une Une colonne qui contiennent des données variables lors de toutes les valeurs des effets des changements dans la colonne B.Comment détecter si des valeurs de colonnes sont modifiées dans Excel vba

Je veux mettre la contrainte telle que si la colonne A faire toutes les valeurs dans la colonne B inférieure à 7 (par valeur croissante ou décroissante dans la colonne A), cette valeur dans la colonne A sera rejetée et la valeur de la colonne A ne sera plus mise à jour (augmentation ou diminution). et la dernière valeur sera définie comme finale. Donc, le concept ici est de faire une boucle dans chaque rangée de la colonne A et d'essayer d'augmenter ou de diminuer la valeur jusqu'à ce que la condition soit satisfaite.

Note: les valeurs de la colonne A doivent être positives

Exemple 1:

Please follow this image link un échantillon excel feuille est fixée au-dessous.

Je veux juste un moyen d'ajuster les valeurs dans la colonne A afin que les valeurs de la colonne B soient dans la limite permise. (c'est-à-dire pas au-dessous de 7). Cela peut être réalisé en changeant les valeurs dans la colonne A puis en vérifiant toutes les lignes de la colonne B pour la limite permise, pour cela, je dois faire défiler chaque ligne de la colonne B à chaque changement de valeur, ce qui peut prendre plus de temps. Vba). Je dois y parvenir sans boucler.

TIA

+0

Un échantillon fichier Excel de Google Drive: https://drive.google.com/file/d/0B4kHDh74X1b6Vng0d282WVRWOXc/view – Hola

+0

Pourquoi ne pas utiliser "la validation des données"? – Maldred

Répondre

1

Vous pouvez essayer un événement basé sur la feuille comme ci-dessous pour saisir les changements qui se produisent dans la colonne A. Faites un clic droit sur l'onglet feuille où vous voulez faire et coller ci-dessous le code. Testez ceci sur une sauvegarde.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, rngLast As Range 
    If Target.Column = 1 Then 
     Set rngLast = Cells.Find("*", [A1], xlFormulas, xlWhole, , xlPrevious) 
     Application.EnableEvents = False 
     For Each rng In Range("B2:B" & rngLast.Row) '\\ Adjust Start Row of Column B 
      If rng.Value < 7 Then 
       MsgBox "Value going below specified limit!", vbExclamation 
       Application.Undo 
      End If 
     Next 
     Application.EnableEvents = True 
    End If 
    End Sub 
+0

merci pour la solution, comment puis-je l'utiliser dans un module? – Hola

+0

@Hola Non, vous ne pouvez pas le faire si vous voulez dire un module général car l'événement est déclenché par un composant de feuille particulier. –

+0

Existe-t-il une autre solution possible? – Hola