0

每个月我收到大约 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。

我不知道该怎么做。任何人都可以帮忙吗?

4

2 回答 2

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
于 2013-08-29T15:47:05.460 回答
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

当然,您需要根据需要调整列号和输出文件名。

于 2013-08-29T14:17:32.390 回答