Excel使用列表重新排列列

我想重新排列excel中的一些列,使用M1到M10中的值列表,这些值包含标题的名称和它们应该sorting的顺序。

我有这个脚本,如果我使用:

v = Array("First Name", "Middle Name", "Last Name", "Date of Birth", "Phone Number", "Address", "City", "State", "Postal (ZIP) Code", "Country") 

但是,当我改变

 v = Range("m1:m10").Value 

它不工作,给出以下消息:

下标超出范围。

这是整个代码:

 Sub Reorganize_columns() ' Reorganize Columns Macro ' ' Developer: If you want to know, please contact Winko Erades van den Berg ' E-mail : winko at winko-erades.nl ' Developed: 11-11-2013 ' Modified: 11-11-2013 ' Version: 1.0 ''v = Array("First Name", "Middle Name", "Last Name", "Date of Birth", "Phone Number", "Address", "City", "State", "Postal (ZIP) Code", "Country") ' Description: Reorganize columns in Excel based on column header Dim v As Variant, x As Variant, findfield As Variant Dim oCell As Range Dim iNum As Long v = Range("m1:m10").Value For x = LBound(v) To UBound(v) findfield = v(x) iNum = iNum + 1 Set oCell = ActiveSheet.Rows(1).Find(What:=findfield, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) If Not oCell.Column = iNum Then Columns(oCell.Column).Cut Columns(iNum).Insert Shift:=xlToRight End If Next x End Sub 

你需要findfield = v(x,1)作为一个范围内的数组将自动为2D。

我宁愿使用集合而不是数组,但是如果你愿意的话,你可以赋值如下:

 Dim i As Long ReDim v(0 To 0) For i = 0 To 9 ReDim Preserve v(0 To i) v(i) = Range("m1").Offset(i) Next i 

当您使用ARRAY()函数时,您正在生成一个基于0的数组。 如果你的代码使用这个函数来生成v ,那么replace这一行代码:

 v = Array("First Name", "Middle Name", "Last Name", "Date of Birth", "Phone Number", "Address", "City", "State", "Postal (ZIP) Code", "Country") 

用这5行代码:

 Dim v(0 To 9) As String, i As Long arr = Range("M1:M10") For i = 0 To 9 v(i) = arr(i + 1, 1) Next i