删除空列以使用excel-vba创建数据透视表
问题描述:
我试图自动生成我必须在工作时编写的报表的数据透视表。当我将数据导入到excel中时,数据中有这些额外的列,但没有任何信息。正如你可能知道的那样,当有额外的columsn时,Excel不会创建数据透视表。是否有脚本可以删除没有数据的列?删除空列以使用excel-vba创建数据透视表
VBA解决方案是优选的。
答
这应该是比@亚洲时报Siddharth的回答更有效,因为它只检查的第一行。 (但他打了很多分钟,所以给他+1!)
既然我们知道,当没有列标题时,Excel将不允许创建数据透视表。
Option Explicit
Sub prepare_for_pivot()
Dim ws As Worksheet
Dim last_col As Long
Dim start_row As Long
Dim col As Long
Set ws = ThisWorkbook.Sheets(1)
start_row = 1
last_col = ws.Cells(start_row, ws.Columns.Count).End(xlToLeft).Column
For col = last_col To 1 Step -1
If ws.Cells(start_row, col).Value = "" Then
ws.Columns(col).EntireColumn.Delete
End If
Next col
End Sub
答
试试这个(久经考验)
Sub Sample()
Dim LastCol As Long
Dim i As Long
LastCol = Sheets("Sheet1").Cells.Find(What:="*", _
After:=Sheets("Sheet1").Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
For i = LastCol To 1 Step -1
If Application.WorksheetFunction.CountA(Sheets("Sheet1").Columns(i)) = 0 Then _
Sheets("Sheet1").Columns(i).Delete
Next i
End Sub
随访
我会建议亚当的方式(这是更有效)准备的数据透视作为根据您的要求。如果有空白的单元格,我的代码将失败。你可能想在亚当的代码中使用
Len(Trim(ws.Cells(start_row, col).Value)) = 0
代替
ws.Cells(start_row, col).Value = ""
。
如果你确信不会有空格,那么你可以使用我的代码,以及:)
希德
+1不错的一个。尽管一个评论;)在Excel 2007/2010(即使文件处于兼容模式),您可能需要将'256'更改为'ws.Columns.Count'。原因是用户有Excel 2007,他可能使用相同的代码为Excel 2007文件:)最好的方法是使用.FIND()在我的文章中提到:) – 2012-03-13 17:06:07
采取点,谢谢:D – bernie 2012-03-13 17:11:47
对不起一个建议:)将'ws.Cells(start_row,col).Value =“”'更改为'Len(Trim(ws.Cells(start_row,col).Value))= 0',因为如果有第一个单元格中的空间。 – 2012-03-13 17:13:49