如何使用VBA反转所选Excel列的顺序

7 excel vba excel-vba

我是VBA的新手,我正试图弄清楚如何在没有硬编码的情况下颠倒所选列范围的顺序.我查看的每个示例要么硬编码列以反转顺序,要么假设您要反转工作表中的所有列.我不是想让别人为我写这个,但这很简单,只要有人解释我错过了什么,我就应该没问题.

有人有建议吗?

imf*_*isd 12

您可以使用sort来执行此操作.

使用此方法,您可以按照任何方式排列列.

如果您的数据如下所示:

    A       B       C
1   header1 header2 header3
2   dataA   dataE   dataI
3   dataB   dataF   dataJ
4   dataC   dataG   dataK
5   dataD   dataH   dataL
Run Code Online (Sandbox Code Playgroud)

在第一行添加一些数字:

    A       B       C
1   1       2       3      
2   header1 header2 header3
3   dataA   dataE   dataI
4   dataB   dataF   dataJ
5   dataC   dataG   dataK
6   dataD   dataH   dataL
Run Code Online (Sandbox Code Playgroud)

然后使用sort,没有标题行,然后选择从左到右而不是从上到下排序选项.

按行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
Run Code Online (Sandbox Code Playgroud)

如果要编写脚本,请使用选项按行而不是按列排序.

我在这里写了一个.vbs:

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


Mit*_*eat 0

从这里翻转或镜像范围

该宏将反转一系列数据的顺序。您可以翻转单行或单列数据(即 N × 1 数组或 1 × N 数组)中的数据。您不能选择整行或整列。

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
Run Code Online (Sandbox Code Playgroud)