删除空列以使用excel-vba创建数据透视表

问题描述:

我试图自动生成我必须在工作时编写的报表的数据透视表。当我将数据导入到excel中时,数据中有这些额外的列,但没有任何信息。正如你可能知道的那样,当有额外的columsn时,Excel不会创建数据透视表。是否有脚本可以删除没有数据的列?删除空列以使用excel-vba创建数据透视表

VBA解决方案是优选的。

image of lossy data with extraneous columns

这应该是比@亚洲时报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 
+2

+1不错的一个。尽管一个评论;)在Excel 2007/2010(即使文件处于兼容模式),您可能需要将'256'更改为'ws.Columns.Count'。原因是用户有Excel 2007,他可能使用相同的代码为Excel 2007文件:)最好的方法是使用.FIND()在我的文章中提到:) – 2012-03-13 17:06:07

+0

采取点,谢谢:D – bernie 2012-03-13 17:11:47

+1

对不起一个建议:)将'ws.Cells(start_row,col).Value =“”'更改为'Len(Trim(ws.Cells(start_row,col).Value))= 0',因为如果有第一个单元格中的空间。 – 2012-03-13 17:13:49

试试这个(久经考验

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 = ""

如果你确信不会有空格,那么你可以使用我的代码,以及:)

希德

+0

+1打我一英里 – bernie 2012-03-13 16:59:53

+0

只是想让你知道我接受@Bernier根据你的建议。感谢你的快速反应和谦逊。活着的人。对此,我真的非常感激。我打赌SO的其余部分也是如此。 – franklin 2012-03-13 17:38:51

+0

没有忧虑:)对我来说,它从来没有关于点;)这是所有关于正确的解决方案和亚当的解决方案比我更好:) – 2012-03-13 17:41:25