Страницы: 1
RSS
Не срабатывает Format в макросе
 
Здравствуйте!

Почему-то некорректно отрабатывает Format. пример прикрепляю. Подскажите, пожалуйста, в чем может быть дело.
Изменено: Chonard - 17.10.2015 22:52:24
 
Совет: форматировать не число (перед выводом в ячейку, порой превращая его в текст),
а задавать формат самой ячейки (или столбца целиком), и писать число напрямую в ячейку без преобразований
 
Chonard, Format(x, "0.000") дает текст 650,000 , в соответствии с русской локалью. Но при помещении в ячейку (неважно, через свойство Value или Formula), используется американский стандарт, в котором запятая является разделителем тысяч. В результате получается число 650000, отформатированное с русским разделителем тысяч, т.е.
650 000 .
Задайте текстовый формат ячейки, тогда Excel не будет "умничать":
Код
Range("b5").NumberFormat = "@"
Range("b5").Value = Format(x, "0.000")
Изменено: Казанский - 17.10.2015 23:19:16
 
UPD Функция Format возвращает строку, а не число. При присвоении его значению ячейки в ней оно форматируется обратно в текст. Перед присвоением значения используйте задание ячейке текстового формата
Код
Range("a4").NumberFormat = "@"


С учетом сказанного уважаемым Игорем, действительно проще так (пример для экспоненциального формата)
Код
Range("b4").NumberFormat = "0,0E+00"
Range("b4").Value = x 


Изменено: МВТ - 17.10.2015 23:30:06
 
Спасибо за рецепты.
Стало понятно, как действовать, чтобы получить нужный результат. Но не хочется заниматься совсем уж  monkey clicking. Поэтому еще задам вопрос.
Не понял, почему эта особенность возникает при передаче данных на лист. Сначала проверял код в окне  Immediate.
Из соображений удобства (для меня) на моем компьютере разделитель десятичной части числа  - точка. Не думаю, что в этом проблема.
Окно Immediate  все работает корректно:                                          На листе уже вот так:
Вы пишете, что Format дает текст. Но в ячейках получаются  вполне себе числа  - если выделить несколько строк - Excel подсчитывает сумму, среднее, максимум ...
Изменено: Chonard - 18.10.2015 10:17:29
 
Потому что, при формате ячейки "общий" эксель сам интерпретирует данные так, как считает нужным (см. пост № 4), если данные представляют из себя число, он их числом и воспринимает
 
Задайте ячейке формат
Код
Range("b4").NumberFormat = "0.000"
получите желаемое 650.000 вместо 650
 
Цитата
МВТ написал: Функция Format возвращает строку, а не число. При присвоении его значению ячейки в ней оно форматируется обратно в текст.
Цитата
Потому что, при формате ячейки "общий" эксель сам интерпретирует данные так, как считает нужным (см. пост № 4), если данные представляют из себя число, он их числом и воспринимает
У меня " когнитивный диссонанс". Согласно посту 4 в ячейку направлен текст. Т.е. для ячейки, вроде, данные представляют собой текст. Откуда она знает, что это на самом деле число?

2Hugo Спасибо, я так уже и сделал. Все получилось, как хочется.

Спрашивается: нафига нужен тогда этот Format, если он не работает так, как от него ждут.
 
Format работает как нужно, это Эксель преобразует значения как привык.
Думаю что можно добиться желаемого если через Format заполнить значениями строковый массив и выгрузить на лист его. А если ячейкам предварительно задать текстовый формат то будет ещё надёжнее :)
Но на практике сейчас не проверял.

P.S. проверил:
Код
Dim x, y
x = Val(InputBox("Значение x:  ", "Введитe", 650))
ReDim a(1 To 3, 1 To 1) As String

Range("a3").Value = "формат scientific": a(1, 1) = Format(x, "scientific")
Range("a4").Value = "формат fixed": a(2, 1) = Format(x, "fixed")
Range("a5").Value = "формат 0.000": a(3, 1) = Format(x, "0.000")
Range("b3").Resize(3, 1) = a
Изменено: Hugo - 18.10.2015 22:45:00
Страницы: 1
Читают тему
Наверх