用于Excel的VBscript计算列中的字符串

时间:2013-08-29 12:54:00

标签: excel vbscript

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

我不知道如何做到这一点。有人可以帮忙吗?

2 个答案:

答案 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

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