如何按列标题名称重新排列excel列

如何按列标题名称重新排列excel列,excel,vba,Excel,Vba,如何按列标题名称重新排列列。 我需要每周处理一份报告,原始工作表有23列。我提取了其中的一部分作为示例 原始列顺序:数量付款条款合同号等 所需列顺序:合同号、付款条件、数量等 你知道如何用VBA代码自动重新排列列吗? 非常感谢。这对您有什么好处?我试着只用了四个专栏,它对我很有效 Sub rearrange_Columns() Dim correctOrder() As Variant Dim lastCol As Long Dim headerRng As Range, cel As Rang

如何按列标题名称重新排列列。 我需要每周处理一份报告,原始工作表有23列。我提取了其中的一部分作为示例

原始列顺序:
数量付款条款合同号等

所需列顺序:
合同号、付款条件、数量等

你知道如何用VBA代码自动重新排列列吗?
非常感谢。

这对您有什么好处?我试着只用了四个专栏,它对我很有效

Sub rearrange_Columns()
Dim correctOrder() As Variant
Dim lastCol As Long
Dim headerRng As Range, cel As Range
Dim mainWS As Worksheet

Set mainWS = ActiveWorkbook.Worksheets("Sheet1")

' Edit this to be the correct order you need
correctOrder() = Array("Column A", "Column B", "Column C", "Column D")
' Now, we know that the number of headers you have to rearrange are `UBound(CorrectOrder)+1`


With mainWS
    lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Set headerRng = .Range(.Cells(1, 1), .Cells(1, lastCol))
End With

Dim newWS As Worksheet
Set newWS = ActiveWorkbook.Sheets.Add
newWS.Name = "Rearranged Sheet"

Dim col As Long
With newWS
    For col = 1 To lastCol
        For Each cel In headerRng
            If cel.Value = correctOrder(col - 1) Then
                mainWS.Columns(cel.Column).Copy .Columns(col)
                Exit For
            End If
        Next cel
    Next col
End With

End Sub
注意:没有真正的错误处理,因此如果需要对标题进行
TRIM()
ed或检查错误信息,则需要添加这样做的内容


您是否希望按字母顺序排列列标题?如果是这样,请使用排序功能。最好使用表。在数据区域中插入一个表,然后第一行就是标题。通过表的内置函数,您可以仅使用标题选择整个列,例如
Activesheet.listobjects(“table1”).listcolumns(“mycolumn”).range
如果您共享一个代码并显示您试图执行的操作,我们可以更具体地帮助您。我的抽象示例可能有点误导,总共有23列,我需要按所需的顺序排列,而不是按字母顺序。@Max-Yay!很高兴听到这有帮助。(您可以通过单击帖子左侧上/下箭头下方的复选标记将其标记为答案)