Как сделать формат даты через слэш

Обновлено: 04.07.2024

Данная статья посвящена форматам дат в Oracle и некоторым особенностям их обработки. В статье приведен обзор нескольких стандартных масок форматирования дат, явная и неявная конвертация строк в даты и дополнительные параметры, влияющие на этот процесс. Как и в первой части статьи, обсуждение материала происходит на основе примеров, демонстрирующих нестандартные возможности форматирования. Детально рассмотрены механизмы Oracle, участвующие в процессе неявного преобразования. Описание большинства возможностей сопровождается ссылками на соответствующие разделы документации.

Изначально я не планировал написание статьи о датах, а собирался остановиться на рассмотрении всего одного вопроса данной тематики. Однако в ходе работы возникла необходимость в освещении различных дополнительных возможностей Oracle, стали появляться новые примеры. Так рассмотрение одного вопроса разрослось в небольшую статью. Надеюсь, получилось нескучно, несмотря на не самую интересную тематику.

Первая часть статьи, посвященная особенностям оператора order by, функционированию not in и примеру неявного преобразования типов, находится здесь.

Функция to_date и форматы даты

Мало кто из программистов любит тематику форматирования. Например, на некоторых курсах темы форматирования дат и региональных стандартов специально ставят на последние часы последнего дня тренинга, т.к. слушателям нудно. Причина в большом количестве существующих форматов при относительно редком их использовании в стандартных задачах. Чаще всего маски используются в трех функциях: to_number, to_char и to_date. Во всех трех случаях маска идет вторым необязательным параметром. И если масок для форматирования чисел еще более-менее вменяемое количество, то масок для форматирования дат до неприличия много, плюс еще суффиксы и модификаторы.

Безусловно, доступность большого количества масок является позитивным моментом, поскольку расширяет возможности, например, проверить является ли 13 сентября 2011 днем программиста, можно с помощью маски 'DDD', которая возвращает номер дня в году:

Несмотря на явную пользу форматирования, я не планировал включать во вторую часть статьи обзор форматов дат и примеры использования экзотических масок. Во-первых, вряд ли это будет кому-то интересно, во-вторых, автор также не является большим почитателем сложного форматирования, поскольку редко его применяет в жизни. Единственная причина появления данного раздела – некоторые вопросы, возникшие у читателей по поводу использования формата RR.

Перед тем как перейти непосредственно к основной теме раздела, давайте рассмотрим несколько нестандартных примеров работы с датами.

Пример №1. Использование урезанных шаблонов
Начнем со стандартного форматирования. Пускай сегодняшняя дата 16.09.2011, выполнятся ли следующие запросы, и что они вернут?

Запрос №2 является типичным примером конвертации даты в строку с приведением ее к нужному формату. Единственное отличие – вместо более привычных масок вида 'DD.MM.YY' или 'DD-MON-YYYY' мы использовали маску, задающую только год. Запрос №2 выполнится успешно и вернет текущий год в четырехзначном формате, т.е. '2011'.

Запрос №3 немного интереснее, он представляет собой типичный пример явного преобразования строки в дату с урезанной маской формата, поэтому, с точки зрения синтаксиса, запрос верный и выполнится успешно. Более важным вопросом является результат его выполнения, т.е. какую дату он вернет, если задан только день? Перед ответом на данный вопрос давайте вспомним, как Oracle устанавливает время, если оно явно не задано:

В запросе №4 время не указано, в запросе №5 указано только количество минут, часы и секунды опущены. В Oracle существует правило, согласно которому, если в дате отсутствует временной компонент, то время автоматически устанавливается в значение 00:00:00 (т.е. полночь), если задана только часть элементов времени (как в запросе №5), то пропущенные элементы устанавливаются в 00. Поэтому, запрос №4 вернет строку '03.02.2011 00:00:00', а запрос №5 — '03.02.2011 00:30:00'.

Вернемся к запросу №3, верно ли данное правило для дат, т.е. заменяются ли пропущенные при конвертации элементы даты на 00 или 01? Да заменяются, но не все, точнее, для пропущенных элементов даты используются значения из sysdate (первый день текущего месяца текущего года). Поэтому запрос №3 будет использовать 09 в качестве месяца и 2011 в качестве года, таким образом, результатом выполнения запроса будет дата 03.09.2011.

Пример №2. Порядок параметров форматирования
Выполнится ли следующий запрос, и если да, то какую дату он вернет?

На первый взгляд, отсутствие разделителей в строке с датой может показаться критическим фактором несовместимым с выполнением запроса, однако маска даты также задана без разделителей и строка для преобразования соответствует указанному шаблону. Поэтому запрос №6 выполнится успешно и вернет 20.11.2009 (формат результата может несколько отличаться в зависимости от настроек сессии). Детальнее вопросы, связанные с разделителями, мы рассмотрим в следующем примере.

Пример №3. Неявная конвертация
Пусть формат даты по умолчанию DD.MON.RR, а язык даты – русский, отработает ли следующий запрос:

В данном запросе указано два строковых параметра, которые должны быть преобразованы в даты с помощью неявной конвертации. Согласно документации, при использовании форматов по умолчанию, строка для неявного преобразования в дату должна удовлетворять шаблону: [D|DD] separator1 [MM|MON|MONTH] separator2 [R|RR|YY|YYYY]. В качестве separator1 и separator2 можно использовать большинство разделительных знаков и специальных символов, в том числе пробелы, табуляцию, а также " и удвоенную одинарную кавычку ''. Более того, если в строке указано не менее двух цифр для задания дней, месяцев и лет, то separator вообще может быть опущен. Например:

Поскольку обе строки указанные в запросе №7 соответствуют приведенному шаблону, то запрос выполнится успешно и вернет число 11.

Пример №4. Параметры функции to_date
Пусть формат даты по умолчанию DD.MON.RR, а язык даты – русский, отработает ли следующий запрос:

Схожий запрос фигурировал в одном из обсуждений на странице ask Tom. Ловушка запроса в том, что мы пытаемся преобразовать дату (sysdate) в дату. Если бы запрос выглядел так:

То выполнение прошло бы успешно, и он вернул строку '09/15/2011 23:00:11'. Однако функция to_date в качестве первого параметра ожидает строку поэтому, вначале происходит неявная конвертация даты в строку (что эквивалентно вызову to_char(sysdate) с маской по умолчанию). Результатом данной конвертации является строка '15.09.11', далее происходит вызов to_date. Таким образом, запрос №11 эквивалентен следующему запросу:

Как не сложно убедиться, запрос №13 не может быть выполнен, поскольку строка '15.09.11' не соответствует установленной маске, соответственно, запрос №11 так же не может быть выполнен.

Установка формата даты по умолчанию
Формат дат по умолчанию задается двумя параметрами: NLS_DATE_FORMAT (отвечает за сам формат как таковой) и NLS_DATE_LANGUAGE (отвечает за язык, который будет использован при написании названий дней, месяцев и т.д.). Если эти параметры не заданы явно, то их значения устанавливаются на основе параметра NLS_LANG.

  1. Уровень БД: Параметры этого уровня устанавливаются при создании БД и прописываются в файле init.ora.
  2. Уровень экземпляра: Параметры этого уровня устанавливаются при старте экземпляра и могут быть изменены с помощью команды ALTER SYSTEM.
  3. Уровень сессии: Параметры этого уровня могут быть изменены командой ALTER SESSION. Также значение данных параметров можно проверить с помощью запроса:

Логично предположить, что преобразование строки '11.09.11' в дату пройдет успешно, а строки '11.SEP.11' – нет. Однако это не так, успешно выполнятся оба преобразования. Вначале я предполагал, что в случае невозможности преобразовать строку по маске сессии Oracle пытается задействовать маски других уровней (маска уровня БД у меня установлена в 'DD-MON-RR'). Чтение документации показало, что это не так, и Oracle руководствуется принципами, описанными в предыдущем пункте.

Попробуем другой пример:

Если вы думаете, что результат будет идентичен предыдущему запросу, то вы ошибаетесь. Одно из преобразований не выполнится. В данном случае строка '11.09.11' не удовлетворяет шаблону. Возможно, это мистика?

Увы, нет. Чтение документации показало, что существуют правила автозамены элементов форматирования даты. Ниже привожу таблицу замен.

Original Format Element Additional Format Elements to Try in Place of the Original
'MM' 'MON' and 'MONTH'
'MON 'MONTH'
'MONTH' 'MON'
'YY' 'YYYY'
'RR' 'RRRR'
Глядя на содержимое этой таблицы, становится понятно, что в формате 'DD.MM.RR' неявным образом присутствует формат 'DD.MON.RR' (а также 'DD.MONTH.RR' и другие), а вот в формате 'DD.MON.RR' формат 'DD.MM.RR' не присутствует, что и объясняет поведение запросов №14 и №15.

Пример №6. Формат RR vs YY
Большинству пользователей отличия масок RR и YY хорошо известны, однако есть и те, кому данная информация окажется полезной. Перейдем сразу к рассмотрению примера. Какие данные вернут следующие запросы:

Оба приведенных выше запроса выполнятся успешно и вернут даты в соответствии с правилами, описанными в примере №1 для запроса №3. Таким образом, значение дня во всех полученных датах будет равно 01, а значение месяца 09 (если вы выполняете запрос в сентябре). Главный вопрос, каким будет значение года?

Как несложно предположить, в запросе №16 под '11' я подразумевал 2011 год и обе маски мне его вернули, т.е. результат выполнения запроса №16 это 01.09.2011 и 01.09.2011.

В запросе №17 под '99' я подразумевал 1999 год и тут мнения масок разделились: маска RR вернула ожидаемый 1999 год, а маска YY – 2099, т.е. результат выполнения запроса №17 это 01.09.1999 и 01.09.2099.

Рассмотрим, как работают эти элементы форматирования более детально:

  • If the last two digits of the current year are 00 to 49, then the returned year has the same first two digits as the current year.
  • If the last two digits of the current year are 50 to 99, then the first 2 digits of the returned year are 1 greater than the first 2 digits of the current year.
  • If the last two digits of the current year are 00 to 49, then the first 2 digits of the returned year are 1 less than the first 2 digits of the current year.
  • If the last two digits of the current year are 50 to 99, then the returned year has the same first two digits as the current year.

Поэтому запрос №19 вернет 1950 год в обоих случаях.

Пример №7. Некоторые другие примеры
В завершение обзора рассмотрим немного экзотики. Будет ли ошибка в результате выполнения следующего запроса:

Если вы решили, что это бессмысленная запись, то вы ошибаетесь – это вполне корректное задание даты в соответствии со стандартом ANSI, запрос №20 выполнится успешно и вернет 25.12.1928.

Какой из запросов не выполнится?

Данный пример призван продемонстрировать наличие третьего параметра в функции to_date. Данный параметр позволяет установить значение одного из NLS (National Language Support) параметров только для этого вызова функции to_date. Установку NLS параметров для сессии мы рассматривали в примере №5. Ключевая разница запросов №20 и №21 состоит не в названии месяца (маска MON автоматически замещается маской MONTH, как это описано в примере №5), а в указании разных языков даты. Запрос №21 ожидает название месяца на английском и, соответственно, не выполнится, запрос №22 ожидает название месяца на русском и выполнится успешно.

В каком случае следующее объявление таблицы может приводить к возникновению ошибок при вставке данных?

Каждый раз, когда сессия с форматом даты по умолчанию 'DD.MON.RR' будет производить вставку с указанием только значения первого столбца будет возникать ошибка.

Особенности отображения дат в различных приложениях

Что влияет на отображение даты
Этот раздел добавлен после публикации статьи благодаря рекомендациям, указанным в комментариях. Описанное далее верно как для отображения дат, так и для отображения чисел. Возможно, при выполнении некоторых приведенных выше в статье примеров, вы получили даты в отличном от указанного в результатах формате. Если настройки вашей сессии соответствовали указанным в примерах, то это представляется, по меньшей мере, странным.

Правда заключается в том, что при выполнении запроса
вы получаете дату, но для отображения результата на экран конкретная утилита, с помощью которой вы обращаетесь к БД, должна провести конвертацию даты в строку. Таким образом, для отображения дат (и чисел) неявным образом вызывается to_char, т.е. имеем классический случай неявной конвертации (это конвертация только для вывода на экран, ее результаты не участвуют ни в каких вычислениях и ни на что кроме отображения данных не влияют). Если есть неявная конвертация, значит, существует и маска, по которой она выполняется. В классическом случае это должна быть маска, установленная для сессии, т.е. маска, указанная в параметре NLS_DATE_FORMAT таблицы nls_session_parameters, с которой мы активно работали на протяжении всей статьи.

Давайте проверим работу некоторых приложений. Проверять будем с помощью следующего скрипта:

image

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

Рис. 1. Результат выполнения запроса №25 в sqlplus.

Как видно из рис.1, формат отображения даты меняется в зависимости от настроек сессии, т.е. sqlplus использует настройки сессии. Это упрощает понимание процесса преобразования дат в строки и обратно, поскольку и для преобразования и для отображения используются одинаковые маски.

image

Некоторые продвинутые средства разработки используют свои собственные NLS настройки, не имеющие отношения к настройкам Оракл. В качестве примера проверим, какие параметры для отображения дат использует PL/SQL Developer. Для этого выполним в нем запрос №25.

Рис. 2. Результат выполнения запроса №25 в PL/SQL Developer.

image

Как видно из рис.2, формат отображения даты не меняется при изменении настроек сессии. Более того, если посмотреть внимательно, то видно, что и первый и второй результаты вывода даты на экран не соответствовали параметрам сессии (в первом случае выведенная дата имела год в четырехзначном формате, а маска указывала год в двухзначном формате). Это означает, что утилита использует собственные NLS настройки, в случае PL/SQL Developer’а их расположение указано на рис. 3.

Рис. 3. Установка NLS параметров отображения дат в PL/SQL Developer.

Чем могут быть вредны NLS настройки утилит
Отображение даты в формате отличном от формата сессии вредно по одной причине – оно вводит пользователя в заблуждение и может привести к возникновению ошибок. Выполним в sqlplus и PL/SQL Developer следующий запрос:
В последнюю строку запроса вместо ХХХХХХХХ мы будем вставлять полученные из предыдущей строки данные.

image

Результаты выполнения запроса представлены на рисунках ниже.

Рис. 4. Результат выполнения запроса №26 в sqlplus.



Рис. 5. Результат выполнения запроса №26 в PL/SQL Developer.

Почему в sqlplus выведенные на экран данные были успешно конвертированы в дату, а данные выведенные на экран PL/SQL Developer’ом не смогли сконвертироваться? Потому что для конвертации Оракл использует формат данных указанный в сессии, а данные выведенные PL/SQL Developer’ом были приведены для отображения в свой формат, отличный от формата сессии.

Заключение


В Excel есть несколько действительно умных функций, которые могут быть действительно полезны во многих случаях (а иногда и разочаровывать). Одна из таких областей — когда вы вводите числа в Excel. Иногда Excel автоматически заменяет эти числа датами.

Например, если вы введете 1/2 в Excel, Excel автоматически изменит это на 01-02-2020 (или 02-01-2020, если вы находитесь в США).

Точно так же, если вы введете 30-06-2020, Excel предполагает, что вы хотите ввести дату, и изменит ее на дату (как показано ниже).

Хотя в большинстве случаев это может быть то, что вам нужно, но что, если я этого не хочу. Что, если мне просто нужен точный текст 30-06-2020 или дробь 1/2.

Как запретить Excel менять числа на даты?

Вот о чем этот урок.


В этом руководстве по Excel я покажу вам два действительно простых способа остановить преобразование чисел в текст в Excel.

Но прежде чем я покажу вам методы, позвольте мне быстро объяснить, почему Excel это делает.

Почему Excel преобразует числа в текст?

Хотя это может расстраивать, когда Excel делает это, он пытается помочь.


В большинстве случаев, когда люди вводят числа, которые также могут представлять допустимые форматы дат в Excel, они автоматически преобразуются в даты.

И это просто не означает, что он меняет формат, это фактически изменяет базовое значение.

Например, если вы введете 3/6/2020 (или 6/3/2020, если вы находитесь в США и используете формат даты в США), Excel изменит значение ячейки на 44012, что является числовым значением даты.

Остановить Excel от автоматического преобразования чисел в даты

Единственный способ запретить Excel преобразовывать эти числа (или текстовую строку) в даты — это очистить, дав ему понять, что это не числа.


Посмотрим, как это сделать.

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

Самый простой способ убедиться, что Excel понимает, что он не должен изменять число на текущий момент, — это указать формат ячейки как текст.

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

Ниже описано, как остановить преобразование чисел в даты в Excel:

Вышеупомянутые шаги изменили бы формат ячейки на текст. Теперь, когда вы вводите любое число, например 30-06-2020 или 1/2, Excel не преобразует их в формат даты.

Примечание . Перед вводом числа необходимо изменить формат. Если вы сделаете это после ввода числа, это изменит формат на текст, но вы получите числовое значение даты, а не точное число / текстовую строку, которую вы ввели.

Этот метод лучше всего подходит, когда вам нужно изменить формат диапазона ячеек. Если вам нужно сделать это только для пары ячеек, лучше всего использовать метод апострофа, описанный ниже.

Добавьте апостроф перед числом

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

Просто добавьте знак апострофа перед вводом числа (как показано ниже).

Когда вы добавляете апостроф в самом начале, Excel считает эту ячейку текстом. Хотя вы не увидите знака апострофа, вы можете визуально увидеть, что числа будут выровнены по левому краю (указывая, что это текст).

По умолчанию все числа выравниваются по правому краю, а все текстовые значения выравниваются по левому краю.

Еще одним преимуществом использования знака апострофа является то, что вы по-прежнему можете использовать формулы поиска (например, VLOOKUP или MATCH), используя значение в ячейке. Эти функции игнорируют апостроф.

Вы также можете использовать этот метод для преобразования существующих дат в текст. Например, если у вас есть 30-06-2020 в ячейке, вы можете просто добавить апостроф (‘) в начале, и это изменит дату на текст

Хотя эти методы хороши, что делать, если у вас есть столбец, полный дат, который вы хотите использовать как текст, а не как даты. Вот несколько простых методов, которые вы можете использовать для преобразования даты в текст в Excel.

Функция Формат в 1С 8.3 предоставляет достаточно интересный инструмент разработчику для форматирования значений. Особенно часто эта функция используется для вывода примитивных типов данных (даты, времени, чисел, строки, булево) в нужном формате.

Рассмотрим подробнее функцию и способ составления форматной строки.

функция формат в 1С

Функция Формат()

Синтаксис функции достаточно прост:

Значение — форматируемое значение, Форматная строка — строка, заданная определенным образом, из которой формируется правило обработки формата.

Самое интересное — форматная строка. Рассмотрим её подробнее.

Конструктор форматной строки

Для облегчения труда разработчика фирма 1С встроила в платформу специальный конструктор форматной строки.

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

конструктор форматной строки

Сам конструктор выглядит следующим образом:

конструктор форматной строки внутри

Где необходимо выбрать нужную Вам вкладку в зависимости от типа данных — Число, Дата или Булево.

Рассмотрим использование функции на примерах.

Формат даты в 1С на примере месяца: прописью, без времени

Получить формат даты без времени:

Формат даты 1С, где месяц прописью:

Формат времени без даты, только час, минута и секунда:

Примеры формата числа

Получим формат числа с двумя точками после запятой:

Число без неразрывных пробелов:

Использование запятой вместо точки для дробной части:

Округление числа (не математическое) до целых:

Вывод лидирующих нулей без неразрывных пробелов:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

Excel предоставляет достаточно много встроенных числовых форматов, однако возможны ситуации, в которых ни один вам не подойдет. В таком случае попробуйте создать собственный (пользовательский) числовой формат. [1] Для этого, находясь в ячейке, кликните правой кнопкой мыши, и в контекстном меню выберите Формат ячеек. Откроется диалоговое окно Формат ячеек (рис. 1). Перейдите на вкладку Число. Окно Формат ячеек также можно вызвать, нажав сочетание Ctrl+1 или с помощью ленты (меню Главная), щелкнув на стрелке в правом нижнем углу группы Число (рис. 2).

Рис. 1. Окно Формат ячеек

Рис. 1. Окно Формат ячеек

Рис. 2. Вызов окна Формат ячеек с помощью ленты

Рис. 2. Вызов окна Формат ячеек с помощью ленты

Некоторые пользователи Excel стараются обходиться без создания собственных числовых форматов, так как считают этот процесс слишком трудоемким. На самом деле сложность пользовательских числовых форматов сильно преувеличена.

Для создания числового формата нужно указать серию кодов как строку числового формата. Чтобы создать пользовательский числовой формат, выполните всего три действия:

  1. Нажмите Ctrl+1, чтобы открыть диалоговое окно Формат ячеек.
  2. Щелкните на вкладке Число и выберите на ней категорию (все форматы).
  3. Введите ваш собственный формат в поле Тип.

Вот здесь и возникают некоторые сложности, поскольку требуют от вас знания кодировки форматов в Excel. Но… Во-первых, эту кодировку несложно освоить по аналогии. Для этого, просто посмотрите, как кодируются стандартные форматы. Во-вторых, синтаксис кодов не так уж и сложен, что я надеюсь показать вам в настоящей заметке. И, наконец, освоив кодировку, вы почувствуете, что перешли на новую ступень владения Excel!

Разделы кода формата

Числовые форматы могут иметь до четырех разделов кода, разделенных точкой с запятой. Эти разделы определяют формат положительных, отрицательных, нулевых значений и текста. Причем, именно в таком порядке. Почему пользователи редко замечают столь сложную структуру формата? Дело в том, что большинство стандартных форматов содержат только один раздел – для отображения любого содержания. Это означает, что отрицательные числа или текст будут отражаться в том же формате, что и положительные числа. Например, если вы введете в разные ячейки положительное, отрицательное число, ноль и текст, то Excel применит формат по умолчанию – Общий (рис. 3).

Рис. 3. Формат Общий

Рис. 3. Формат Общий

Рис. 4. Формат Числовой, тип четвертый, отрицательные – красным цветом

Рис. 4. Формат Числовой, тип четвертый: отрицательные числа – красным цветом

Чтобы увидеть, как Excel кодирует тот или иной стандартный формат, сначала выберите этот формат (например, как на рис. 4), а затем кликните на (все форматы). В области Тип, вы увидите, что формат содержит два раздела, разделенные точкой с запятой (рис. 5). Не пугайтесь, что большинство символов кода вам пока не понятны. Вскоре вы узнаете, что они обозначают. Сейчас же обратите внимание только на то, что формат содержит два раздела:

Первый – для положительных чисел, второй – для отрицательных. Символом ˽ я обозначаю пробел.

Рис. 5. Кодировка формата, использованного на рис. 4

Рис. 5. Кодировка формата, использованного на рис. 4

Ну что ж, пришло время создать ваш первый пользовательский формат. Допустим вы хотите отображать числа в формате Счет № 56-789 (рис. 6). Обращаю ваше внимание, что это именно формат отображения числа. Например, в ячейке А1 хранится число 56789. Я ввел несколько значений в ячейки А1:А4 и аналогичные в ячейки В1:В4. Ячейки А1:А4 оставлю нетронутыми (для сравнения), а В1:В4 отформатирую. Формат содержит четыре раздела: " Счет № " 00-000; " не может быть отрицательным " ; " не может быть нулем " ; " не вводите дефис " . Таким образом, при введении в ячейку положительного числа появится запись типа Счет № 23-456, при вводе отрицательного числа, нуля или текста (а значение 56-792 для Excel является тектом), появится запись, указывающая на ошибку ввода.

Рис. 6. Первый пользовательский формат

Рис. 6. Первый пользовательский формат

Текстовый раздел всегда должен быть последним разделом числового формата. Чтобы вводимый в ячейку текст отображался на экране, в соответствующее место текстового раздела следует поместить знак @. Если текстовый раздел не содержит знака @, вводимый в ячейку текст на экране отображаться не будет. Чтобы вводимый текст дополнялся определенными символами, заключите эти символы в двойные кавычки ( " " ), например, " валовой доход за " @. Если в формате нет текстового раздела (например, используется формат Общий), то формат никак не влияет на нечисловые значения, вводимые в ячейку. Т.е., текст отобразится так, как введен. Кроме того, вся ячейка преобразуется в текст, т.е., выравнивается по левому краю. Изучите рис. 7; также рекомендую открыть соответствующий лист Excel-файла.

Рис. 7. Особенности использования текстового раздела формата

Последний пример может вызвать затруднение, но, обратите внимание, что в коде формата (ячейка В4) отсутствует символ @, который определяет место, где должен отразиться введенный в ячейку текст. Т.е. содержимое ячейки С4 будет оставаться постоянным, какой бы текст не был введен в ячейку А4.

Основные коды отображения чисел

Для лучшего понимания рассмотрите примеры (рис. 8). Учтите, что когда вы вводите код формата, в соответствии с указаниями на рисунке, то он отражается именно в таком виде. Если же введенному коду формата соответствует какой-то стандартный формат, то при следующем просмотре формата (при открытии окна Формат ячеек) Excel покажет, что в ячейке именно этот стандартный формат. Чтобы опять перейти к редактированию кода формата, выберите в окне строку (все форматы).

Рис. 8. Использование основных кодов отображения числа

Рис. 8. Использование основных кодов отображения числа

Включение текстовых элементов в код формата

Чтобы в ячейке отображался текст и числа, заключите текстовые знаки в двойные кавычки ( " " ) или поставьте перед отдельным символом обратную косую черту \. Добавьте знаки в нужный раздел кода формата. Например, введите формат " Избыток " 0,00р.; " Недостаток " -0,00р., чтобы положительные значения отображались в формате " Избыток 125,74р. " , а отрицательные — в формате " Недостаток -125,74р. " . Обратите внимание, что после слов " Избыток " и " Недостаток " в соответствующих разделах кода есть пробел. Знаки, приведенные на рис. 9, не требуют кавычек.

Рис. 9. Знаки, которые можно вводить в код формата без кавычек

Использование знаков из таблицы 9 в коде формата не следует путать с их использованием в ячейке в качестве элемента формулы. В качестве части кода формата эти знаки просто отображаются. На рис. 10 видно, что в ячейку введено значение 25. Всё остальное – это лишь формат отображения.

Рис. 10. Пример знаков кода формата, отображаемых без кавычек

Рис. 10. Пример знаков кода формата, отображаемых без кавычек

Помимо знака доллара, Excel позволяет вводить без кавычек и несколько других значков валют. Их можно ввести, как до, так и после числа. Чтобы включить в числовой формат одно из указанных ниже обозначений денежных единиц, нажмите клавишу NUM LOCK и введите с цифровой клавиатуры код ANSI соответствующего символа.

Рис. 11. Символы денежных единиц в коде формата

Чтобы ввести в код формата один символ, используйте перед ним знак обратной косой черты \. Более того, поскольку кавычки " говорят Excel’ю о начале ввода текста, чтобы отразить в коде формата символ кавычек, предварите их знаком косой черты \ " .

Задание цвета

Задать цвет для раздела формата можно одним из двух способов:

  • введите название одного из указанных ниже восьми цветов в квадратных скобках: [Черный], [Белый], [Красный], [Зеленый], [Голубой], [Желтый], [Фиолетовый], [Синий];
  • введите [ЦВЕТn], где n – число от 1 до 56 и соответствует одному из цветов в палитре; первые восемь цветов соответствуют перечню из предыдущего пункта (в указанном порядке); с остальными цветами палитры можно познакомиться, например, здесь.

Код цвета должен быть первым элементом в разделе. Пример использования цвета будет приведен ниже.

Использование в формате проверочных условий

Если формат должен быть применен только в том случае, когда число отвечает определенным условиям, укажите условие в квадратных скобках [условное значение]. Условие состоит из оператора сравнения и значения (рис. 12). В первом случае формат проверяет попадает ли значение в диапазон от 0 до 1, и выводит значение в процентах; в противном случае выводится текст о недопустимом значении. Во втором случае числа не более 100 отображаются красным цветом, а более — синим. Любопытно, что третье условие мне ввести не удалось. Возможно, Excel поддерживает не более двух условий в одном формате.

Рис. 12. Использование проверочных условий в формате

Рис. 12. Использование проверочных условий в формате

Некоторые дополнительные возможности форматирования

Иногда возникает потребность выровнять числа в ячейках. Чтобы создать пробел с шириной, равной ширине символа в числовом формате, добавьте соответствующий знак, предваренный знаком подчеркивания _. Например, если за знаком подчеркивания следует правая круглая скобка _), положительные числа будут расположены в одну колонку с отрицательными, заключенными в скобки (рис. 13).

Рис. 13. Выравнивание положительных и отрицательных чисел, если последние отображаются в скобках

Рис. 14. Использование заполнителей в числовом разделе формата

Рис. 14. Использование заполнителей в числовом разделе формата

Иногда требуется отразить раздельно рубли и копейки (доллары и центы и т.п.). Методы форматирования позволяют несколько раз обратиться к одному и тому же числу, хранящемуся в ячейке, последовательно выводя его части, например:

Рис. 15. Пользовательский денежный формат

Рис. 15. Пользовательский денежный формат

Выше (см. рис. 8) мы показали, что пробел после кода числа эквивалентен делению на тысячу. Только что рассмотренный прием разделения на рубли и копейки может быть использован для масштабирования числа в сотнях. Это полезно для таких мер, как центнер, а также для перевода сантиметров в метры (рис. 16). Любопытно, что в Excel есть недокументированная особенность, которая позволяет без кавычек вводить довольно много текста (хотя некоторые буквы, как русского, так и английского алфавита всё же не проходят). На рис. 16 я привел два таких примера.

Рис. 16. Приемы масштабирования чисел

Рис. 16. Приемы масштабирования чисел и не только

Важно! Работая над созданием собственного числового формата, не забудьте о поле Образец (см., например, рис. 6). В этом поле вы видите значение активной ячейки, зависящее от строки формата, записанной в поле Тип. Обязательно тестируйте ваши пользовательские числовые форматы на примере следующих данных: положительное значение, отрицательное значение, нулевое значение, текст. Часто создать собственный числовой формат с первой попытки не удается. Всякий раз при редактировании строки формата она добавляется в список (рис. 17). Когда вы наконец сделаете строку, которая соответствует всем вашим требованиям, откройте диалоговое окно Формат ячеек, выделите и удалите результаты предыдущих неудачных попыток.

Рис. 17. Удаление промежуточных версий кода формата

Рис. 17. Удаление промежуточных версий кода формата

Коды формата даты и времени

Для отображения чисел в формате даты (с указанием числа, месяца и года) используются коды, указанные ниже.

Рис. 18. Коды, применяемые при создании пользовательских форматов даты

Для отображения значений в формате времени (с указанием часов, минут и секунд) используются коды, указанные на рис. 19. Комментарии приведены на рис. 20. Обратите внимание, что для отображения значений, превышающих 24 для часов и 60 для минут и секунд, следует использовать коды в прямоугольных скобках, например, [ч]. Использование стандартного формата – ч – при переходе через 24 часа приведет к смене даты, но значение часов всегда будет оставаться в диапазоне 0–23.

Рис. 19. Коды, применяемые при создании пользовательских форматов времени

Рис. 20. Комментарии к использованию кодов для форматирования времени (обратите внимание, что первая строка таблицы не является заголовком; это просто неточность Microsoft при оформлении таблицы :))

Завершаем обзор примерами использования пользовательских форматов даты и времени (рис. 21).

Рис. 21. Примеры пользовательских форматов даты и времени

Любопытные примеры пользовательских форматов можно найти также в Инете, например, здесь или здесь.

[1] Использованы официальные материалы Microsoft и советы Джона Уокенбаха.

Читайте также: