Существует код для перевертывания столбца или строки?

Программирование на Visual Basic for Applications
Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Существует код для перевертывания столбца или строки?

Сообщение Estilla » 19.11.2006 (Вс) 1:09

Пример:
1
3
2
4
нужно сделать
4
2
3
1
у меня получилось так:
Код: Выделить всё

Sub reverse()
endrow = ActiveCell.row
For Each r1 In Selection
    r1.Offset(0, 1) = Cells(endrow, r1.Column)
    endrow = endrow - 1
Next r1
End Sub

правда в моем случае выделять нужно снизу вверх, чтобы активная ячейка указывала на последнюю строку. ну вообще лажа полная. Есть что получше?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.11.2006 (Вс) 8:26

Код: Выделить всё
Sub reverse()
  Dim a As Excel.Range, i As Long, t As Long
 
  If Not Selection Is Nothing Then
    If TypeOf Selection Is Excel.Range Then
      For Each a In Selection.Areas
        If a.Columns.Count = 1 Then
          t = a.Cells.Count
          For i = 1 To t
            a.Cells(i).Offset(0, 1).Value = a.Cells(t - i + 1).Value
          Next
        End If
      Next
    End If
  End If
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Сообщение Estilla » 19.11.2006 (Вс) 22:40

[quote="GSerg"][/quote]
ага, спасибо.

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 20.11.2006 (Пн) 1:18

Можно еще так:
Код: Выделить всё
Sub ReverseRangeSelection()
    Dim dd As Variant, cc As Range, ss As Range
    Set ss = ActiveWindow.RangeSelection
    dd = ss
    For Each cc In ActiveWindow.RangeSelection.Cells
        cc = dd(UBound(dd, 1) - (cc.Row - ss.Row), UBound(dd, 2) - (cc.Column - ss.Column))
    Next cc
End Sub


Будет работать как для выделенной области одной колонки или одной строки, так и для любой выделенной области на листе (несколько строк и несколько колонок).
Всякое решение плодит новые проблемы.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 103

    TopList