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

Вход

Регистрация

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

 

= Мир MS Excel/преобразование строки в числовой эквивалент - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » преобразование строки в числовой эквивалент (Макросы/Sub)
преобразование строки в числовой эквивалент
Мурад Дата: Вторник, 15.04.2014, 17:08 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Товарищи экселисты! Я - чайник, но я учусь! Учусь по Эйткену. Дошел до преобразования текста в число. Решил поставить себе задачу преобразования в выделенном диапазоне текста в число. Вот мой код по теме:
[vba]
Код
Public Sub numbers()
Dim i As Integer
With ActiveSheet.UsedRange
Cells(i) = Val(Cells(i))
i = i + 1
End With
End Sub
[/vba]
Ошибки здесь в каждой строчке, но чтобы их исправить мне нужна Ваша помощь!
Нужно пройтись циклом по каждой ячейке в диапазоне. Тут-то и проблемы у меня. За выделенный диапазон я беру ActiveSheet.UsedRange, но выскакивает ошибка
 
Ответить
СообщениеТоварищи экселисты! Я - чайник, но я учусь! Учусь по Эйткену. Дошел до преобразования текста в число. Решил поставить себе задачу преобразования в выделенном диапазоне текста в число. Вот мой код по теме:
[vba]
Код
Public Sub numbers()
Dim i As Integer
With ActiveSheet.UsedRange
Cells(i) = Val(Cells(i))
i = i + 1
End With
End Sub
[/vba]
Ошибки здесь в каждой строчке, но чтобы их исправить мне нужна Ваша помощь!
Нужно пройтись циклом по каждой ячейке в диапазоне. Тут-то и проблемы у меня. За выделенный диапазон я беру ActiveSheet.UsedRange, но выскакивает ошибка

Автор - Мурад
Дата добавления - 15.04.2014 в 17:08
krosav4ig Дата: Вторник, 15.04.2014, 18:06 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
[vba]
Код
Public Sub numbers()
For Each oCell In ActiveSheet.UsedRange.Cells
     If oCell <> "" And Val(oCell) <> 0 Then
         oCell.Formula = Val(oCell)
     End If
Next
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение[vba]
Код
Public Sub numbers()
For Each oCell In ActiveSheet.UsedRange.Cells
     If oCell <> "" And Val(oCell) <> 0 Then
         oCell.Formula = Val(oCell)
     End If
Next
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 15.04.2014 в 18:06
KuklP Дата: Вторник, 15.04.2014, 21:12 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Будет пример, может подскажем способ побыстрей и технологичней.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеБудет пример, может подскажем способ побыстрей и технологичней.

Автор - KuklP
Дата добавления - 15.04.2014 в 21:12
Мурад Дата: Среда, 16.04.2014, 13:23 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
я лично выбрал диапазон ячеек A1:H15, формат ячеек сделал текстовым. Забил в случайном порядке числа в разные ячейки.
 
Ответить
Сообщениея лично выбрал диапазон ячеек A1:H15, формат ячеек сделал текстовым. Забил в случайном порядке числа в разные ячейки.

Автор - Мурад
Дата добавления - 16.04.2014 в 13:23
Hugo Дата: Среда, 16.04.2014, 14:25 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Ошибка не в каждой строчке, но есть. 2 штуки, и одна может вылезти позже.
1 - если пишите with, то внутри нужны точки! Иначе with смысла не имеет.
2 - i = i + 1 пишите перед использованием i - сейчас при первом использовании i=0, что и вызывает ошибку.
3 - Integer для значений, которые могут быть больше предела Integer использовать конечно же нежелательно.
4 - "За выделенный диапазон я беру ActiveSheet.UsedRange" - тут непонятно. Возможно тоже можно посчитать за ошибку. Это разные вещи.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеОшибка не в каждой строчке, но есть. 2 штуки, и одна может вылезти позже.
1 - если пишите with, то внутри нужны точки! Иначе with смысла не имеет.
2 - i = i + 1 пишите перед использованием i - сейчас при первом использовании i=0, что и вызывает ошибку.
3 - Integer для значений, которые могут быть больше предела Integer использовать конечно же нежелательно.
4 - "За выделенный диапазон я беру ActiveSheet.UsedRange" - тут непонятно. Возможно тоже можно посчитать за ошибку. Это разные вещи.

Автор - Hugo
Дата добавления - 16.04.2014 в 14:25
Мурад Дата: Пятница, 18.04.2014, 11:33 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
krosav4ig, сегодня кстати использовал твой код для исправления текстовых значений в плане закупок. Запустил.
Значения начальной цены поправились, а вот сроки размещения и исполнения контракта, указанные в формате Даты 01.хх.хх поменялись на 1900 год... Так что надо поправить маленько код. Вот тебе кусок от моей таблицы, проверь сам.
[p.s.] да, и еще во второй графе значения с точкой меняет на значения с запятой.
К сообщению приложен файл: 2658804.xlsx (10.9 Kb)


Сообщение отредактировал Мурад - Пятница, 18.04.2014, 11:36
 
Ответить
Сообщениеkrosav4ig, сегодня кстати использовал твой код для исправления текстовых значений в плане закупок. Запустил.
Значения начальной цены поправились, а вот сроки размещения и исполнения контракта, указанные в формате Даты 01.хх.хх поменялись на 1900 год... Так что надо поправить маленько код. Вот тебе кусок от моей таблицы, проверь сам.
[p.s.] да, и еще во второй графе значения с точкой меняет на значения с запятой.

Автор - Мурад
Дата добавления - 18.04.2014 в 11:33
krosav4ig Дата: Вторник, 22.04.2014, 18:22 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
как-то так [vba]
Код
Public Sub numbers()
With ActiveSheet.UsedRange
        For Each oCell In .Range("A:A,C:K,N:O")
            If oCell <> "" And Val(oCell) <> 0 Then
                oCell.Formula = Val(oCell)
            End If
        Next
End With
End Sub
[/vba]

если в таблицу будут добавляться столбцы справа, которые нужно будет обработать, то можно вместо

[vba]
Код
For Each oCell In .Range("A:A,C:K,N:O")
[/vba]
написать
[vba]
Код
For Each oCell In .Range("A:A,C:K,N:" & _
           Split(Columns(.Column + .Columns.Count - 1).Address(False, False), ":")(0))
[/vba]

чтобы ускорить работу макроса можно ограничить диапазон, указав количество обрабатываемых строк, но этот способ работает только с непрерывными диапазонами, из-за этого приходится добавлять еще один цикл
[vba]
Код
Public Sub numbers()
With ActiveSheet.UsedRange
     For Each Rng In Array("A:A", "C:K", "N:O")
         For Each ocell In .Range(Rng).Rows(.Row & ":" & .Row + .Rows.Count - 1).Cells
             If ocell <> "" And Val(ocell) <> 0 Then
                 ocell.Formula = Val(ocell)
             End If
         Next
     Next
End With
End Sub
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Среда, 23.04.2014, 17:10
 
Ответить
Сообщениекак-то так [vba]
Код
Public Sub numbers()
With ActiveSheet.UsedRange
        For Each oCell In .Range("A:A,C:K,N:O")
            If oCell <> "" And Val(oCell) <> 0 Then
                oCell.Formula = Val(oCell)
            End If
        Next
End With
End Sub
[/vba]

если в таблицу будут добавляться столбцы справа, которые нужно будет обработать, то можно вместо

[vba]
Код
For Each oCell In .Range("A:A,C:K,N:O")
[/vba]
написать
[vba]
Код
For Each oCell In .Range("A:A,C:K,N:" & _
           Split(Columns(.Column + .Columns.Count - 1).Address(False, False), ":")(0))
[/vba]

чтобы ускорить работу макроса можно ограничить диапазон, указав количество обрабатываемых строк, но этот способ работает только с непрерывными диапазонами, из-за этого приходится добавлять еще один цикл
[vba]
Код
Public Sub numbers()
With ActiveSheet.UsedRange
     For Each Rng In Array("A:A", "C:K", "N:O")
         For Each ocell In .Range(Rng).Rows(.Row & ":" & .Row + .Rows.Count - 1).Cells
             If ocell <> "" And Val(ocell) <> 0 Then
                 ocell.Formula = Val(ocell)
             End If
         Next
     Next
End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 22.04.2014 в 18:22
Мир MS Excel » Вопросы и решения » Вопросы по VBA » преобразование строки в числовой эквивалент (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!