Диапазон в Excel VBA

Я написал этот код, чтобы объединить несколько строк в каждом столбце, от столбца C до AZ.

По какой-то причине диапазон не совпадает с тем, который я ожидал, в этом случае код объединяет ячейки C8: C10, затем D8: D12, E8: E12 и т. Д. lines = 2 в этом примере.

Я не понимаю, почему не соответствуют диапазону, если значение строки не изменяется внутри for.

Благодаря!

For columns = 0 To 49 Range(Range("C8").Offset(0, columns), Range("C8").Offset((lines), columns)).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 90 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With next comlumns 

Columns – это зарезервированное слово. И вы сказали, что этот код действительно работает?

Если я изменю это на допустимую переменную, тогда код будет запущен. Проблема заключается в том, как вы используете Offset

?[C8].offset(2).address после того, как вы слились, даст вам $C$12

Также избегайте использования. .Select ИНТЕРЕСНОЕ ЧТЕНИЕ И не говоря уже о полной квалификации ваших объектов. Например, ваши объекты диапазона и ячейки не имеют полной квалификации и могут дать вам ошибку.

Я думаю, это то, чего вы пытаетесь достичь?

 Sub Sample() Dim ws As Worksheet Dim rng As Range Dim i As Long, rw As Long Set ws = ThisWorkbook.Sheets("Sheet1") rw = 2 With ws For i = 3 To 52 Set rng = .Range(.Cells(8, i), .Cells(8 + rw, i)) With rng .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 90 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With Next i End With End Sub 
Давайте будем гением компьютера.