Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Готовые решения

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 44417
Главная » Готовые решения » VBA » Пользовательские функции

Сложение длинных чисел
25.05.2018, 11:59
[ Файл-пример (16.8 Kb) ]

Если есть необходимость точного сложения длинных (длиннее ~15 символов) целых чисел без их перевода в экспоненциальную форму и округления, функция СУММ работать не будет. Точнее, будет, но именно что с округлением. Для точного сложения предназначена функция ДЛСУММ, работающая аналогично СУММ, с реализацией алгоритма "сложения в столбик". Числа должны быть в текстовом формате, результат тоже текстовый. Функция обрабатывает только положительные числа.

Код

Function ДЛСУММ(ParamArray Ячейки()) As String

   Dim i As Long, j As Long
   Dim mlen As Integer, peren As Integer, ds As Integer
   Dim Знач() As String
   Dim cell As Range
   Dim Пром As Collection

   Set Пром = New Collection
   For i = 0 To UBound(Ячейки)
      For Each cell In Ячейки(i)
         Пром.Add cell.Value
      Next cell
   Next i
   If Пром.Count = 1 Then
      ДЛСУММ = Пром(1)
      Exit Function
   End If
   ReDim Знач(1 To Пром.Count)
   For i = 1 To Пром.Count
      Знач(i) = Пром(i)
   Next i
   ДЛСУММ = ""
   mlen = 0
   For i = 1 To Пром.Count
      If Len(Знач(i)) > mlen Then mlen = Len(Знач(i))
   Next i
   peren = 0
   For j = mlen To 0 Step -1
      ds = peren
      For i = 1 To Пром.Count
         If Len(Знач(i)) > 0 Then
            ds = ds + Right(Знач(i), 1)
            Знач(i) = IIf(Len(Знач(i)) = 1, "", Left(Знач(i), Len(Знач(i)) - 1))
         End If
      Next i
      ДЛСУММ = Right(ds, 1) & ДЛСУММ
      peren = IIf(ds > 9, Int(ds / 10), 0)
   Next j

End Function

Добавил: StoTisteg | | Теги: сложение длинных чисел, VBA, длинные числа, ВБА
Просмотров: 38 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!