Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2009, 22:38   #1
Arlen
 
Регистрация: 15.05.2009
Сообщений: 4
По умолчанию Сумма цифр числа в ячейке

Проблема заключается в том, что я не могу найти ошибку алгоритма. В первый раз полной отладки программа считала числа до 24 знаков без ошибок, но на следующий день начала преобразовывать автоматически в ячейке такое число в экспоненциальное и считать отказывалось, выдавая Type mismatch (смена типа ячейки не помогло). В VBA я толком и не работаю, поэтому плохо представляю, в чем там дело, кто сможет, помогите)
Алгоритм:
Код:
Sub SP()
 For j = 2 To 26 
  v_str = Cells(j, 3).Value {диапазон ячеек, в которых лежат числа}
  v_sum = CInt(Left(v_str, 1))
  v_str1 = CStr(Left(v_str, 1))
 For i = 2 To Len(v_str)
  v_sum = v_sum + CInt(Mid(v_str, i, 1))
  v_str1 = v_str1 + "+" + CStr(Mid(v_str, i, 1))
 Next
  v_str1 = v_str1 + "=" + CStr(v_sum)
  Cells(j, 8).Value = v_sum
 Next
Arlen вне форума Ответить с цитированием
Старый 15.05.2009, 22:48   #2
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Ячейка не должна быть пустой. Задайте в начале цикла проверку.
pivas вне форума Ответить с цитированием
Старый 16.05.2009, 04:22   #3
Arlen
 
Регистрация: 15.05.2009
Сообщений: 4
По умолчанию

Подразумевается, что первоначально пустой она быть не может (то есть, сначала все ячейки заполняются. Значения берутся от 0.
Arlen вне форума Ответить с цитированием
Старый 16.05.2009, 09:21   #4
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Type mismatch выдаётся когда ячейка пуста, число меньше 0 или представлено не в виде последовательности цифр. Сделайте формат ячеек текстовым и заполните диапазон. Число не будет переводится в экспоненту и Ваш код будет работать.
pivas вне форума Ответить с цитированием
Старый 16.05.2009, 09:42   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Могу предложить несколько иной алгоритм:

Код:
Sub test()
    Dim ra As Range, cell As Range: Set ra = [c2:c26] ' обрабатываемый диапазон
    For Each cell In ra
        For i = 1 To Len(cell)
            s = s & "+" & Mid(cell, i, 1)
        Next i
    Next
    результат = Application.Evaluate(s)
    MsgBox Mid(s, 2) & " = " & результат, vbInformation
End Sub
Вот что получаем на выходе:
Цитата:
2+4+4+8+6+1+2+8+1+7+0+2+1+2+2+5+4+2 +9+6+3+3+8+3+8+0+4+2+2+4+6+4+5+0+6+ 5+4+8+5+9+0+6+3+2+6+7+4+7+1+6+7+5+8 +8+0+0+8+4+2+8+8+4+9+2+6+9+6+8+1+0+ 1+0 = 311
EducatedFool вне форума Ответить с цитированием
Старый 16.05.2009, 10:00   #6
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

EducatedFool, остаётся проблема Type mismatch при большом количестве цифр в числе (от 15 и больше).
pivas вне форума Ответить с цитированием
Старый 16.05.2009, 11:18   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
EducatedFool, остаётся проблема Type mismatch при большом количестве цифр в числе (от 15 и больше)
Согласен, проблема есть...
Только она проявляется не из-за большого числа цифр в числах,
а из-за ограничения длины вычисляемой строки в функции Application.Evaluate(s)

Вот так работает нормально (проверял на числах, состоящих из 30 цифр):
Код:
Sub test()
    For Each cell In [c2:c15]    ' обрабатываемый диапазон
        For i = 1 To Len(cell)
            цифра = Mid(cell, i, 1)
            s = s & "+" & цифра: Sum = Sum + Val(цифра)
        Next i
    Next
    MsgBox Mid(s, 2) & " = " & Sum, vbInformation
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.05.2009, 11:50   #8
Arlen
 
Регистрация: 15.05.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от pivas Посмотреть сообщение
Type mismatch выдаётся когда ячейка пуста, число меньше 0 или представлено не в виде последовательности цифр. Сделайте формат ячеек текстовым и заполните диапазон. Число не будет переводится в экспоненту и Ваш код будет работать.
В том-то и дело, что я так пыталась, безрезультатно))
EducatedFool, я наверное, не совсем правильно сформулировала задачу. Имелось в виду, что в диапазоне в каждой ячейке лежит число и сумму цифр числа надо считать конкретно каждой ячейки и выводить в соседнюю. Например, в диапазоне с2:с10 лежат в каждой ячейке определенные числа, тогда сумма цифр числа с2 (при выполнение программы) отображается в d2, сумма цифр числа c3 в d3 и так далее.
Arlen вне форума Ответить с цитированием
Старый 16.05.2009, 11:58   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
сумму цифр числа надо считать конкретно каждой ячейки и выводить в соседнюю
Тогда попробуйте такой макрос:
Код:
Sub test()
    For Each cell In [c2:c15]    ' обрабатываемый диапазон
        Sum = 0
        If Len(cell) > 0 Then
            For i = 1 To Len(cell)
                цифра = Mid(cell, i, 1)
                s = s & "+" & цифра: Sum = Sum + Val(цифра)
            Next i
            cell.Next = Sum
        End If
    Next
End Sub

Или в программный модуль добавьте пользовательскую функцию:
Код:
Function СуммаЦифр(ByRef cell As Range)
    If Len(cell) > 0 Then
        For i = 1 To Len(cell)
            СуммаЦифр = СуммаЦифр + Val(Mid(cell, i, 1))
        Next i
    End If
End Function
а потом в ячейки столбца D поставьте формулы типа этой:
=СуммаЦифр(C2)
EducatedFool вне форума Ответить с цитированием
Старый 16.05.2009, 12:10   #10
Arlen
 
Регистрация: 15.05.2009
Сообщений: 4
По умолчанию

EducatedFool, все, теперь работает как надо, большое спасибо!)))Теперь можно наконец-то закончить эту несчастную базу данных)))спасибо ещё раз^^
Arlen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма цифр введенного трехзначного числа. Дельфи by -ORTODOX- Помощь студентам 20 02.02.2011 14:21
Сумма цифр числа... Dimak67 Microsoft Office Excel 5 09.04.2010 00:46
сумма цифр целого числа mihsel Microsoft Office Excel 8 13.04.2009 13:57
Сформировать вектор Х из тех элементов вектора А, сумма цифр которых в десятичной записи больше заданного Dimati87 Помощь студентам 1 06.03.2009 14:36
Натуральное число, в записи которого п цифр, называется числом Армстронга, если сумма его цифр, возведенн OTLi4HO Общие вопросы C/C++ 6 14.01.2009 19:48