使用excel-vba删除空白列来创build数据透视表

我试图自动生成一个数据透视表的一代,我必须写在工作。 当我将数据导入到excel中时,数据中会有这些额外的列,但没有任何信息。 正如你可能知道的,当有额外的columsn时,Excel不会创build数据透视表。 有没有可以删除没有数据的列的脚本?

VBA解决scheme是最好的。

带有无关列的有损数据的图像

这应该比@ Siddharth的答案更有效,因为它只检查第一行。 (但他打了很多分钟,所以给他+1!)
由于我们知道当没有列标题时,Excel将不允许创build数据透视表。

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 

试试这个( TRIED AND TESTED

 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 

跟进

我会build议亚当的方式(这是更有效的)为您的要求准备枢轴的数据。 如果有一个空白的单元格,我的代码将失败。 你可能想要使用

Len(Trim(ws.Cells(start_row, col).Value)) = 0

替代

ws.Cells(start_row, col).Value = ""

在亚当的代码中。

如果你确定没有空格,那么你也可以使用我的代码:)

希德