Изменение формата ячеек

Программирование на Visual Basic for Applications
Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Изменение формата ячеек

Сообщение Nicky » 16.05.2006 (Вт) 12:10

Excel: Числа не вычисляются как числовые значения.
В справке к Excel описан способ умножения на 1:
Справка писал(а):...Для преобразования чисел в числовые данные необходимо выполнить следующие действия.
1.Выделите пустую ячейку, имеющую обычный числовой формат.
Чтобы определить, какой формат у данной ячейки, выберите команду Ячейки в меню Формат и перейдите к вкладке Число. В поле Числовые форматы выберите Обычные и нажмите кнопку OK.

2.Введите в ячейку цифру 1 и нажмите клавишу ENTER.

3.Выберите соответствующую ячейку, а затем нажмите кнопку Копировать на панели инструментов Форматирование.

4.Выделите диапазон ячеек, содержащих числа в текстовом формате.

5.В меню Правка выберите команду Специальная вставка, потом операцию Умножить, а затем нажмите кнопку OK.

Руками все проделывается замечательно. При попытке проделать это же с помощью макроса (даже только что записанного по вышеприведенной схеме), получается .... не то. Кто подскажет, как из прилагаемого файла сделать нормальный?
Вложения
статистика.rar
(3.12 Кб) Скачиваний: 53

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 16.05.2006 (Вт) 12:13

Есть простой способ с дополнительными ячейками: в ячейку E2 ввести формулу "=B2+0" и растянуть, не знаю, подойдет ли тебе.
Быть... или не быть. Вот. В чём вопрос?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.05.2006 (Вт) 12:26

Лучше без дополнительных, т.к. файл получается произвольного формата, неизвестно количество и состав столбцов. Как-нибудь внутри ячеек, и диапазоном (большое кол-во строк, ~10000)

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 16.05.2006 (Вт) 12:35

Аевит 200мг №10 6,50 7,000 45,50 45,5
Аевит 200мг №10 6,60 28,000 184,80 184,8
Аевит 200мг №10 6,80 58,000 388,96 394,4
Аекол 100мл 41,00 2,000 79,95 82
Азитрокс 0,25г капс №6 239,00 2,000 466,05 478
Азитрокс 0,25г капс №6 242,00 1,000 242,00 242
Азов пюре груша 100г 13,20 3,000 39,60 39,6
Азов пюре груша 250г 22,00 2,000 44,00 44
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 16.05.2006 (Вт) 12:36

Тогда можно так:

Код: Выделить всё
    For Each i In Selection
        i.Value = 0 + i.Value
    Next i


Со специальной вставкой у меня в макросе тоже не получилось.
Быть... или не быть. Вот. В чём вопрос?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.05.2006 (Вт) 12:42

uhm
Nicky писал(а):... и диапазоном (большое кол-во строк, ~10000)

$€rg
Если правильно понял, сохранить как текст с разделителями и открыть? Тема, надо попробовать (если конечно это я сам не домыслил)

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 16.05.2006 (Вт) 12:59

формат ячеек - общий, и формула =B2*C2 и т.д.
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 16.05.2006 (Вт) 13:11

$€rg
Nicky писал(а):...файл получается произвольного формата, неизвестно количество и состав столбцов...

По поводу сохранения текста с разделителями, похоже, таки домыслил, но в верном направлении :)

[EDT]: а между прочим, способ оказался вполне приемлимым :)

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 17.05.2006 (Ср) 6:49

Не знаю, судя по всему можно так...

Код: Выделить всё
For i = 2 To 99
    value = Range("C" + Trim$(Str(i))).value
    Range("C" + Trim$(Str(i))).NumberFormat = "0.00"
    Range("C" + Trim$(Str(i))).value = value
Next i


Ну там конечно заменить цикл на нужный и подправить под задачу…
Бороться и искать, найти и перепрятать!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.05.2006 (Ср) 7:15

MeMBus
Nicky писал(а):... и диапазоном (большое кол-во строк, ~10000)

И к тому же я так пробовал, тока надо что-то типа CDbl поставить. Долго до жути :)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2006 (Ср) 9:54

Да, вариант с перебором ячеек не сканает, при 10 тысячах строк у меня без оптимизации работало несколько минут на довольно неслабом компе. Мне, все-таки, кажется, что проще через дополнительные ячейки и формулу B2+0 сделать, неважно, что там переменное число столбцов (если их меньше 128, по крайней мере :) ).
Быть... или не быть. Вот. В чём вопрос?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.05.2006 (Ср) 10:34

uhm писал(а):... Мне, все-таки, кажется, что проще через дополнительные ячейки и формулу B2+0 сделать, неважно, что там переменное число столбцов (если их меньше 128, по крайней мере :) ).

Да я практичести доделал через сохранение-открытие. Но возник еще один вопрос: раньше, когда клиенты не сильно жаловались, что "при выделении внизу не суммируется", я для подсчета суммы делал так (это уже другой документ, имеющий похожий формат, чтобы не говорили: "так а мы тебе что предлагали?")
Код: Выделить всё
  sh.Cells(2, 10).FormulaR1C1 = "=ROUND(IF(ISNUMBER(RC[-8]*RC[-7]),RC[-8]*RC[-7],0),2)"
  sh.Cells(2, 10).AutoFill Destination:=sh.Range(sh.Cells(2, 10), sh.Cells(j, 10)), Type:=xlFillDefault

И это прокатывало. Теперь формула не пересчитывается, а показывается как текст, при входе/выходе из ячейки выделяет RC[-8] ИМХО не нравится минус. Пробовал "=ROUND(IF(ISNUMBER($B2*$C2),$B2*$C2,0),2)" - тоже что-то не нравится. У кого есть идеи? И еще, у функции ПРОИЗВЕД английский синоним какой?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2006 (Ср) 10:59

MULTIPLY, может?
Если формула показывается как текст, значит, формат ячейки был установлен текстовый. Может, именно это и "не нравится"? :)
Быть... или не быть. Вот. В чём вопрос?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.05.2006 (Ср) 11:07

uhm - ты прав! (про multiply не знаю, не проверял - надобность отпала), но за 5 мин до этого я тоже допер до этого :)
Я и хотел поставить общий, но вместо General поставил @
Спасибо всем, тема закрыта


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

    TopList