Код VBA для віднімання наступних чисел у списку від першого значення


0

У мене є список номерів. Я хочу використовувати перше число у списку як вихідне значення і відняти з нього наступні числа, використовуючи VBA.

Я зробив кілька невдалих спроб:

Function less(rng As Range)
    X = 0

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

    Next

    less = X

End Function

Це призводить до віднімання всіх значень, включаючи перше. Наприклад, для послідовності 5,7,3,6 мій код дасть -21. Але я очікую -11.

Інший код, який я спробував:

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

Він просто переосмислює кожне значення і отримує 0.

Як я можу зробити перше значення у списку вихідним значенням, а потім зробити від нього віднімання наступних значень?

Мене тут не хвилює ознака будь-якого зі значень, лише логічна послідовність початку з першого значення та віднімання з нього наступних значень.

Примітка: Я новачок у VBA, і це моє перше кодування.


3
(1) Здається, що ваш код робить саме те, що він повинен робити. В чому проблема? (2) Чи є все питання про те, як пропустити першу клітинку в діапазоні? Якщо так, то слід сказати це більш чітко. (3) Ви кажете, що ви новачок у VBA. Ви взагалі новачок у програмуванні? Як би ви вирішили свої проблеми (якими б вони не були) будь-якою мовою програмування, яку ви добре знаєте? Будь ласка, не відповідайте на коментарі; відредагуйте своє запитання, щоб зробити його більш зрозумілим та повним.
Скотт

Чи можу я попросити вас уточнити, який результат ви очікуєте мати, якщо діапазон складається з таких значень: -5, 7, -3, 6? До речі, ви знаєте з елементарної арифметики, що віднімання від'ємного значення те саме, що додавання того ж позитивного значення, так що x - -1 = x + 1, чи не так?
Том Брунберг

Як сказав Скотт, я редагував своє запитання, мені просто потрібно рішення пропустити перше значення в діапазоні.
Діпак Агарвал

Для Тома я це добре знаю. Для заданого значення результати будуть -21, і мій код дасть те саме. Але для діапазону 5,7,3,6 і мій код дасть -21. Але я очікую -11
Діпак Агарвал

1
Чому ви видалили зразок коду зі свого запитання? Ви хочете, щоб нам було важче зрозуміти вас?
тейлін

Відповіді:


1

Редагувати (після коментарів fixer1234)

Інтерпретацію вашого питання як "пропустити перше значення з віднімання, але включити його як вихідне значення" можна досягти за допомогою наступної функції:

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

Це також буде відповідати вашому коментарю, де ви сказали, що діапазон 5, 7, 3, 6 повинен дати -11


5 - 7 - 3 - 6 = -11. -5 -7 --3 - 6 = -15. Якщо ви отримуєте -16 і -10 відповідно, щось не так.
fixer1234

@fixer OP запитав: Будь-яке рішення, де я можу пропустити значення першої комірки в діапазоні , ерго а) пропустити 5, потім - 7 - 3 - 6 = -16 і б) пропустити -5, потім -7 --3 - 6 = -10
Том Брунберг

Дивіться коментар ОП до цього питання. Пропускаючи перший елемент, я думаю, що вони мали на увазі включення першого елемента в арифметиці як вихідний пункт і віднімання інших елементів з нього, а не віднімання першого елемента також від початкового значення нуля. Ось що зробив код ОП і те, що вони намагаються виправити. Я вже проголосував, щоб закрити це питання як незрозуміле. Тут доблесні зусилля, і якщо ОП роз'яснить речі, ви можете виявитися правильним, або можете врятувати зусилля. :-)
fixer1234

@ fixer1234 Ви маєте рацію, переосмислення питання, як ви сказали, є, швидше за все, правильним.
Том Брунберг

Шановний виправник, ви правильні "Дивіться коментар ОП до питання. Пропускаючи перший пункт, я думаю, що вони мали на увазі включення першого пункту в арифметику як початковий пункт і віднімання інших елементів з нього, а не віднімання першого пункту, також, від початкового значення нуля ".
Діпак Агарвал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.