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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.10.2008, 16:51   #1
Sergmodern
Пользователь
 
Регистрация: 04.06.2007
Сообщений: 12
По умолчанию Помогите с созданием функции плиз

Люди помогите с созданием собственной функции в Экселе,готовый код уже есть,но он не работает,что я мог сделать не так?Вот задание:
Нужно написать функцию которая бы для диапазона,передаваемого её в качестве параметра находила бы количество чисел,состоящих только из нечетных цифр.
Вот код:
Function ПоискЧисел(диапазон)
r = 0
For r1 = 1 To Len(диапазон.Count)
диапазон(r1) = Mid(диапазон.Count, r1)
If диапазон(r1) / 2 <> диапазон(r1) \ 2 Then
r = r + 1
End If
Next
ПоискЧисел = r
End Function

Что я сделал неправильно подскажите плиз,надеюсь на вашу помощь.
Sergmodern вне форума
Старый 30.10.2008, 17:21   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Что я сделал неправильно подскажите плиз
Почти всё


Можно, например, так:

Код:
Sub проверка()
    Dim arr As Variant: arr = Array(133, 234, 56, 435, 24, 35, 75)
    MsgBox ПоискЧисел(arr)
End Sub


Function ПоискЧисел(диапазон)
    числа_с_нечетными_цифрами = 0
    For i = 0 To UBound(диапазон)
        число = CLng(диапазон(i))
        произведение_цифр = 1
        For j = 1 To Len(CStr(число))
            произведение_цифр = произведение_цифр * CInt(Mid$(число, j, 1))
        Next j
        If произведение_цифр Mod 2 = 1 Then числа_с_нечетными_цифрами = числа_с_нечетными_цифрами + 1
    Next i
    ПоискЧисел = числа_с_нечетными_цифрами
End Function

Последний раз редактировалось EducatedFool; 30.10.2008 в 17:28.
EducatedFool вне форума
Старый 30.10.2008, 17:26   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Или так:

Код:
Sub проверка()
    Dim arr As Variant: arr = Array(133, 234, 53.5, 435, 24, 35, 75)
    MsgBox ПоискЧисел(arr)
End Sub


Function ПоискЧисел(диапазон)
    числа_с_нечетными_цифрами = 0
    For i = 0 To UBound(диапазон)
        число = CStr(диапазон(i))
        есть_чётные_цифры = False
        For j = 1 To Len(число)
            цифра = Mid$(число, j, 1)
            If IsNumeric(цифра) Then If CInt(цифра) Mod 2 = 0 Then есть_чётные_цифры = True
        Next j
        If Not есть_чётные_цифры Then числа_с_нечетными_цифрами = числа_с_нечетными_цифрами + 1
    Next i
    ПоискЧисел = числа_с_нечетными_цифрами
End Function

Последний раз редактировалось EducatedFool; 30.10.2008 в 17:29.
EducatedFool вне форума
Старый 30.10.2008, 18:41   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

код в модуле пример использования на листе.
Вложения
Тип файла: rar Нечетные.rar (18.2 Кб, 38 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 31.10.2008, 15:05   #5
Sergmodern
Пользователь
 
Регистрация: 04.06.2007
Сообщений: 12
По умолчанию

EducatedFool:
А как запустить эту программу?Я её вообщем запускаю,а она выдает окно типа с цифрой 4 и все,но когда я изменяю числа на нечетные он все равно показывает 4.Что бы это могло быть,может я чего-то не правильно запускаю?
Sergmodern вне форума
Старый 31.10.2008, 15:58   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А как запустить эту программу?
Запускаете макрос Проверка, точно так, как Вы это и делали...

Цитата:
когда я изменяю числа на нечетные
Вы же написали, что надо найти количество чисел, в которых все цифры нечётные.

Цитата:
Я её вообщем запускаю,а она выдает окно типа с цифрой 4 и все
Ну можно и так: (замените макрос Проверка на следующий)
Код:
Sub проверка()
    Dim arr As Variant: arr = Array(133, 234, 53.5, 135, 24, 35, 75)
    Msg = "Числа для проверки: " & Join(arr, "; ") & vbNewLine
    Msg = Msg & "Количество чисел для проверки: " & CStr(UBound(arr) + 1) & vbNewLine & vbNewLine
    Msg = Msg & "Среди них чисел со всеми нечетными цифрами: " & ПоискЧисел(arr)
    MsgBox Msg, vbInformation, "Поиск чисел с нечётными цифрами"
End Sub
Всё считается вроде правильно, в этом примере таких чисел 5.

Если заменить строку arr = Array(133, 234, 53.5, 135, 24, 35, 75)
на arr = Array(123, 234, 54.5, 135, 24, 35, 74), ответ будет 2


Я, кстати, сразу и не обратил внимания, что в Вашу функцию должен передаваться диапазон ячеек Excel, а не массив данных...

В Вашем случае лучше воспользоваться примером от IgorGO, вот только у меня при открытии приложенного им файла во всех ячейках (сразу после того, как они заполнятся случайными числами согласно формулам) отображается ошибка #ИМЯ?
EducatedFool вне форума
Старый 31.10.2008, 16:37   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

на листе используется 3 функции: СЛУЧМЕЖДУ и написанные мною HowOdd и AllOdd.
HowOdd - подсчитывает количество чисел, которые состоят только из непарных цифр, в полученном в качестве аргумента интервале. Что, собственно, требовалось в задаче.
AllOdd - возвращает ИСТИНА или ЛОЖЬ для полученного в качестве аргумента числа, соответственно, когда число состоит только из нечетных или есть хоть одно четное.
Да, есть одно ограничение - проверяются только целые числа. Для рациональных чисел необходимо править код функции.

Откуда взяться #ИМЕнам знают только программисты Била Гейтса. Все было сделано в 2007, сохранено как 2003, каких-либо предостережений при сохранении эксель не выдавал...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 31.10.2008, 16:39   #8
Sergmodern
Пользователь
 
Регистрация: 04.06.2007
Сообщений: 12
По умолчанию

EducatedFool :
Но к сожалению ничей пример не может мне помоч,т.к. как и у Вас и у меня пример Игоря открывается с заполнением ячеек,но я посмотрел код его примера и ничего все равно не могу понять,что к чему.
Sergmodern вне форума
Старый 31.10.2008, 16:40   #9
Sergmodern
Пользователь
 
Регистрация: 04.06.2007
Сообщений: 12
По умолчанию

IgorGO:
А вы можите мне помоч написать мой код?Я просто по Вашему примеру ничего понять не могу.
Sergmodern вне форума
Старый 31.10.2008, 17:02   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Откуда взяться #ИМЕнам знают только программисты Била Гейтса.
Всё оказалось очень просто...

Прочитал в справке Excel:
СЛУЧМЕЖДУ
Возвращает случайное число между двумя заданными числами. При каждом вычислении рабочего листа возвращается новое случайное число.
Если данная функция недоступна или возвращает ошибку #ИМЯ?, установите и загрузите надстройку «Пакет анализа».

А у меня «Пакет анализа» отключен.
Хотя, если честно, не понимаю, какая тут связь, ведь сначала формулы успешно обсчитываются, ячейки заполняются значениями, и лишь после этого - ошибка ...
EducatedFool вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с созданием диаграммы EducatedFool Microsoft Office Excel 2 20.10.2008 17:05
Помогите с созданием проигрователя Yarik_Net Помощь студентам 4 02.10.2008 15:55
Помогите с созданием поиска. student90 Общие вопросы Delphi 7 01.10.2008 14:33
Помогите с созданием кнопки Артэс Win Api 23 04.06.2008 04:13
Помогите с созданием программы: Wander Помощь студентам 2 19.04.2007 20:10