Использование диапазона (значение Cell1, значение Cell2) - VBA - PullRequest
2 голосов
/ 11 октября 2019

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

  • Ячейка X100 содержит значение $A$1
  • Ячейка Y200 содержит значения $C$5

Можно ли как-нибудь использовать Range() и ячейки X100 и Y200 для достижения Range("$A$1:$C$5")?

Я пытался использовать Cells.Address, но я не могу определить правильный формат для приложения. Любая помощь приветствуется!

Спасибо

Редактировать

Спасибо, Том! У меня есть еще один вопрос к вам. Ячейка X100 на самом деле является переменной в моем случае, и я использовал следующую формулу, чтобы найти ее:

Cells.Find("ID").Offset(1,0).Address

Есть ли способ включить такую ​​формулу в приложение Range? Или было бы проще определить статическую ячейку в электронной таблице, содержащей эту формулу?

Спасибо большое

Редактировать 2

Вот и вы! Я затемняю r и x как диапазоны и устанавливаю их следующим образом:

r = Cells.Find("ID").Offset(1,0).Address

x = Cells.Find("Description of initiative").offset(1,0).end(xldown).Offset(0,cells.Find("ID").Column-cells.Find("Description of initiative").Column).address

Я знаю, что они запутаны, но я распечатал их, и они возвращают нужные ячейки в формате $ A $ 1.

Надеюсь, это прояснит! Очень ценю вашу помощь.

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Вы имеете в виду

Range(Range("X100").Value2 & ":" & Range("Y200").Value2)
1 голос
/ 11 октября 2019

Вместо того, чтобы работать с адресами, работайте с Range объектами.

Не уверен, что я полностью понимаю ваши настройки, но что-то вроде этого, возможно, то, что вы ищете.

Sub Test()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim startCell As Range
    Set startCell = ws.Cells.Find(What:="ID") '<--- you should specify the other parameters of Find

    Dim endCell As Range
    Set endCell = ws.Cells.Find(What:="Description of initiative") '<--- again, specify parameters of Find

    If startCell Is Nothing Then Exit Sub '<--- Find was unsuccessful
    If endCell Is Nothing Then Exit Sub '<--- Find was unsuccessful

    Set startCell = startCell.Offset(1, 0)

    Dim columnOffset As Long
    columnOffset = startCell.Column - endCell.Column

    Set endCell = endCell.Offset(1).End(xlDown)
    Set endCell = endCell.Offset(, columnOffset) '<--- there's a simpler way to do this, this just gets you back to startCell.Column, but preserving your logic

    Dim myRange As Range
    Set myRange = ws.Range(startCell, endCell)

End Sub

Вот более простой способ получить endCell вместо смещения.

Sub Test()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim startCell As Range
    Set startCell = ws.Cells.Find(What:="ID") '<--- you should specify the other parameters of Find

    Dim endCell As Range
    Set endCell = ws.Cells.Find(What:="Description of initiative") '<--- again, specify parameters of Find

    If startCell Is Nothing Then Exit Sub '<--- Find was unsuccessful
    If endCell Is Nothing Then Exit Sub '<--- Find was unsuccessful

    Set startCell = startCell.Offset(1, 0)

    Dim lastRow As Long
    lastRow = endCell.Offset(1).End(xlDown).Row
    Set endCell = ws.Cells(lastRow, startCell.Column)

    Dim myRange As Range
    Set myRange = ws.Range(startCell, endCell)

End Sub
...