Sub zerk() Dim i As Long Dim i_n As Long Dim rng As Range Dim k As Long Dim rng1, rng2 Set rng = Application.InputBox("Выбирите область в которой необходимо отзеркалить строки", _ "Область", Type:=8) i = rng.Cells(1, 1).Row i_n = rng.Cells(Rows(rng.Rows.Count).Row, 1).Row For j = i To (i_n + i) \ 2 rng1 = Rows(j) rng2 = Rows(i_n - k) Rows(j) = rng2 Rows(i_n - k) = rng1 k = k + 1 Next j End Sub
[/vba] Но данный способ наверное не самый быстрый...)
Gangrena, можно так: [vba]
Код
Sub zerk() Dim i As Long Dim i_n As Long Dim rng As Range Dim k As Long Dim rng1, rng2 Set rng = Application.InputBox("Выбирите область в которой необходимо отзеркалить строки", _ "Область", Type:=8) i = rng.Cells(1, 1).Row i_n = rng.Cells(Rows(rng.Rows.Count).Row, 1).Row For j = i To (i_n + i) \ 2 rng1 = Rows(j) rng2 = Rows(i_n - k) Rows(j) = rng2 Rows(i_n - k) = rng1 k = k + 1 Next j End Sub
[/vba] Но данный способ наверное не самый быстрый...)Roman777
Private Sub ReverseRange() Dim i&, n&, v1(), v2() With Selection n = .Rows.Count For i = 1 To n \ 2 v1 = .Rows(i).Value v2 = .Rows(n).Value .Rows(i) = v2 .Rows(n) = v1 n = n - 1 Next End With End Sub
[/vba] Выделите диапазон, который нужно зеркально отобразить по вертикали, и нажмите кнопку.
как вариант: [vba]
Код
Private Sub ReverseRange() Dim i&, n&, v1(), v2() With Selection n = .Rows.Count For i = 1 To n \ 2 v1 = .Rows(i).Value v2 = .Rows(n).Value .Rows(i) = v2 .Rows(n) = v1 n = n - 1 Next End With End Sub
[/vba] Выделите диапазон, который нужно зеркально отобразить по вертикали, и нажмите кнопку.KSV
Теоретически будет быстрее работать на больших объемах [vba]
Код
Sub ReverseRange() Dim i As Long, n As Long, mid As Long, v1, v2 With Selection n = .Rows.Count v1 = .Value If n Mod 2 = 0 Then mid = 0 Else mid = Round(n \ 2) + 1 ReDim v2(1 To n, 1 To 1) For i = 1 To Round(n + 0.5) \ 2 v2(i, 1) = v1(n - i + 1, 1) v2(n - i + 1, 1) = v1(i, 1) Next If mid <> 0 Then v2(mid, 1) = v1(mid, 1) .Value = v2 End With End Sub
[/vba]
Теоретически будет быстрее работать на больших объемах [vba]
Код
Sub ReverseRange() Dim i As Long, n As Long, mid As Long, v1, v2 With Selection n = .Rows.Count v1 = .Value If n Mod 2 = 0 Then mid = 0 Else mid = Round(n \ 2) + 1 ReDim v2(1 To n, 1 To 1) For i = 1 To Round(n + 0.5) \ 2 v2(i, 1) = v1(n - i + 1, 1) v2(n - i + 1, 1) = v1(i, 1) Next If mid <> 0 Then v2(mid, 1) = v1(mid, 1) .Value = v2 End With End Sub