Schöck
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Excel. Пользовательская функция замещения буквенных индексов числовыми

Excel. Пользовательская функция замещения буквенных индексов числовыми

Ответ
Поиск в этой теме
Непрочитано 06.07.2010, 11:33 #1
Excel. Пользовательская функция замещения буквенных индексов числовыми
AlphaGeo
 
Сообщений: n/a

Пишу пользовательскую функцию для Excel'я. Функция имеет один аргумент, в котором должна определять наличие буквенного индекса и замещать его на двузначный числовой код. В случае, если буквенный индекс отсутствует, функция должна просто добавлять к аргументу два нуля. Результат вычисления функции должен быть числом.
Вот что я наклепал:
Код:
[Выделить все]
Function EqNumElement(Num)
' Эквивалентный номер ИГЭ
'
   
    Dim Suffix As String 'Определяем переменную, содержущую суффикс для эквивалентного номера ИГЭ
    Suffix = "0" 'Задаем начальное значение переменной
    Suffix = Format(Suffix, "00") 'Форматируем значение суффикса

    Dim NewNum As String 'Определяем переменную, содержащую эквивалентный номер ИГЭ в текстовом формате
    NewNum = Str(Num) + Suffix 'Задаем значение переменной
    
    Dim alphabetArray(0 To 28) As String 'Определяем массив русского алфавита
        alphabetArray(0) = "а"
        alphabetArray(1) = "б"
        alphabetArray(2) = "в"
        alphabetArray(3) = "г"
        alphabetArray(4) = "д"
        alphabetArray(5) = "е"
        alphabetArray(6) = "ж"
        alphabetArray(7) = "з"
        alphabetArray(8) = "и"
        alphabetArray(9) = "к"
        alphabetArray(10) = "л"
        alphabetArray(11) = "м"
        alphabetArray(12) = "н"
        alphabetArray(13) = "о"
        alphabetArray(14) = "п"
        alphabetArray(15) = "р"
        alphabetArray(16) = "с"
        alphabetArray(17) = "т"
        alphabetArray(18) = "у"
        alphabetArray(19) = "ф"
        alphabetArray(20) = "х"
        alphabetArray(21) = "ц"
        alphabetArray(22) = "ч"
        alphabetArray(23) = "ш"
        alphabetArray(24) = "щ"
        alphabetArray(25) = "ы"
        alphabetArray(26) = "э"
        alphabetArray(27) = "ю"
        alphabetArray(28) = "я"

    Dim LastCharacter As String 'Определяем переменную, содержащую последний символ номера ИГЭ
    LastCharacter = Right(Num, 1) 'Задаем значение переменной

    For i = 0 To 28 'Запускаем цикл сравнения последнего символа номера ИГЭ с данными из массива русского алфавита
        If LastCharacter = alphabetArray(i) Then 'Условие проверки
            Suffix = i + 1 'Приравниваем значение суффикса к порядковому номеру элемента массива, прошедшего в соответствии с заданным условием, плюс 1 (поскольку элементы массива считаются от 0)
            Suffix = Format(Suffix, "00") 'Форматируем значение суффикса
            NewNum = Mid(Num, 1, Len(Num) - 1) + Suffix 'Задаем значение переменной , содержащую эквивалентный номер ИГЭ в текстовом формате
            Exit For
        End If
    Next 'Завершение цикла
    
    EqNumElement = Val(NewNum)
End Function
Проблема в том, что при включенной строчке, выделенной красным, функция прекрасно справляется с аргументами без буквенных индексов. Однако для аргументов с буквенными индексами выдает результат #ЗНАЧ!. И, судя по моим наблюдениям, вычисление функции происходит даже без обращения к циклу FOR... NEXT. Если же строку отключить (закомментировать), то цикл прекрасно выполняется, но, соответственно, функция работает только с аргументами, у которых имеется буквенный индекс (что вполне логично).
Я пробовал вставлять вычисления для безбуквенных аргументов в тело цикла, но это опять-таки не приводило к желаемому результату.
Может, кто подскажет, как с этой проблемой справиться?

P.S. На всякий случай прикреплю и файлик *.xls с кодом

Вложения
Тип файла: zip Эквивалент.zip (10.0 Кб, 58 просмотров)

Просмотров: 3944
 
Непрочитано 06.07.2010, 11:43
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,483


Попробуй
Код:
[Выделить все]
NewNum = CStr(Num) + Suffix 'Задаем значение переменной
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.07.2010, 12:12
#3
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй
Код:
[Выделить все]
NewNum = CStr(Num) + Suffix 'Задаем значение переменной
Ооо!!! Да, Алексей! Заработало! Спасибо большое.
 
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Excel. Пользовательская функция замещения буквенных индексов числовыми

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще раз про Excel mmax Программирование 25 14.01.2010 11:12
Функция замещения команды копирования с базовой точкой Torero_80 Программирование 3 12.12.2008 00:31