一个excel表格,4列,6万行左右。
例表:A        B        C        D
0        1        1        5
1        2        3        2
0        7        1        6
3        2        2        2
0        6        3        7
3        1        1        7要查询A列和C列同时重复的记录,比如上面的第一、第三行……
  Dim lsSql As String
  Dim lrRec As ADODB.Recordset
  Dim ldbConn As New ADODB.Connection
  ldbConn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=Excel Files;DBQ=" & "c:\1.xls; DefaultDir=c:\ ;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"  ldbConn.Open
  lsSql = "SELECT * "
  lsSql = lsSql & "......."
    
  Set lrRec = New ADODB.Recordset
  lrRec.CursorLocation = adUseClient
  lrRec.Open lsSql, ldbConn, adOpenForwardOnly, adLockReadOnly

解决方案 »

  1.   

    那几个“.......”要怎么写才效率高点(最好不要导入到数据库中操作,我想直接操作excel表)
      

  2.   


    A        B        C        D
    0        1        1        5    '第一行
    1        2        3        2    '第二行
    0        7        1        6    '第三行
    3        2        2        2    '第四行
    0        6        3        7    '第五行
    3        1        1        7    '第六行
    0        1        1        6    '第七行
    0        1        1        9    '第八行要求重新变化了下,查询的结果只要有第一行(或第七行或第八行)和第二行,也就是说,A列和C列重复,B列不重复的才进入查询结果集……
      

  3.   

    Excel 可以当作 Jet Enine 的外部数据库来查询。不过 SQL 语句无法直接支持重复判断的查询。需要多条语句或嵌套语句来实现。例如:Select * From yourtable Where A*10+C IN (Select x From (Select A*10+C As x, Count(*) As m Group by A*10+C) Where m > 1)
      

  4.   

    可以直接用ado,把excel做外部数据库
    SELECT DISTINCT s.*
    FROM (SELECT A,B,C,D FROM [Sheet1$] ) AS s,(SELECT A,B,C,D FROM [Sheet1$] ) AS t
    WHERE s.A=t.A AND s.C=t.C AND s.B<>t.B结果:
    0,1,1,5
    0,1,1,6
    0,1,1,9
    0,7,1,6正确结果应是
    0,1,1,5
    0,7,1,6
    如果是,sql代码可以再改一下
      

  5.   

    excel效率还是不怎么的……改数据库了,感谢各位抽时间来看。