Как Инвертировать Порядок Выбранного Диапазона Excel Columns с помощью VBA

Ответ:

Не используйте shell = True, поскольку в команду передается только первый элемент, остальные аргументы передаются в качестве аргументов оболочки - @ juanpa.arrivillaga

[112 ]Большое спасибо. Я добавляю это как ответ, чтобы завершить вопрос, потому что это был комментарий:)

7
задан Community 9 July 2018 в 19:34
поделиться

5 ответов

Отсюда: Зеркальное отражение Или Зеркальное отражение Диапазона:

Этот макрос инвертирует порядок диапазона данных. Можно зеркально отразить данные в одной строке или в отдельном столбце данных (т.е. массив N на 1 или массив 1 на Н). Вы не можете выбрать и вся строка или весь столбец.

Public Sub FlipSelection()

Dim Arr() As Variant
Dim Rng As Range
Dim C As Range
Dim Rw As Long
Dim Cl As Long

On Error GoTo EndMacro

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Set Rng = Selection
Rw = Selection.Rows.Count
Cl = Selection.Columns.Count
If Rw > 1 And Cl > 1 Then
   MsgBox "Selection May Include Only 1 Row or 1 Column", _
    vbExclamation, "Flip Selection"
Exit Sub
End If

If Rng.Cells.Count = ActiveCell.EntireRow.Cells.Count Then
    MsgBox "You May Not Select An Entire Row", vbExclamation, _
        "Flip Selection"
    Exit Sub
End If
If Rng.Cells.Count = ActiveCell.EntireColumn.Cells.Count Then
    MsgBox "You May Not Select An Entire Column", vbExclamation, _
        "Flip Selection"
    Exit Sub
End If

If Rw > 1 Then
    ReDim Arr(Rw)
Else
    ReDim Arr(Cl)
End If

Rw = 0
For Each C In Rng
    Arr(Rw) = C.Formula
    Rw = Rw + 1
Next C

Rw = Rw - 1
For Each C In Rng
    C.Formula = Arr(Rw)
    Rw = Rw - 1
Next C

EndMacro:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

End Sub
0
ответ дан 6 December 2019 в 19:43
поделиться

Запишите макрос с относительными ссылками на ячейки, затем исследуют код. Я делаю это каждый раз, когда я чувствую себя слишком ленивым для поиска некоторой функциональности (потому что, позволяет, стоят перед ним, документация от MS ухудшается и хуже для VBA).

0
ответ дан 6 December 2019 в 19:43
поделиться

Selection.Columns(Selection.Columns.Count).Column - дает Вам конечный номер столбца
Selection.Columns(1).Column - дает Вам стартовый номер столбца

Можно сделать реверс для цикла с помощью вышеупомянутого.

0
ответ дан 6 December 2019 в 19:43
поделиться

этот код переворачивает весь диапазон по горизонтали, одна строка за раз - это боль. наслаждайтесь

Sub FlipHorizontal()

On Error GoTo EndMacro

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Set Rng = Selection
rw = Selection.Rows.Count
cl = Selection.Columns.Count

If Rng.Cells.Count = ActiveCell.EntireRow.Cells.Count Then
    MsgBox "You May Not Select An Entire Row", vbExclamation, _
    "Flip Selection"
    Exit Sub
End If
If Rng.Cells.Count = ActiveCell.EntireColumn.Cells.Count Then
    MsgBox "You May Not Select An Entire Column", vbExclamation, _
    "Flip Selection"
    Exit Sub
End If

ReDim Arr(rw, cl)
For cc = 1 To cl ' = Rng.Columns.Count
    For rr = 1 To rw 'rr = Rng.Rows.Count
        Arr(rr, cc) = Rng.Cells(rr, cc) '.Formula
        a = Arr(rr, cc)
    Next

Next

'copy arry to range flippingnhorizontal
cc = cl

For a = 1 To cl ' to loop the columns
    For rr = 1 To rw 'rr = Rng.Rows.Count
        Rng.Cells(rr, cc) = Arr(rr, a) '=  .Formula

    Next
    cc = cc - 1
Next

EndMacro:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

End Sub
1
ответ дан 6 December 2019 в 19:43
поделиться

Хеш-наборы (и хэш-таблицы) используют много памяти! Намного больше, чем простой список / отсортированный список

Сортировка по строке 1, по убыванию:

    A       B       C
1   3       2       1
2   header3 header2 header1
3   dataI   dataE   dataA
4   dataJ   dataF   dataB
5   dataK   dataG   dataC
6   dataL   dataH   dataD

Если вы хотите создать сценарий, используйте опцию сортировки по строкам вместо столбцов.

Я написал .vbs, который делает это здесь :

http://gallery.technet.microsoft.com/ScriptCenter/en-us/f6085342-a1ae-49d8-acfc-38368256ee42?lc=1033

12
ответ дан 6 December 2019 в 19:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: