На листе есть два именованных диапазона, каждый из которых содержит только строку, например Диапазон1 = Диапазон («B5: H5») и Диапазон2 = Диапазон («B9: H9»). Мой вопрос: как я могу ссылаться на ячейку в Range1, скажем, C5, и ячейку в Range2, скажем, C9 в VBA, чтобы я мог что-то сделать со значениями в этих двух ячейках? VBA следует запускать только для активного столбца. Заранее спасибо.
как использовать значение ячейки в активном столбце в именованном диапазоне строк в VBA
Ответы (4)
Возможно, вам стоит увидеть эту ссылку.
Как избежать использования макросов Select в Excel VBA < / а>
Как сказал Сиддарт,
Две основные причины, по которым следует избегать .Select / .Activate / Selection / Activecell / Activesheet / Activeworkbook и т. Д.
It slows down your code.
It is usually the main cause of runtime errors.
Как этого избежать?
1) Непосредственно работать с соответствующими объектами
Рассмотрим этот код
Sheets("Sheet1").Activate
Range("A1").Select
Selection.Value = "Blah"
Selection.NumberFormat = "@"
This code can also be written as
With Sheets("Sheet1").Range("A1")
.Value = "Blah"
.NumberFormat = "@"
End With
2) При необходимости объявите свои переменные. Тот же код, приведенный выше, можно записать как
Dim ws as worksheet
Set ws = Sheets("Sheet1")
With ws.Range("A1")
.Value = "Blah"
.NumberFormat = "@"
End With
Использовать можно
Range1.offset()
метод ссылки на соседнюю ячейку
Дополнительную информацию можно найти здесь.
Это сработает?
Range("Range1").Cells(1, 1).Select 'Selects Range("B5") - first cell in Range1
Range("Range1").Cells(1, "A").Select 'Also selects first cell in the named range
'copies cell 2 (C9) from Range2 into cell 2 (C5) of Range1; .Cells(row, col)
Range("Range1").Cells(1, 2) = Range("Range2").Cells(1, 2)
Используя метод Cells
, вы можете указать соответствующую строку, используя Range1.Row
(и Range2.Row
), и соответствующий столбец, используя (если я правильно вас понял) Selection.Column
.
Так что, возможно, что-то вроде:
Dim Range1 As Range
Dim Range2 As Range
Set Range1 = Range("B5:H5")
Set Range2 = Range("B9:H9")
'Display the value in row 5 for the current column
MsgBox Cells(Range1.Row, Selection.Column).Value
'Display the value in row 9 for the current column
MsgBox Cells(Range2.Row, Selection.Column).Value
'Change row 9 to be the value from row 5
Cells(Range2.Row, Selection.Column).Value = Cells(Range1.Row, Selection.Column).Value
'Display the updated value in row 9 for the current column
MsgBox Cells(Range2.Row, Selection.Column).Value