Как установить формат даты при ручной вставке даты в Excel, не меняя региональные настройки?

Как установить формат даты при ручной вставке даты в Excel, не меняя региональные настройки?

В моем регионе дата вставляется как дд/мм/гггг или вариации этого (включая дд-мм-гг). Я создал форму Excel (в обычном файле Excel), уже отформатированную для отображения даты как дд/мм/гггг, но когда я набираю "05/04/2015", она отображается как "04/05/2015". Я знаю, что это можно решить, изменив региональные настройки на мои местные, но мне нужно распространить эту форму среди множества людей, которые не знают, как менять региональные настройки, и предполагая, что никто не может научить, как это сделать, поэтому мой вопрос:

Есть ли способ ввести «05/04/2015» и быть распознанным как «5 апреля 2015 г.», не меняя региональные настройки?

Дополнительное примечание: когда я имею в виду «4 мая 15» (введено как 4/5/15), Excel распознает это как «5 апреля 15», поскольку Excel принимает ввод в формате «мм/дд/гг». Мне нужно изменить поведение Excel по умолчанию, чтобы оно принимало вид «дд/мм/гггг»поскольку именно таким образом пользователи будут вводить данные.

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

Я не знаком с макросами и VBA, но готов попробовать :)

EDIT: это связано с моим вопросом: Как изменить формат даты с дд-мм-гггг на дд-мм-гг в строке формул MS-EXCEL?

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

решение1

Событие Worksheet_Changeможет по сути выполнить то, что вы просите, но вы должны быть уверены, что пользователь намерен что-то изменить. Я добавил поле 'Yes/No'выбора в свое решение, чтобы предотвратить любые случайные изменения. Делать это без поля выбора рискованно, потому что если вы попытаетесь изменить существующее значение, оно вернется к исходному форматированию.

Этот код должен «жить» внутри кода VBA для листа, на котором вы хотите, чтобы он действовал:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim iDay, iMonth, iYear As Integer
Dim solutionRange As Range

'the cells you want the date to change for
Set solutionRange = Range("D4:D12")

'only triggers if the user's changing one cell
If Target.Count = 1 Then
    If (Not (Intersect(solutionRange, Target) Is Nothing) And (Target.Value > 0)) Then
        'disable application events so this change doesn't trigger itself
        Application.EnableEvents = False

        iDay = Left(Target.Value, 2)
        iMonth = Mid(Target.Value, 4, 2)
        iYear = Right(Target.Value, 4)

        ' Give the user a choice to say whether they need the date changed. You *can* remove both the 'If' and 'End If' if you really need to, but I'd strongly suggest keeping them.
        If (MsgBox("Have you entered your date in the format 'MM/DD/YYYY'?", vbYesNo) = vbYes) Then
            Target.Value = DateValue(iMonth & "/" & iDay & "/" & iYear)
        End If

        Application.EnableEvents = True
    End If
End If
End Sub

решение2

Я точно знаю, о чем вы говорите. Мне нравится вводить ГГ-ММ-ДД. Параметра, чтобы изменить его на тот, который вам нужен, нет в Excel. Параметр, который вам нужен, есть в Windows. Он спрятан где-то в панели управления "время и язык".

Мне пришлось зайти в расширенные настройки «Изменить формат времени и даты» и изменить настройку «Краткая дата».

В зависимости от используемой операционной системы инструкции могут немного отличаться.

Надеюсь это поможет.

решение3

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

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


Вариант 1: Мы могли бы принять входные данные втекстотформатировать и поместить их в ячейки, таким образом Excel не будет пытаться интерпретировать их как даты. Затем, в соседней ячейке мы могли бы использовать функцию ДАТА вместе с LEFT, RIGHT и MID. Например (указать, что пользователь должен ввести дату полностью в формате MM/DD/YYYY):

Ячейка A1: 04/05/2015

Ячейка B1: =ДАТА(ПРАВСИМВ(A1,4), ЛЕВСИМВ(A1,2), СРЕДИНИЦА(A1,4,2) )


Вариант 2: Попросите пользователя ввести «день», «месяц» и «год» в три отдельные ячейки или поля, что может быть лучше или хуже в зависимости от ваших настроек.

В любом случае, удачи!

решение4

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

12-02-2018 будет заменено на 2 дек 2018, хотя формат целевой ячейки был таким же.

Использование ..Range("B10").Value = DateValue(newdate) решило мою проблему

Связанный контент