Как найти дату в столбце, вернуть расположение номера строки в виде целого числа, а затем сохранить как переменную для вычитания даты - PullRequest
0 голосов
/ 02 октября 2019

Попытка найти способ поиска даты в столбце, вернуть номер строки, а затем сохранить его как целое число, в котором я мог бы вычесть целое число из найденной даты, чтобы дать мне новое значение. Например, 539-1, чтобы дать мне конкретную дату в столбце A - строка 538

Я пытался ссылаться на функцию FoundCell, в которой он будет возвращать адрес в виде строки, но не на значение, в котором я мог быманипулировать им - например, вычитать из-за различий в типах объектов. (Date, Range, String)

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

    Sub TestFunction()

    Set Wb7 = Workbooks.Open("G:\DATA\......xlsm")

    Set raw5 = Sheets("dailyPnL")
    Set Wb7 = ActiveWorkbook
    Set raw5 = ActiveSheet

    RowOutputFile2 = Range("A8").End(xlDown).Row   

'Это дает мне последнее значение строки даты, которое в данном случае составляет 539. «Я хочу иметь возможность искать любую переменную даты, используя - 2 в качестве примера, чтобы дать мне строку 537, а затем сохранить ее как новую переменную / начальную точку.

    Dim WHAT_TO_FIND As Date
    Dim FoundCell As Range  
    Dim FindCell As Range
    Dim FirstAddress As String
    Dim TestAddress As Range


    WHAT_TO_FIND = raw5.Cells(RowOutputFile2, 1)  '=9/27/2019
    Set FoundCell = raw5.Range("A:A").Find(What:=WHAT_TO_FIND)

» FoundCell = 9/27 /2019

    With ActiveSheet
    Set FindCell = .Cells.Find(What:=WHAT_TO_FIND)
    End With
    FirstAddress = FindCell.Address

'Это дает мне строку "$ A $ 539

    Set TestAddress = Range(FirstAddress)

" Попытка преобразовать TestAddress в диапазон, чтобы предоставить мне A539, ​​который я мог бы использовать в качестве начальноготочка.

'В конце концов я хочу использовать начальную дату «Найдено» в A539 в качестве моей контрольной точки и вычесть из нее целое число, используя результаты из другой переменной. Например, разницу между рабочими днями.

    Workdays = Application.WorksheetFunction.NetworkDays(raw3.Cells(RowOutputFile, 1), raw5.Cells(2, 1))

'Например, это даст мне 1, потому что он берет Даты между двумя электронными таблицами и вычисляет разницу между ними в рабочие дни.

    If Workdays = 1 Then

    New1RowOutputFile = FoundCell - Workdays

    End Sub

' Это моя цель - создать New1RowOutputFileдайте мне номер строки, вычитающий целое число рабочего дня. Это будет 539 - 1 = 538. Теперь я хочу конкретную дату, которая находится в A538, которая была бы переведена как новый "New1RowOutputFile".

Я получаю кучу разных синтаксических ошибок, переключающихся между датами, диапазонами и целыми числами, но я просто не знаю, как это сделать. Помощь очень ценится!

1 Ответ

0 голосов
/ 08 октября 2019

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

См. Функцию ниже:

Sub SearchFunction()

Dim raw As Worksheet, raw2 As Worksheet, raw3 As Worksheet, raw5 As Worksheet

Dim NewDates2 As Integer, RowOutputFile As Integer, RowOutputFile2 As Integer 
Dim Wb7 As Workbook, Wb5 As Workbook
Dim NewDates As Long
Dim NewDates3 As Date, TextDate As Date
Dim Rng1 As Range, Rng2 As Range, Rng3 As Range

Set Wb5 = Workbooks.Open("G:\DATA......)
Set raw = Sheets("BarraInputs")
Set raw2 = Sheets("BarraOutputTS")
Set raw3 = Sheets("BarraPerformance")

Set Wb7 = Workbooks.Open("G:\DATA\2......)
Application.DisplayAlerts = False

Set raw5 = Sheets("dailyPnL")


Wb5.Activate
RowOutputFile = Range("A8").End(xlDown).Row

Wb7.Activate
raw5.Activate

RowOutputFile2 = Range("A8").End(xlDown).Row

Dim col_match As Double
col_match = Application.WorksheetFunction.Match(raw3.Cells(1, 1), raw5.Range("A:A"), 0)

StartCell = "E" & col_match
StartCell2 = "G" & col_match

DragRange = "E" & col_match & ":E" & RowOutputFile2
DragRange2 = "G" & col_match & ":G" & RowOutputFile2

        Set Rng1 = ActiveSheet.Range(DragRange)
        Set Rng2 = ActiveSheet.Range(DragRange2)
        Set Rng3 = Union(Rng1, Rng2)
        Rng3.Copy

        Wb5.Activate
        raw3.Activate

        StartCell3 = "M" & RowOutputFile

        Range(StartCell3).PasteSpecial xlPasteValuesAndNumberFormats

   End Sub
...