Code VBA pour la soustraction des nombres suivants dans une liste de la première valeur

0

J'ai une liste de nombres. Je veux utiliser le premier nombre de la liste comme valeur de départ et en soustraire les nombres suivants, à l'aide de VBA.

J'ai fait plusieurs tentatives infructueuses:

Function less(rng As Range)
    X = 0

    For Each cell In rng
    X = X - cell.Value

    Next

    less = X

End Function

Il en résulte la soustraction de toutes les valeurs, y compris la première. Par exemple, pour la séquence 5,7,3,6, mon code donnera -21. Mais j'attends -11.

L'autre code que j'ai essayé est:

Function less(rng As Range)
    X = 0

    For Each cell In rng
    X = X + cell.Value
    X = X - cell.Value

    Next

    less = X

End Function

Il remplace simplement chaque valeur et le résultat est 0.

Comment puis-je transformer la première valeur de la liste en valeur de départ, puis en soustraire les valeurs suivantes?

Je ne m'inquiète pas ici du signe de l'une des valeurs, mais seulement de la séquence logique qui commence par la première valeur et en soustrait les valeurs suivantes.

Remarque: je suis nouveau sur VBA et ceci est mon premier codage.

Deepak Aggarwal
la source
3
(1) Votre code semble faire exactement ce qu'il est censé faire. Quel est le problème? (2) Est-ce que toute la question sur comment sauter la première cellule de la plage? Si oui, vous devriez le dire plus clairement. (3) Vous dites que vous êtes nouveau dans VBA. Êtes-vous nouveau dans la programmation en général? Comment résoudriez-vous vos problèmes (quels qu’ils soient) dans n’importe quel langage de programmation que vous connaissez bien? Pleasedonot répondre dans les commentaires; modifier votre question pour la rendre plus claire et plus complète.
Scott
Puis-je vous demander de préciser quel résultat vous souhaitez obtenir si la plage se compose des valeurs suivantes: -5, 7, -3, 6? Btw, vous savez grâce à l'arithmétique élémentaire que soustraire une valeur négative revient à ajouter la même valeur positive, alors x - -1 = x + 1, n'est-ce pas?
Tom Brunberg
Comme Scott a dit que j'ai édité ma question, j'ai juste besoin d'une solution pour sauter la première valeur dans la plage.
Deepak Aggarwal
Pour Tom, je le sais bien. Pour une valeur donnée, les résultats seront -21 et mon code donnera la même chose. Mais pour la plage 5,7,3,6, mon code donnera également -21. Mais j'attends -11
Deepak Aggarwal
1
Pourquoi avez-vous supprimé le code exemple de votre question? Voulez-vous rendre plus difficile pour nous de vous comprendre?
teylyn

Réponses:

1

Edit (après les commentaires de fix1234)

Vous pouvez interpréter votre question comme suit: "Ignorez la première valeur de la soustraction mais incluez-la comme valeur de départ" à l'aide de la fonction suivante:

Function less(rng As Range)
    Dim x, i As Integer
    Dim cell As Range

    For Each cell In rng
      If cell.Address = rng.Cells(1, 1).Address Then
        x = cell.Value
      Else
        x = x - cell.Value
      End If
    Next

    less = x
End Function

Ce sera également conforme à votre commentaire où vous avez dit qu'un intervalle 5, 7, 3, 6 devrait donner -11

Tom Brunberg
la source
5 - 7 - 3 - 6 = -11. -5 -7 --3 - 6 = -15. Si vous obtenez -16 et -10, respectivement, quelque chose ne va pas.
fixer1234
@fixer OP a demandé: Toute solution où je peux ignorer la première valeur de cellule dans la plage , ergo a) saute 5 puis - 7 - 3 - 6 = -16 et b) saute -5, puis -7 --3 - 6 = -10
Tom Brunberg
Voir le commentaire de OP sur la question. En sautant le premier élément, je pense qu'ils entendaient inclure le premier élément dans l'arithmétique en tant que point de départ et en soustraire les autres éléments plutôt que de soustraire le premier élément, également, d'une valeur initiale de zéro. C'est ce que le code de l'OP a fait et ce qu'ils essaient de corriger. J'avais déjà voté en faveur de la fermeture de la question, qui n'était pas claire. Un effort courageux ici, et si le PO clarifie les choses, vous pouvez avoir raison, ou peut sauver l'effort. :-)
fixer1234
@ fix1234 Vous avez raison, réinterpréter la question comme vous l'avez dit est probablement correct.
Tom Brunberg
Cher fixeur, vous avez raison "Voir le commentaire de OP sur la question. En sautant le premier élément, je pense qu'ils voulaient inclure le premier élément dans l'arithmétique comme point de départ et en soustraire les autres éléments plutôt que de soustraire le premier, à partir d'une valeur de départ de zéro. "
Deepak Aggarwal