Ответ:
Не используйте shell = True, поскольку в команду передается только первый элемент, остальные аргументы передаются в качестве аргументов оболочки - @ juanpa.arrivillaga
[112 ]Большое спасибо. Я добавляю это как ответ, чтобы завершить вопрос, потому что это был комментарий:)
Отсюда: Зеркальное отражение Или Зеркальное отражение Диапазона:
Этот макрос инвертирует порядок диапазона данных. Можно зеркально отразить данные в одной строке или в отдельном столбце данных (т.е. массив 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
Запишите макрос с относительными ссылками на ячейки, затем исследуют код. Я делаю это каждый раз, когда я чувствую себя слишком ленивым для поиска некоторой функциональности (потому что, позволяет, стоят перед ним, документация от MS ухудшается и хуже для VBA).
Selection.Columns(Selection.Columns.Count).Column
- дает Вам конечный номер столбца
Selection.Columns(1).Column
- дает Вам стартовый номер столбца
Можно сделать реверс для цикла с помощью вышеупомянутого.
этот код переворачивает весь диапазон по горизонтали, одна строка за раз - это боль. наслаждайтесь
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, по убыванию:
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