获取列位置基于search文本和移动

我需要始终确保name是在列C和address是在列D.我使用下面的synatx扫描标题文本,并确定每个标题所在的列位置,但如果标题文本不符合强制性的位置,将其移动到正确位置的语法是什么?

 Sub SearchForText() Dim strSearch As String, aCell As Range, strSearch1 As String Dim aCell1 As Range, namecolumn As Int, addresscolumn As Int strSearch = "Name" Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) GetColumnName(aCell.Column) namecolumn = GetColumnName() strSearch1 = "Address" Set aCell = Sheet1.Rows(1).Find(What:=strSearch1, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) GetColumnName(aCell1.Column) addresscolumn = GetColumnName() if namecolumn <> 3 THEN 'How to copy column to be position 3? end if if addresscolumn <> 4 THEN 'How to copy column to be position 4? end if End Sub Function GetColumnName(colNum As Integer) As String Dim d As Integer Dim m As Integer Dim name As String d = colNum name = "" Do While (d > 0) m = (d - 1) Mod 26 name = Chr(65 + m) + name d = Int((d - m) / 26) Loop GetColumnName = name End Function 

我会通过简单的移动值,如下所示:

 Sub Test() Dim colIndex As Long With Worksheets("Sheet1") CheckColumn .Rows(1), "Name", 3 CheckColumn .Rows(1), "Address", 4 End With End Sub Sub CheckColumn(rngHeaderRow As Range, colName As String, refColumnIndex As Long) Dim columnIndex As Long With rngHeaderRow.Parent If GetColumnIndex(rngHeaderRow, colName, columnIndex) Then If columnIndex <> refColumnIndex Then MoveValues .Columns(columnIndex), .Columns(refColumnIndex) End With End Sub Function GetColumnIndex(rngHeaderRow As Range, colName As String, columnIndex As Long) As Boolean Dim rng As Range Set rng = rngHeaderRow.Find(What:=colName, LookIn:=xlValues, lookat:=xlWhole) If Not rng Is Nothing Then columnIndex = rng.Column GetColumnIndex = True End If End Function Sub MoveValues(colToMoveFrom As Range, colToMoveTo As Range) Dim arr As Variant Dim maxSize As Long ResizeColumn colToMoveFrom ResizeColumn colToMoveTo maxSize = WorksheetFunction.Max(colToMoveFrom.Count, colToMoveTo.Count) With colToMoveFrom.Parent.UsedRange arr = Application.Transpose(colToMoveFrom.Resize(maxSize)) colToMoveFrom.Resize(maxSize).Value = colToMoveTo.Resize(maxSize).Value colToMoveTo.Resize(maxSize).Value = Application.Transpose(arr) End With End Sub Sub ResizeColumn(rng As Range) With rng.Parent Set rng = .Range(rng.Cells(1, 1), .Cells(.Rows.Count, rng.Column).End(xlUp)) End With End Sub 

基本上,你需要的是这样的: –

 With aCell Sheet1.Cells(1, 3).Value = .Value .Value = "" End With 

由于您的Find函数在aCell中find了“Name”,上面的代码从aCell复制到第3列(“C”),并将其从之前的位置删除。 请注意,单元总是被定义为单元([Row],[Column])。 Column属性最好使用数字,但字母也可以使用。

顺便说一句,不要麻烦将列号转换为列名称,因为Excel只能理解数字并将您的名字转换回数字。

 Columns("AL").Column ' returns the column number of column "AL" Columns(155).Address ' returns $EY:$EY