Я ищу определенный заголовок и сохраняю его как дальний объект (FindEQ4). Теперь я хочу использовать этот заголовок в качестве отправной точки для объекта с динамическим диапазоном. У меня вопрос, как я могу получить информацию о том, что заголовок 1 находится в C5 и использовать его как Set TestR = .Range("C" & 5 + x)?

 Sub FindCopyPasteV3()

    With Worksheets("Sheet1").Range("A:FF")

        Dim FindEQ4 As Range
        Dim TestR As Range
        Dim x As Long

        Set FindEQ4 = .Find(What:="Header 1", LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False)

        'I'm looking for something like TestR = .Range("FindEQ4" + x)  
        'which works like Set TestR = .Range("C" & 5 + x) 

    End With

End Sub

enter image description here

0
D3merzel 28 Май 2019 в 16:57

2 ответа

Лучший ответ

Используя свойства .Column или .Row для объекта Range:

Option Explicit
Sub test()

    Dim FindEQ4  As Range
    Dim StartRow As Long
    Dim StartColumn As Long
    Dim TestR As Range

    With ThisWorkbook.Sheets("Sheet1")
        Set FindEQ4 = .Range("A1")
        StartRow = FindEQ4.Row + 1
        StartColumn = FindEQ4.Column
        Set TestR = .Cells(StartRow, StartColumn) 'A2
    End With

End Sub
2
Damian 28 Май 2019 в 14:10

Используйте свойство Offset объекта Range.

https://docs.microsoft.com/en-us/office/vba/api/excel.range.offset

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

Так например

.Range("D7").offset(-3,2) будет представлять "F4", 3 строки вверх и 2 столбца справа.

Sub FindCopyPasteV3()

    With Worksheets("Sheet1").Range("A:FF")

        Dim FindEQ4 As Range
        Dim TestR As Range
        Dim X As Long

        Set FindEQ4 = .Find(What:="Header 1", LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False)


        Set TestR = FindEQ4.Offset(X, 0) 'X rows down, same column



    End With

End Sub
1
DMcLaren 30 Май 2019 в 14:14