Excel VBA根据列名称将数据从表移动到表

时间:2015-05-06 08:49:19

标签: excel vba excel-vba

我创建了一个循环在表1的所有标题列中的过程,并在表2中搜索相同的标题列,以根据匹配的列名更新重定位单元格。

这是此程序的代码:

Do While i <= SourceTableColumnCount
ColumnName = sourceTable.HeaderRowRange(i).Value
                    On Error Resume Next
                    DestColumnIndex = destTable.Range.Find(ColumnName, MatchCase:= True, SearchFormat:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookAt:=xlWhole).Count
                        If Err.Number <> 0 Then
                            'In case column name in source table is not found in destination table
                        Else
                            destTable.DataBodyRange(DestRowIndex + 1, DestColumnIndex).Value =  sourceTable.DataBodyRange(r + 1, i).Value
                        End If
                    i = i + 1
Loop

问题是DestColumnIndex始终为1.尽管目标表中的列名与源表中的列名匹配。它应该像这样工作:

1-转到表1中的第一列并获取它的值 2-转到表2并搜索步骤1中的值 3-对于找到的结果,获取range.column(此列的索引) 4-将单元格值设置为范围(Row,DestColumnIndex)

我的问题在于步骤3,其中range.column始终为1,因此步骤4的输出始终更新列索引为1的单元格。

我希望问题很清楚。

1 个答案:

答案 0 :(得分:0)

Do While i <= SourceTableColumnCount
ColumnName = sourceTable.HeaderRowRange(i).Value
                    On Error Resume Next
                    DestColumnIndex = destTable.Range.Find(ColumnName, MatchCase:=True, SearchFormat:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookAt:=xlWhole).Column - destTable.Range.Column + 1 'why would you use .Count?, it is a single cell, its count will always be 1
                        If Err.Number <> 0 Then
                            'In case column name in source table is not found in destination table
                        Else
                            destTable.DataBodyRange(DestRowIndex + 1, DestColumnIndex).Value = sourceTable.DataBodyRange(r + 1, i).Value
                        End If
                    i = i + 1
Loop