我有大约750个excel文件。我需要清理它们以便它们都包含相同的格式 - 即它们都包含相同数量的列。
某些文件(80%)包含额外的列,其中包含带星号的标签,例如" * 1科目"。
有没有办法使用visual basic来浏览我文件夹中的所有文件,删除所有包含星号的列,以便所有文件都没有这样的列?星号是否是计算机中的通配符这一事实会有所不同吗?
答案 0 :(得分:3)
编写一个使用filesystemobjects循环遍历电子表格所在目录的宏。遍历每个工作表并分析列名称。
以下是循环每张纸的方法。
Private Sub CommandButton7_Click()
Dim ws As Excel.Worksheet
Dim iCol As Integer
Dim strName As String
Dim iIndex As Integer
'Loop through the sheets.
For iIndex = 1 To Application.Worksheets.Count
Set ws = Application.Worksheets(iIndex)
'Loop through the columns.
For iCol = 1 To ws.UsedRange.Columns.Count
'Check row 1 of this column for first char of *
If Left(ws.Cells(1, iCol).Value, 1) = "*" Then
'We have found a column with the first char of *
ws.Columns(iCol).EntireColumn.Delete
End If
Next iCol
Next iIndex
ActiveWorkbook.SaveAs Filename:="C:\temp\newfiles\" & ActiveWorkbook.Name, FileFormat:=xlWorkbookNormal
End Sub
如果你想在单元格的任何地方寻找*,你可以使用instr()
Private Sub CommandButton7_Click()
Dim ws As Excel.Worksheet
Dim iCol As Integer
Dim strName As String
Dim iIndex As Integer
'Loop through the sheets.
For iIndex = 1 To Application.Worksheets.Count
Set ws = Application.Worksheets(iIndex)
'Loop through the columns.
For iCol = 1 To ws.UsedRange.Columns.Count
'Check row 1 of this column for the char of *
If instr(ws.Cells(1, iCol).Value, "*") > 0 Then
'We have found a column with the char of *
ws.Columns(iCol).EntireColumn.Delete
End If
Next iCol
Next iIndex
ActiveWorkbook.SaveAs Filename:="C:\temp\newfiles\" & ActiveWorkbook.Name, FileFormat:=xlWorkbookNormal
End Sub
这是给定目录中的基本循环文件。希望这能帮到你。
Private Sub CommandButton7_Click()
Dim wb As Workbook
Dim ws As Excel.Worksheet
Dim iCol As Integer
Dim strName As String
Dim iIndex As Integer
Dim strPath As String
Dim strFile As String
strPath = "c:\temp\oldfiles\"
strFile = Dir(strPath & "*.xlsx")
Do While strFile <> ""
Set wb = Workbooks.Open(Filename:=strPath & strFile)
'Loop through the sheets.
For iIndex = 1 To Application.Worksheets.Count
Set ws = Application.Worksheets(iIndex)
'Loop through the columns.
For iCol = 1 To ws.UsedRange.Columns.Count
'Check row 1 of this column for the char of *
If InStr(ws.Cells(1, iCol).Value, "*") > 0 Then
'We have found a column with the char of *
ws.Columns(iCol).EntireColumn.Delete
End If
Next iCol
Next iIndex
wb.SaveAs Filename:="C:\temp\newfiles\" & wb.Name, FileFormat:=xlOpenXMLWorkbook
wb.Close SaveChanges:=False
strFile = Dir
Loop
End Sub