Похоже, OP искал решение VBA, поэтому здесь есть альтернатива.
Я могу подумать о нескольких совершенно разных методах достижения этого в VBA. Ваш вопрос не очень ясен относительно того, каким вы хотите получить конечный результат, но похоже, что вы ищете функцию, которая возвращает номер столбца - возможно, чтобы вы могли использовать его для точного определения диапазона.
Function DateCol(ByVal InputDate As Date) As Long
Dim colDate As Date
colDate = InputDate - Day(InputDate) + 1
Dim srcRng As Range
Set srcRng = ThisWorkbook.Worksheets("Sheet1").Rows(1)
DateCol = srcRng.Find(What:=colDate, LookAt:=xlWhole).Column
End Function
Вы просто берете дату ввода, вычитаете дни (и добавляете 1, поскольку первый день месяца не 0
). Затем вы берете эту новую дату и используете метод .Find()
, чтобы найти диапазон, содержащий вашу дату на листе, и, наконец, свойство .Column
, чтобы получить искомое число.
Вот небольшой пример использования:
Sub test()
' Example Usage
Cells(10, DateCol(#6/11/2019#)).Value = "Test"
End Sub
В вышеприведенном тестовом подпрограмме функция DateCol()
вернула бы значение 6
в вашем примере рабочего листа, получив результат:
Cells(10, 6).Value = "Test"
Единственная проблема заключается в том, что эта функция не содержит обработки ошибок. Вы получите ошибку, если дата не найдена в .Find()
, поэтому обязательно примите это во внимание.
Кроме того, не забудьте изменить эту строку, чтобы использовать настоящий Рабочий лист:
ThisWorkbook.Worksheets("Sheet1").Rows(1)