Board logo

标题: [问题求助] VBS脚本如何在统计 excel 中某人名下有多少种不同数字? [打印本页]

作者: CrLf    时间: 2012-8-11 17:59     标题: VBS脚本如何在统计 excel 中某人名下有多少种不同数字?

本意是想写个 vbs 统计 Name 列下的 aaa 和 bbb(仅作示例,实际不知道该列具体有多少人)在 Num 列下出现了多少个不同的数字,比如原表格为:
  1. Num        Name
  2. 1        aaa
  3. 1        aaa
  4. 2        bbb
  5. 1        aaa
  6. 5        bbb
  7. 4        bbb
  8. 1        aaa
  9. 4        aaa
  10. 3        aaa
  11. 3        bbb
复制代码
希望得到的结果是:
  1. aaa 有 3 个不同数字:1、3、4
  2. bbb 有 4 个不同数字:2、3、4、5
复制代码
提供测试 xls 文件:

------------------------------------------------------------------------------------------
本想先排序以便判断,可是不知应如何按照录制的 vba 转为 vbs...
录制的 vba 宏如下:
  1. Macro1 Macro
  2. 宏由 User 录制,时间: 2012/8/11
  3.     ChDir "C:\tesst1"
  4.     Workbooks.Open Filename:="C:\tesst\test.xls"
  5.     Sheets("Sheet1").Select
  6.     Range("A2:B11").Select
  7.     Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _
  8.         , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
  9.         False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
  10.         xlSortNormal, DataOption2:=xlSortNormal
  11. End Sub
复制代码
改写的 vbs 如下:
  1. Set oExcel= CreateObject("Excel.Application")
  2. oExcel.Visible = True
  3. With oExcel
  4.     .Workbooks.Open "C:\tesst\test.xls"
  5.     .Sheets("Sheet1").Select
  6.     .Range("A2:B11").Select
  7.     .Selection.Sort .Range("B2"),xlAscending,.Range("A2"),xlAscending,_
  8.     xlGuess,1,False,xlTopToBottom,xlPinYin,xlSortNormal,xlSortNormal
  9.     .Quit
  10. End With
复制代码
运行后产生了错误信息提示:
类 Range 的 Sort 方法无效

不知道应如何解决,盼指点
作者: Demon    时间: 2012-8-11 22:11

给个半成品。



Const Source = "D:\test.xls"

'Author: Demon
'Website: http://demon.tw
'Date: 2012/8/11

Set con = CreateObject("ADODB.Connection")
set rs1 = CreateObject("ADODB.Recordset")
set rs2 = CreateObject("ADODB.Recordset")

con.Provider = "Microsoft.Jet.OLEDB.4.0"
con.ConnectionString = "Data Source=" & Source &_
";Extended Properties=Excel 8.0;"
con.Open
rs1.Open "SELECT DISTINCT Name FROM `Sheet1$`", con

Do Until rs1.EOF
    name = rs1.Fields("Name").Value
    WScript.Echo name
    rs2.Open "SELECT DISTINCT Num FROM `Sheet1$` WHERE Name = " & SingleQuoted(name), con
    Do Until rs2.EOF
        WScript.Echo rs2.Fields("Num").Value
        rs2.MoveNext
    Loop
    rs2.Close
    rs1.MoveNext
    WScript.Echo ""
Loop

Function SingleQuoted(s)
    SingleQuoted = "'" & s & "'"
End Function

作者: CrLf    时间: 2012-8-12 02:17

回复 2# Demon


    速度相当快,多谢指点!
    第一次看到,原来 xls 也可以当数据库来操作...收藏了,有空得学一下数据库。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2