Получение текущей даты и возврат в виде целого числа? - PullRequest
1 голос
/ 12 июня 2019

У меня есть такая дата (мм / гг) в строке 1
A B C D E F 1/19 2/19 3/19 4/19 5/19 6/19 ...

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

Например, если сегодня 4/13/2019 , это будет 4 (столбец D)

Мне нужно это в VBA, потому что я буду использовать его для определения диапазона:
For today To x month

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Похоже, 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)
0 голосов
/ 12 июня 2019

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

В строке 1 я ввел даты как: 01.01.2009, 01.02.2017, 01.03.2009 ... и отформатировал строку так, чтобы она отображалась только как мм / гг.

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

=MATCH(NUMBERVALUE(TEXT(A3,"mm")&"/1/"&TEXT(A3,"yy")),$1:$1,0)

Редактировать: (Изменить формулу, чтобы сделать ее постоянной в строке 1 [$ 1: $ 1])

Предполагая, что дата 13.04.2009 находится в ячейке A3

enter image description here

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