Це питання трохи старе, але на сьогоднішній день, здається, немає відповіді. Я також бачив подібні запитання на ряді сайтів, але поки не знайшов жодної відповіді, що передбачає лише вбудовані функції Excel. Однак вирішити це за допомогою VBA досить просто. Вам навіть не потрібно знати, як запрограмувати це, бо потрібна функція така проста.
З відкритою робочою книжкою просто натисніть Alt + F11 (щоб відкрити редактор VBA). Потім натисніть пункт меню Вставити > Модуль
У новому модулі VBA введіть наступне:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Це просто використовувати власну Format
функцію VBA замість функції Excel TEXT
. Це саме те, що ви хочете.
Ця нова функція буде форматувати будь-яку дату (або число) відповідно до вказаного рядка формату. Він буде інтерпретувати рядок формату, використовуючи стандартне позначення ( en-US ), незалежно від регіональних налаштувань операційної системи.
Щоб використовувати це у своїй робочій книжці, просто введіть, =FMT(A1, "yyyymmdd_hhss")
а не =TEXT(A1, "yyyymmdd_hhss")
. (Звичайно, ви можете змінити посилання на клітинку та форматувати рядок за необхідності.)
До речі, ви можете назвати функцію все, що завгодно. Я вибрав FMT
це тому, що він був короткий і через те, що функція може форматувати і цифри, і дати. Але ви можете вибрати щось більш описовий, якщо хочете. Просто пам’ятайте, що на вашому робочому аркуші використовується те саме ім’я, що і в коді VBA.
Зауважте, що рядки формату VBA не точно такі, як рядки користувацького формату Excel (наприклад, використовуйте "n" замість "m" хвилин), але вони дуже схожі. Подивіться тут, щоб отримати детальну інформацію, або знайдіть MSDN для "Формат функцій (Visual Basic для додатків)". Прокрутіть донизу, щоб побачити різні специфікатори формату дати.
Спосіб 2
Інший підхід, який також використовує VBA, але насправді може бути простішим у обслуговуванні, такий:
- Застосуйте потрібний формат дати до комірки, скориставшись звичайним діалогом Формат комірок. Ця комірка може знаходитись на прихованому аркуші, якщо вам зручніше - її не потрібно відображати кінцевому користувачеві. Припустимо, ви застосували формат
yyyymmdd\_hhss
до клітинки $ A $ 1 (зауважте, що підкреслення потрібно уникати, як показано).
- Додайте
GetFormat
функцію (показану нижче) до модуля VBA у своїй робочій книжці.
- Введіть
=GetFormat($A$1, TRUE)
в іншу клітинку (наприклад, $ B $ 1 )
- Ця функція поверне локалізовану версію рядка формату. Таким чином , навіть якщо ви спочатку відформатований $ A $ 1 з
yyyymmdd\_hhss
, коли ви відкриваєте книгу на комп'ютері , використовуючи французьку мову (наприклад), то функція покаже aaaammjj\_hhss
.
- Тепер просто посилайтеся на другу клітинку у всіх своїх
TEXT
функціях. Наприклад: =TEXT(F22, $B$1)
.
Ось код VBA:
Public Function GetFormat$(Cell As Range, Optional ByVal UseLocal As Boolean)
If UseLocal Then
GetFormat = Cell.NumberFormatLocal
Else
GetFormat = Cell.NumberFormat
End If
End Function
Це дозволяє нам "перевірити" первісно відформатовану клітинку ($ A $ 1), щоб отримати локалізований формат-рядок. Цей рядок буде представляти той самий формат, який ви застосували, але він буде використовувати правильні літери для TEXT для інтерпретації (наприклад, "j" замість "d"), тому відображене значення дат буде постійним у всіх локалях. Якщо ви хочете використовувати лише один формат дати для всієї робочої книги, вам потрібно буде виконати кроки 1-4 один раз. Потім повторіть крок 5 (функція TEXT) у всіх клітинках, де ви зараз його використовуєте, але замість жорсткого кодування формату, ви просто посилаєтесь на клітинку, що містить локалізований формат-рядок ( $ B $ 1 у прикладі інструкцій) .
Зауважте, що другий аргумент GetFormat
вказує функції, повертати чи ні локалізовану версію (що залежить від регіональних налаштувань), або "стандартну" версію (яка завжди базується на en-US).
Ось кілька знімків екрана, які можуть зробити це більш зрозумілим.
- На малюнку, у колонці 1 перераховано декілька зображень однієї дати із застосованими різними форматами.
- Зауважте, що у рядках 2 та 3 використовуються формати дат Excel "за замовчуванням". (Вони позначені провідною зірочкою у діалоговому вікні форматування, і вони вказують на те, що слід використовувати формат дати користувача за замовчуванням.) Також зауважте, що у рядку 5 використовується скобований LCID, який змушує мову, що використовується для імен місяця та дня, бути англійською ( різні LCID можна використовувати для вказівки інших мов).
- Другий стовпець показує результат
GetFormat(Cell, FALSE)
для кожної комірки в стовпці 1. (Нагадаємо, що FALSE
для другого параметра функція повертає NON-локалізовані формати).
- Третій стовпчик показує, що
GetFormat(Cell, TRUE)
повертається для кожної комірки у стовпці 2. (тобто локалізовані формати).
- Четвертий стовпець показує результат функції TEXT, використовуючи вихідне, необроблене значення дати та локалізований результат
GetFormat
повторного створення формату, показаного у колонці 1. Однак зауважте, що до цього стовпця не було застосовано форматування чисел NO. Значення є прямим результатом функції TEXT.
Наведені вище результати для англійського (американського) випадку не дуже цікаві, але ви можете порівняти їх із наступними результатами, отриманими зміною регіональних налаштувань моєї операційної системи на різні інші локалі. Важливо відзначити, що за допомогою GetFormat
комбінації TEXT
ми можемо зберегти постійний результат для числових форматів (тих, що не включають назви днів і місяців) у всіх локальних місцях. І обмежуючи мову за допомогою LCID (як у рядку 5), ми можемо навіть зберегти постійний формат, включаючи імена днів і місяців.
Цей метод працює для більшості локалів, однак слід зазначити, що сценарії, які використовуються для представлення індуїстсько-арабських цифр, НЕ однакові у всіх мовах. Тому регіональні параметри, такі як параметри непальської (Індія), призводять до форматів дат, які "виглядають" інакше, ніж дати в США. Але вони насправді в тому ж "форматі" щодо позицій чисел - вони просто використовують різні символи для чисел.