每个月我都会收到大约300个Excel文件。我需要从每个文件中的某个工作表中获取C列的计数。我尝试了VBA,但我无法在每个文件中嵌入一个宏(由于每个位置的物流和安全性)。我还尝试了一个“摘要”文件,其中包含指向每个文件的链接,但链接变得不稳定,我无法相信我得到的数字。所以我想到了一个vbscript。
我只想要计算某些代码:XF,RE,AG和LK。我不关心列中的其他内容或是否有空白。
列的名称是“代码”(不确定是否有所不同)
我感兴趣的表单名称是“Ticket Source”。工作簿中还有其他几个工作表。
我希望计数最终包含在文件名(TXT或CSV)中,其中包含文件名,代码和该代码的计数。
示例:
Filename: NORTHWEST
XF - 260
RE - 120
AG - 320
LK - 250
文件名是任何东西,所以我必须创建一个批处理文件来对文件的名称运行。我正在使用的Excel版本是2010年。
我不知道如何做到这一点。有人可以帮忙吗?
答案 0 :(得分:1)
vbscript将通过使用Countif而不是单独查看每个单元来获取计数:
Dim oShell
Dim oFSO
Dim oOutput
Dim oFile
Dim xlApp
Dim strFolderPath
Dim Code
Set oShell = CreateObject("Shell.Application")
On Error Resume Next
strFolderPath = oShell.BrowseForFolder(0, "Select a Folder", 0).Self.Path
On Error GoTo 0
If Len(strFolderPath) > 0 Then
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oOutput = oFSO.CreateTextFile(oShell.NameSpace(&h10).Self.Path & "\Code Counts.txt", True) 'Puts the output file on your desktop
Set xlApp = CreateObject("Excel.Application")
For Each oFile in oFSO.GetFolder(strFolderPath).Files
If LCase(Left(oFSO.GetExtensionName(oFile), 3)) = "xls" Then
With xlApp.Workbooks.Open(oFile.Path)
If xlApp.Evaluate("ISREF('Ticket Source'!A1)") = True Then
oOutput.WriteLine "Filename: " & oFile.Name
For Each Code in Array("XF", "RE", "AG", "LK")
oOutput.WriteLine Code & " - " & xlApp.Evaluate("COUNTIF('Ticket Source'!C:C,""" & Code & """)")
Next
End If
.Close False
End With
End If
Next
xlApp.Quit
oOutput.Close
MsgBox "Code Counts Completed"
End If
Set oShell = Nothing
Set oFSO = Nothing
Set oOutput = Nothing
Set oFile = Nothing
Set xlApp = Nothing
答案 1 :(得分:0)
尝试这样的事情:
Set fso = CreateObject("Scripting.FileSystemObject")
Set xl = CreateObject("Excel.Application")
xl.Visible = True 'set to False for production
Set outfile = fso.OpenTextFile("output.txt", 2, True)
For Each f In fso.GetFolder("C:\some\folder").Files
If LCase(fso.GetExtensionName(f) = "xlsx" Then
Set wb = xl.Workbooks.Open(f.Path)
Set ws = wb.Sheets("Ticket Source")
xf = 0
re = 0
For Each cell In ws.UsedRange.Columns(23).Cells
Select Case cell.Value
Case "XF" : xf = xf + 1
Case "RE" : re = re + 1
End Select
Next
outfile.WriteLine "Filename: " & f.Name _
& vbNewline & "XF - " & xf _
& vbNewLine & "RE - " & re
wb.Saved = True
wb.Close
End If
Next
outfile.Close
xl.Quit
当然,您需要根据需要调整列号和输出文件名。