Как заставить Excel автоматически заполнять предыдущий год в столбце вместо текущего года? - PullRequest
10 голосов
/ 05 января 2012

Контекст: Я ввожу данные за предыдущий год в Excel.

Каждый раз, когда я набираю дату в столбце даты («9/16» для 16 сентября) , Excel автоматически форматирует ее в «16.09.12», где 12 - 2012, текущий год.

Я ввожу данные за прошлый год в текущем 2012 году. Я не хочу вводить «11» для 2011 года. Я хочу, чтобы Excel автоматически заполнял его, как это происходит с 2012 годом, и как это было в декабре 31-го.

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

Я предпочитаю, чтобы дата находилась в одном столбце, поэтому использование альтернативных столбцов для дня / месяца / года не подходит для меня.

Можно подумать, что это простое исправление, но пару часов поиска и мой Google-fu меня подводит.

Ответы [ 7 ]

9 голосов
/ 05 января 2012

Быстрое решение состоит в том, чтобы просто ввести 9/16 и позволить Excel изменить его на 16.09.12.Затем, когда вы все закончите вводить даты, в новом столбце введите формулу =A1-365 и просто скопируйте формулу до конца, предполагая, что в столбце A содержатся введенные вами даты.

Один просмотр-при этом: 2012 год является високосным, поэтому для любых дат, которые вы введете после 28 февраля, ваша формула должна быть =A1-365.25, иначе ваши даты будут отменены на один день.Это не должно быть 365,25, просто что-то большее, чем 365 и меньше, чем 366.

Это работает, потому что независимо от формата даты в ячейке, Excel сохраняет фактическую дату как количество прошедших днейс 0 января 1900 года. (Да, 0 января не является реальной датой, но Excel считает, что это так.)

5 голосов
/ 05 января 2012

То, что вы нашли правильно, вы не можете изменить параметр Excel по умолчанию для даты.Помимо изменения системной даты, вы можете использовать формулу события листа:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
If IsDate(Target) Then
    Application.EnableEvents = False
    Target.Value = DateSerial(2011, Month(Target), Day(Target))
    Application.EnableEvents = True
End If
End Sub
4 голосов
/ 29 января 2012
  • Выделите столбец дат в электронной таблице Excel, в котором вы хотите изменить год.
  • На панели инструментов выберите Формат, выберите Ячейки, а в разделе Категория выберите Дата. В столбце параметров, предлагаемых для формата даты, выберите формат даты, в котором указан прописной месяц, номер дня, запятая, пробел, год из 4 цифр (т.е. 31 января 2011 г.). Убедитесь, что перед 4-значным годом есть пробел.
  • Найдите команду «Заменить» в меню «Правка» (расположение зависит от Mac или ПК и версии Excel #)
  • В окне Заменить в поле для данных, которые вы хотите заменить, введите тот 4-значный год, который вы хотите заменить. В другом поле для данных, которыми вы хотите заменить старые данные, введите правильный год. Нажмите кнопку в этом окне для «Заменить все».
  • Ваш выделенный столбец в электронной таблице теперь изменит все 4-значные годы на новый номер.
  • Если бы вы не хотели изменить все эти годы в этой колонке, я думаю, вы могли бы просто оставить некоторые из них не выделенными, и они были бы пропущены.
  • После этого вы можете выделить столбец, вернуться в «Формат», «Ячейка», «Дата» и сбросить формат даты обратно на любое значение, например 1/31/11.
1 голос
/ 08 января 2019
  1. Выберите столбец, содержащий даты
  2. Щелкните правой кнопкой мыши вверху и выберите «Формат ячеек»
  3. Выберите «Пользовательский»
  4. В поле «Тип»В окне введите желаемый формат даты, но укажите год, в котором вы хотите появиться.В моем случае мне нужно было, чтобы даты были в 2018 году, но я ввожу данные в 2019. Поэтому я выполнил описанные выше шаги, чтобы установить пользовательский формат:

мм / дд / "2018"

Работает как брелок без использования кода.

1 голос
/ 01 января 2018

Простое исправление: вы просто вводите дату и месяц и позволяете системе вводить дату по умолчанию. После этого замените (Ctrl + H) 2012 на 2011.

1 голос
/ 16 мая 2015

Я оставляю это здесь для любого, как и я, которому помог JMax ответ. Эта версия работает на всех листах в рабочей книге (и, следовательно, должна быть помещена в сценарий рабочей книги, а не в рабочую таблицу), а также изменяет только записи, содержащие текущий год. Значения для текущего года и для прошлого года устанавливаются автоматически.

Dim This_Year As Integer
Dim Last_Year As Integer

Private Sub Workbook_Open()
    This_Year = Year(Date)
    Last_Year = This_Year - 1
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
    If IsDate(Target) And Year(Target) = This_Year Then
        Application.EnableEvents = False
        Target.Value = DateSerial(Last_Year, Month(Target), Day(Target))
        Application.EnableEvents = True
    End If
End Sub
1 голос
/ 10 января 2012

Спасибо за ответы - у меня возникла такая же проблема. Я хотел внести небольшую поправку в решение Стьюбоба. Как и ОП, мне нужно было вводить данные за прошлый год без необходимости каждый раз вводить «/ 11», но не все даты, которые я вводил, были в 2011 году (я также вводил даты в 2009 и 2010 годах, для которых я должен был чтобы вручную ввести год, даже если я не откладывал в 2011 году!). Я бы не хотел, чтобы даты в '09 -1010 были перенесены на год вместе с датами 2011 года. Мое решение состояло в том, чтобы установить второй соседний столбец со следующей формулой. Допустим, я печатаю даты в столбце A и сделал столбец B моим «исправленным» столбцом; формула в столбце B: = ЕСЛИ (А1> 40908, ЕСЛИ (A1> 40967, A1-366, A1-365), А1) Таким образом, даты до 2011 года не будут исправлены, и мы также учитываем тот факт, что 2012 год является високосным, поэтому любые даты после 2/28 будут перенесены на 366 дней вместо 365. Так что теперь я могу вводить любые даты как будто это все еще 2011 год. Это хорошо, если вы не можете изменить дату / время в Windows, потому что ваше учреждение не дает вам административных привилегий самостоятельно # $%! рабочая станция. Это может быть через несколько дней после оригинального сообщения, но я надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...