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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2011, 05:21   #1
Randy.Mandy
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 45
По умолчанию Библиотека численных значений и цифр

Здравствуйте.

Скажите, пожалуйста, существует ли в VBA что-то вроде библиотеки, которая хранит только цифры/числа ?
Необходимо выделить только численные значения, стоящие в строке до первого пробела, а все остальное удалить. Если численных значений до пробела не встречается или встречается вперемешку с буквами в одном слове (первом слове до пробела), то занести пустую строку.
Написал процедуру, но проверка на присутствие чисел получилась очень громоздкой....и все бы ничего,но для случая, как в строке
eh3 day: count / дней : количество
проверка видит наличие цифры 3 и пропускает значение "eh3 " в результат. А в идеале должна была занести пустую строку " ",поскольку здесь присутствуют и буквы.
Или лучше просто добавить переменную типа Integer и проверять выходные значения на этот тип данных?
Файл с исходными данными и макросом приложил.

пробудлирую код

Код:
Sub cl()
Sheets("Лист2").Select
row_end = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
For i = 2 To row_end
r1 = Cells(i, 1).Value
  r1dv = Left(r1, InStr(r1, " "))
   If (InStr(r1dv, ":")) Or (InStr(r1dv, "/")) Then
   Cells(i, 2).Value = ""
  Else
  Cells(i, 2).Value = r1dv
        End If
If (InStr(Cells(i, 2), "1")) Or (InStr(Cells(i, 2), "2")) Or (InStr(Cells(i, 2), "3")) Or (InStr(Cells(i, 2), "4")) Or (InStr(Cells(i, 2), "5")) Or (InStr(Cells(i, 2), "6")) Or (InStr(Cells(i, 2), "7")) Or (InStr(Cells(i, 2), "8")) Or (InStr(Cells(i, 2), "9")) Then
Else
Cells(i, 2).Value = ""
End If
Next
End Sub
Randy.Mandy вне форума Ответить с цитированием
Старый 28.12.2011, 05:23   #2
Randy.Mandy
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 45
По умолчанию

файл с исходником и макросом))
Вложения
Тип файла: zip Randy_2.zip (15.1 Кб, 11 просмотров)
Randy.Mandy вне форума Ответить с цитированием
Старый 28.12.2011, 08:26   #3
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

попробуйте так:
Код:
Sub cl()
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    Cells(i, 2) = Val(Cells(i, 1))
Next
End Sub
nilem вне форума Ответить с цитированием
Старый 28.12.2011, 13:37   #4
Randy.Mandy
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 45
По умолчанию

........просто невероятно!
вместо моих 15 строк кода,одна из которых протяженностью километр, Ваши только 4! О_о никаких Лефтов, никаких ИнСтр и никаких библиотек...))
добавил проверку, на нулевое значение. если в рез-то ноль,то ячейка обнуляется.
Спасибо!
С наступающим Вас!!
Randy.Mandy вне форума Ответить с цитированием
Старый 10.02.2012, 02:51   #5
Randy.Mandy
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 45
По умолчанию

Скажите, пожалуйста, а какая функция считывает все цифры, включая ноль?
Здесь все замечательно и правильно работает, кроме случая, когда строка, содержащая необходимые значения, начинается с нуля (например, "0345 day: count / дней : количество") ,- нолик в результате пропадает (на выходе 0345), а он важен.

Последний раз редактировалось Randy.Mandy; 10.02.2012 в 03:59.
Randy.Mandy вне форума Ответить с цитированием
Старый 10.02.2012, 11:01   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Сперва задайте столбцу с результатами текстовый формат (иначе нули съест Эксель после помещения результата в ячейку):

Код:
Sub clHUGO()
    Dim i As Long, a
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        a = Split(Trim(Cells(i, 1)))
        If IsNumeric(a(0)) Then Cells(i, 2) = a(0)
    Next
End Sub
Но можно конечно код нарастить - задавать формат вывода динамически, или если первый 0, то добавлять впереди апостроф (тогда формат можно не менять), если не число - то очищать Cells(i, 2) или писать туда "числа нет" или ещё что-то придумать...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 10.02.2012 в 11:40.
Hugo121 вне форума Ответить с цитированием
Старый 10.02.2012, 14:21   #7
Randy.Mandy
Пользователь
 
Регистрация: 26.12.2011
Сообщений: 45
По умолчанию

Hugo121, спасибо Вам!
Кое-что дописал,- всё получилось, как надо))
Randy.Mandy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описание численных типов и математических операций Chevy Общие вопросы Delphi 3 30.09.2011 18:36
Бейсик. Найти сумму численных значений элементов одномерного массива Марька Помощь студентам 4 16.03.2010 23:01
Сортировка цифр.значений в таблице scaramanga Microsoft Office Excel 5 16.03.2010 13:23
программирование численных алгоритмов решения простейших инженерно-экономических задач Оксана_В Паскаль, Turbo Pascal, PascalABC.NET 5 09.04.2009 19:10
при достижении определённых значений в формуле должна происходить пульсация цифр или ячейки. vladi Microsoft Office Excel 3 08.04.2007 23:34