Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
7 / 7 / 0
Регистрация: 14.03.2013
Сообщений: 231

Странно себя ведет функция Format

30.04.2013, 09:32. Показов 4515. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Не могу понять, это только у меня так?

Если в ячейку (1,1) записать число, а в формате ячейки поставить "Общий" а потом выполнить код:

Visual Basic
1
2
3
With Cells(1, 1)
  MsgBox Format(.Value, .DisplayFormat.NumberFormat)
End With
Выводит: Ge0eral

Если формат ячейки поменять на любой другой кроме "Общий", тогда отрабатывает корректно.
Или в ячейку (1,1) записать не число и поставить "Общий", тоже отрабатывает корректно.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.04.2013, 09:32
Ответы с готовыми решениями:

Пользовательская функция в условном форматировании странно себя ведёт
Созданная функция при вставке её в условное форматирование всё время пересчитывается, как будто работает в цикле. А при вводе функции в...

Странно ведёт себя функция fgets
(в файле лежит предложение на английском) int main() { FILE *f; char str; if ((f=fopen("Е:\\...имя...

Функция для работы с сетью ведёт себя странно
Нужно преобразовать строку с ipv4 адресом в целое беззнаковое число. Решил использовать inet_aton, пример ip - 188.209.67.9. Для контроля...

7
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
30.04.2013, 10:05
У всех так. Маски формата для VBA функции Format и для ячейки - различные.
Используйте Cells(1, 1).Text .
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
30.04.2013, 10:29
Здравствуйте, oleggy,
Попробуйте почитать справку. Установите курсор на слово Format и вызовите справку (F1).

Мы видим следующее:

nhttps://www.cyberforum.ru/cgi-bin/latex.cgi?\; \; \; \; \; \;Display the minute as a number without leading zeros (0 - 59).

Т.е. если в ячейку вами введено число, то Excel пытается сконвертировать его в дату/время, а затем изучает количество минут в получившейся дате. Если число не имеет дробной части, то количество минут = 0, и вместо n выводится 0.

Если вы хотели получить информацию о формате ячейки, тогда функция Format вообще не нужна:

Visual Basic
1
MsgBox Cells(1).NumberFormat
Если вы хотели оформить число с использованием именованых форматов, то выбирать можно только из следующего списка:

General Number
Display number with no thousand separator.
Currency
Display number with thousand separator, if appropriate; display two digits to the right of the decimal separator. Output is based on system locale settings.
Fixed
Display at least one digit to the left and two digits to the right of the decimal separator.
Standard
Display number with thousand separator, at least one digit to the left and two digits to the right of the decimal separator.
Percent
Display number multiplied by 100 with a percent sign (%) appended to the right; always display two digits to the right of the decimal separator.
Scientific
Use standard scientific notation.
Yes/No
Display No if number is 0; otherwise, display Yes.
True/False
Display False if number is 0; otherwise, display True.
On/Off
Display Off if number is 0; otherwise, display On.

Обратите внимание, что формата General среди них нет.

С уважением,
Aksima
3
7 / 7 / 0
Регистрация: 14.03.2013
Сообщений: 231
30.04.2013, 11:14  [ТС]
Я и использовал такой код:
Visual Basic
1
Format(.Value, .DisplayFormat.NumberFormat)
Для перевода значение хранящееся в ячейке в строковый вид согласно формату отображения данной ячейки.
Грубо говоря как отображается ячейка в Excel так она и должна сохранится в строковой переменной.

Добавлено через 5 минут
Цитата Сообщение от Aksima Посмотреть сообщение
Если вы хотели получить информацию о формате ячейки, тогда функция Format вообще не нужна:
Visual Basic
1
MsgBox Cells(1).NumberFormat
Aksima, не понял, а чем отличается:
Visual Basic
1
.DisplayFormat.NumberFormat
от
Visual Basic
1
.NumberFormat
По идее NumberFormat является членом DisplayFormat или я ошибаюсь?

Добавлено через 7 минут
Цитата Сообщение от Казанский Посмотреть сообщение
У всех так. Маски формата для VBA функции Format и для ячейки - различные.
Используйте Cells(1, 1).Text .
Казанский, использовал..
Visual Basic
1
Format(.Text, .NumberFormat)
Так же обрабатывается некорректно, для числа с форматом Общий.
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
30.04.2013, 11:18
Цитата Сообщение от oleggy Посмотреть сообщение
Не понял, а чем отличается:
.DisplayFormat.NumberFormat
от
.NumberFormat
Ничем не отличается, но запись
Visual Basic
1
.NumberFormat
короче, поэтому предпочитаю такую запись.


Цитата Сообщение от oleggy Посмотреть сообщение
По идее NumberFormat является членом DisplayFormat или я ошибаюсь?
Нет, не ошибаетесь. Свойство NumberFormat является членом как класса Range, так и класса DisplayFormat.

С уважением,
Aksima
0
7 / 7 / 0
Регистрация: 14.03.2013
Сообщений: 231
30.04.2013, 11:33  [ТС]
Aksima, выходит не существует короткого кода VBA что бы сохранить в String значения ячейки в том виде в котором она отображается в Excel ?

Добавлено через 2 минуты
И еще просвятите:
Cells(1, 1).Value
Cells(1, 1).Text
отличаются чем?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
30.04.2013, 18:24
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от oleggy Посмотреть сообщение
выходит не существует короткого кода VBA что бы сохранить в String значения ячейки в том виде в котором она отображается в Excel ?
Это как раз свойство .Text.
Например, в ячейке формула =1/7 , формат ч:мм:сс
Visual Basic
1
2
3
Dim v
v = Cells(1, 1).Value   '0,142857142857143  Variant/Double
v = Cells(1, 1).Text    '"3:25:43"          Variant/String
Добавлено через 9 минут
Однако, если уменьшить ширину столбца так, что текст не будет умещаться и будет отображаться ####, то свойство .Text вернет #### - буквально то, что отображается на экране. На этот случай можно использовать функцию листа ТЕКСТ - аналог VBA функции Format. Получается почти то, с чего Вы начали:
Visual Basic
1
2
3
With Cells(1, 1)
  MsgBox Application.Text(.Value, .NumberFormat)
End With
3
7 / 7 / 0
Регистрация: 14.03.2013
Сообщений: 231
06.05.2013, 08:22  [ТС]
Казанский, выходит в данном случае праильно обрабатывать такую ситуацию так:

Visual Basic
1
2
3
4
5
6
If .NumberFormat = "General" Then ' если формат ячейки "Общий", то
  ' работаем с .Value
Else ' если формат текущей ячейки любой другой, то
  val = Format(.Value, .NumberFormat)
  ' работаем с val
End If
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2013, 08:22
Помогаю со студенческими работами здесь

МП странно себя ведет
господа нужна ваша помощь купил материнку AsRock g31m-s шла вместе с селероном е1400 с ним работает но как только ставлю корку...

Странно ведет себя
Здравствуйте,помогите пожалуйста,первый раз в жизни делаю верстку,через два дня сдавать,проблема походу в слоях. Сильно не пинайте и...

Компьютер странно себя ведет
Помогите пожалуйста. При входе в учетную запись выдается два сообщения на запуск програм и когда соглашаешься получаем синий экран. При...

Яша ведет себя странно...
Сайт www.bis-n.ru активно раскручивается с декабря 2005 года, в нете с 1998. В Рамблере на 1-й стр. по ВЧ -- КОМПЬЮТЕРНЫЕ СТОЛЫ -- за все...

Ноут странно себя ведет
Доброго времени суток!пожалуйста помогите мне советом,у меня глючит ноутбук и писчит когда включаеться,у меня установлен антивирус...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru