Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос для выборочного преобразования содержимого ячейки из строки в число / 15 сообщений из 15, страница 1 из 1
02.04.2009, 14:12:03
    #35908356
Sergei A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Добрый день.

Возникла такая проблема:
В таблицу Excel импортируются данные в формате:

EXW value Jan Feb2007 780832.93548613.742008 558488.15327691.67Monthly Evolution-28%-40%

Соответственно, нужно макросом, во всех листах (их два или три) преобразовать "780832.93" в число (желательно, в числовой формат с разделением групп разрядов и нулём знаков после запятой), а "-28%" в число с форматом процентный, либо пропустить преобразование.

Например, этот макрос
Код: plaintext
1.
2.
3.
4.
Sub macros1()
With ActiveSheet.Range("C10:Q100") 
    .Formula = .Value
End With
End Sub
с преобразованием справляется, но он в лоб переделывает всё строки в число, не заморачиваясь с процентами.
...
Рейтинг: 0 / 0
03.04.2009, 15:15:50
    #35910937
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
так там формулы или значения
если 2, то ищем % и делаем формат...
...
Рейтинг: 0 / 0
03.04.2009, 15:17:12
    #35910945
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
нужен пример, т.к. внутреннее ПО часто импортит данные в ткстовом формате и не понятно, есть ли у вас в строке % или он ставится автоматом
...
Рейтинг: 0 / 0
03.04.2009, 15:25:27
    #35910976
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Как-нить вот так можно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub FrmtChng()
Dim Rn As Range

For Each Rn In Selection
If InStr( 1 , Rn, "%") <>  0  Then
    Rn.NumberFormat = "0%"
Else
    Rn = Rn *  1 
    Rn.NumberFormat = "#,##0"
End If
Next
End Sub
...
Рейтинг: 0 / 0
03.04.2009, 17:19:49
    #35911365
Sergei A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
PlanB,

Пример прилагаю.

Ваш пример прерывается на строке
Rn = Rn * 1
авторRun-time error '13'
Type mismatch
...
Рейтинг: 0 / 0
03.04.2009, 17:21:41
    #35911367
Sergei A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
...
Рейтинг: 0 / 0
03.04.2009, 17:35:54
    #35911388
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Конечно слетает, у вас excel точки как запяте не воспринимает! Это можно переставить. Как - в настройка windows (поиск по форуму).

Но вот так всё будет работать нацелен на выделенный диапазон. Цикл по листам, я думаю, сами сделаете:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub FrmtChng()
Dim Rn As Range

For Each Rn In Selection
If InStr( 1 , Rn, "%") <>  0  Then
    Rn = Trim(Rn)
    Rn.NumberFormat = "0%"
Else
    Rn.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    Rn = Rn *  1 
    Rn.NumberFormat = "#,##0"
End If
Next
End Sub
...
Рейтинг: 0 / 0
03.04.2009, 17:49:42
    #35911422
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Sergei A.,
Я бы на вашем месте звонил программерам, с ними вопросы решал.
Выгрузка из ПО должна быть материалом для анализа, а не сырыми данными...
...
Рейтинг: 0 / 0
05.04.2009, 18:40:25
    #35913089
Папа Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Sergei A.Добрый день.

Возникла такая проблема:
В таблицу Excel импортируются данные в формате:

EXW value Jan Feb2007 780832.93548613.742008 558488.15327691.67Monthly Evolution-28%-40%

Соответственно, нужно макросом , во всех листах (их два или три) преобразовать "780832.93" в число (желательно, в числовой формат с разделением групп разрядов и нулём знаков после запятой), а "-28%" в число с форматом процентный, либо пропустить преобразование.


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

Поиск и замена. Найти - точку. Заменить на - запятая. Отформатируйте как хотите и не мучайте себя с VBA.
...
Рейтинг: 0 / 0
05.04.2009, 19:00:31
    #35913106
Папа Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Папа Игорь...Поиск и замена...

В догонку.

Еще проще сделать шлюз для Вашего файла используя что-то типа этого:

=ЗНАЧЕН(ПОДСТАВИТЬ(A1;".";","))
...
Рейтинг: 0 / 0
05.04.2009, 19:45:40
    #35913171
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
ПИ,
Господин выложил пример, там проще в vba, т.к. чёрт знает как выгружаются данные из ПО
...
Рейтинг: 0 / 0
05.04.2009, 20:00:21
    #35913196
Папа Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
PlanBПИ,
Господин выложил пример, там проще в vba, т.к. чёрт знает как выгружаются данные из ПО

Я посмотрел пример. На основе примера дал совет. Выгруженные данные из другого ПО не хаотичны. Они имеют относительно стабильную структуру.

Подход шлюзов к данным с такими делами справляется "на ура".

Вы считаете проще делать это на VBA - делайте. Я считаю, что проще сделать шлюз.

Есть много способов содрать с кошки шкурку.
...
Рейтинг: 0 / 0
06.04.2009, 04:38:22
    #35913462
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Чтобы не мучить кошек:
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Text2Num()
  With ActiveSheet.UsedRange
    .NumberFormat = "General"
    .Value = .Value
  End With
End Sub
...
Рейтинг: 0 / 0
06.04.2009, 05:00:06
    #35913467
Папа Игорь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
ZVIЧтобы не мучить кошек:
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Text2Num()
  With ActiveSheet.UsedRange
    .NumberFormat = "General"
    .Value = .Value
  End With
End Sub


А зачем же предложили еще один способ содрать с нее (кошки) шкурку?
...
Рейтинг: 0 / 0
18.04.2009, 01:15:04
    #35940027
Sergei A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос для выборочного преобразования содержимого ячейки из строки в число
Дабы подвести итог.
Спасибо все участвовавшим, особенно ZVI - в дело пошёл его слегка переделанный макрос.

авторЯ бы на вашем месте звонил программерам, с ними вопросы решал.
Ну, собственно я этот отчёт и писал, но возникла проблема несоответствия ТехЗадания и пользовательского представления о нём, с возможностями построителя отчётов и MS SQL.

авторВыгрузка из ПО должна быть материалом для анализа, а не сырыми данными...
Ну, основная аналитика на сервере и выполняется, просто пользователям, как выяснилось позже, может понадобится посчитать банальную сумму по столбцу/строке.

Поиск и замена. Найти - точку. Заменить на - запятая.
Первым делом это сделал :)
Проблема только в том, что пришлось бы так делать каждый раз после выгрузки отчёта, а если записать макрос и выполнить - то нужный эффект не достигается :(

Пришлось задействовать VBA и немного подправить процедуру.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос для выборочного преобразования содержимого ячейки из строки в число / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]