如何使用VBA在EXCEL中批量删除整列数据并调整列的顺序?

现在有一个报表大概有100+列和20000+行,

每列都有一个唯一的标题,但是其中有80列所有的数据没有用处需要删掉,但是列的相对位置并不固定,不能录制宏说要删除AFGLM列之类的。
如何写VBA让程序自动删除标题为制定内容的列? 然后把剩下的20列按照制定顺序排列?
要删除的标题和排序的位置可以放在另一个excel文件里否

我的思路不一样,但结果应该是一样的
我是把要保留的列,放到新表(sheet2)里面且排序了
首先,需要将排序的位置放在sheet2的A列中,然后执行代码
Sub m()
Set dicb = CreateObject("scripting.dictionary")
For i = 1 To Sheet2.Range("A65536").End(xlUp).Row
If dicb.exists(Sheet2.Cells(i, 1).Value) = False Then
k = k + 1
dicb(Sheet2.Cells(i, 1).Value) = k + 1
End If
Next i
For i = 1 To Range("A1").End(xlToRight).Column
If dicb.exists(Cells(1, i).Value) = True Then
Columns(i).Copy Sheet2.Columns(dicb(Cells(1, i).Value))
End If
Next i
End Sub追问

下面语句报错Run-time error ‘1004'
Columns(i).Copy Sheet2.Columns(dicb(Cells(1, i).Value))

思路很好啊,把新的表头放在了Sheet2。不知道代码性能怎么样?原始表有80M的纯数据,83列和9万3千多行,不知能几分钟处理完么?

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-21

删除列:

可以参考

Sub Macro1()
a = ActiveSheet.[IV1].End(xlToLeft).Column
For i = 1 To a
If Cells(1, i).Value = "删除" Then
Columns(i).Delete
End If
Next
End Sub


排序:

Sub 按【行】值_列排序()
[j1:it65536].SelectSelection.Sort Key1:=Range("J1"), _
Order1:=xlDescending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=2, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
End Sub

追问

删除列的代码里面
If Cells(1, i).Value = "删除" Then
可否是另一个表中的第一列全部数据? 符合其中任何一个即删除。

排序的代码没看懂,是否可以逐条解释下?
希望达成的目的是按照另一个表中的标题行,移动整列数据进行排序。

追答

If Cells(1, i).Value = "删除" Then
这个是判断每列的第一行的值是否是“删除”,符合就删除整一列。

列排序其实是一个宏的录制
http://club.excelhome.net/thread-597625-1-1.html
可以参考这个

本回答被网友采纳

如何使用VBA在EXCEL中批量删除整列数据并调整列的顺序?
首先,需要将排序的位置放在sheet2的A列中,然后执行代码 Sub m()Set dicb = CreateObject("scripting.dictionary")For i = 1 To Sheet2.Range("A65536").End(xlUp).Row If dicb.exists(Sheet2.Cells(i, 1).Value) = False Then k = k + 1 dicb(Sheet2.Cells(i, 1).Value) = k...

excel利用VBA删除单元格行和列
如果要用VBA代码在Excel工作表中删除指定的单元格、行和列,可以使用下面的代码:Sub DeleteCellRowColumn()‘删除活动单元格,下方单元格上移 ActiveCell.Delete Shift:=xlUp ‘删除选定的区域,右方单元格左移 Selection.Delete Shift:=xlToLeft ‘ 删除行或列 Range("B2").Select Selection.EntireRow....

excel vba如何一次同时删除三列
Columns(1).Delete End Sub 其中用到的Columns是列的意思,括号里面的数字,就是列数,如A列就是1,D列对应4,F列对应6等;这其中用到了一个小技巧,就是从后往前删除列。如果是从前往后删除,就会出错。以题目为例,如果先删除A列,那么根据Excel默认设置,后面的列会自动往前进,原来的D列就...

excel中用vba排列单元格区域内容的顺序。
选中数据区域——F5——定位——空值。右键某一空单元格,——删除——右侧单元格左移。搞定。

在Excel表中,如何使用vba编码,将一列的值进行清空
假设A1是设置了数据有效性的单元格,辅助列在G列,要把A1的值放在G1可用下面代码: Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 1 Then [G1] = [A1] '里面加粗的1表示第一列即A列,指设置了有效性的所在列 End Sub 在当前工作表名称处点右键,查看代码,然后...

请教,在Excel中A列为序号。在使用VBA语句删除中间一行后,如何使得该...
你应该是想删除后,下面的行自动编号吧.其实这个用公式就可以解决.例如: A2单元格为第1行,那么你在其中输入=row()-1,然后向下拉填充,即可得到所有的编号,以后,删除后编号就会自动调整的.

如何用vba删掉excel单元格里的数字
excel删除数字方法一:Excel工作表中删除数字只保留文本,是一个比较常见的例子。如下图所示,A列的源数据有一些数字,而且这些数字在单元格中的位置是无序不固定的。如何删除数字,达到的效果如C列所示。在excel中数字与文字共存的情况下,如果有规律,可以使用公式来分离字母、汉字、数字;如果没有规律...

在Excel表中,如何使用vba编码,将一列的值进行清空?
清空列:sheets(表名称).columns(辅助列的数值).clear 如表名称:Tab1 辅助列在D列 sheets(“Tab1”).columns(4).clear 剩下的就是建立两个变量数组 然后赋值输出到辅助列的简单问题了。编码 编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。用预先规定的方法...

excel vba如何清除大量的整行数据比较快?知道的是要保留下来的行号,清 ...
A:用循环,从最后一行到第一行,查找两个需要保留的行【比如100,90】,用 Rows("91:99").Delete 删除中间不要的行 B: 如果要保留的行数量较少,可以先遍历Collection,将保留行的数据复制到另一个地方,比如另一个表或者 原表格的下方 复制完毕后,将原表格整个删除(rows("").delete ...

怎么通过宏VBA代码删除Excel中有重复数据的整行?
1、首先打开需要编辑的Excel表格,右键单击工作表的标签,选择打开“查看代码”。2、然后在弹出来的窗口中点击输入:Sub 删除重复行()Dim xRow As Integer Dim i As Integer xRow = Range("B65536").End(xlUp).Row For i = 2 To xRow For j = i + 1 To xRow If Cells(j, 2) = Cells...

相似回答