Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5701|回复: 6

[已解决]Excel VBA 多条件查找数据

[复制链接]
发表于 2014-10-22 09:11 | 显示全部楼层 |阅读模式
本帖最后由 love_liwu 于 2014-10-22 16:47 编辑

样本.rar (18.77 KB, 下载次数: 44)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-10-22 09:56 | 显示全部楼层
本帖最后由 xdragon 于 2014-10-22 10:00 编辑

由于都做了改动,你看看行不

样本.rar

17.85 KB, 下载次数: 32

回复

使用道具 举报

 楼主| 发表于 2014-10-22 10:06 | 显示全部楼层
xdragon 发表于 2014-10-22 09:56
由于都做了改动,你看看行不

您好,感谢老师的解答,但是不是我想要的结果:
我想实现的目标:
首先sheet2是数据源,sheet1是查询界面的工作表,在sheet1中有5个条件选项,这些选项条件是根据sheet2表来的,具有唯一性,比如说班级对应的101等(具有唯一性,我就想到通过高级筛选宏代码实现),当这些条件为空的时候,点击“查询”即将sheet2中的数据复制到sheet1表中,当不为空时候,筛选出符合条件的放到sheet1表对应的单元格中。
不知道我陈述清楚了没有?恳请您的解答。
回复

使用道具 举报

发表于 2014-10-22 11:08 | 显示全部楼层
其实你想要的是将辅助列的内容做数据有效性的更新吧?已经更新了附件,你看看对不对吧

样本.rar

18.88 KB, 下载次数: 85

回复

使用道具 举报

 楼主| 发表于 2014-10-22 11:28 | 显示全部楼层
xdragon 发表于 2014-10-22 11:08
其实你想要的是将辅助列的内容做数据有效性的更新吧?已经更新了附件,你看看对不对吧

大致是这样的了,谢谢老师的热情解答,数据出错:

班级
101
学号
1
入学年月
201401
性别
喜好
1


得到答案:
姓名
班级
学号
入学年月
性别
喜好
数据1
数据2
张三
101
1
201401
1


另外我想加多这样的语句,不知道对不对:'判断当在A2:H区域数值变化的时候触发宏

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ChgArea As Range
    Dim ChgCell As Range
    Dim ChgAdd As String
    Set ChgArea = Range("A2:H10000")
    For Each ChgCell In ChgArea
        ChgAdd = ChgCell.Address
        If Target.Address = ChgAdd Then
            'MsgBox "注意:内容有变化,请确认标签是否正确!", vbExclamation
        Dim sht As Worksheet
        Set sht = ActiveSheet
        Application.ScreenUpdating = False
          Call 高级筛选—姓名
          Call 高级筛选—班级
          Call 高级筛选—学号
          Call 高级筛选—入学年月
          Call 高级筛选—性别
          Call 高级筛选—喜好
          Call 高级筛选—数据1
          Call 高级筛选—数据2
        Application.ScreenUpdating = True
        End If
    Next
End Sub

回复

使用道具 举报

发表于 2014-10-22 13:28 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub CommandButton1_Click()
  2.     Dim CNN, strsql$, aa, HH, BB, CC, JJ, KK, DD
  3.     Set CNN = CreateObject("adodb.connection")
  4.     Dim i&, t&
  5.     Application.ScreenUpdating = False
  6.     t = Sheet1.Range("A65536").End(xlUp).Row
  7.     CNN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  8.     If Sheet1.[K3] <> "" Then
  9.         aa = " and 班级 like '%" & Sheet1.[K3] & "%'"
  10.     End If
  11.     If Sheet1.[K4] <> "" Then
  12.         HH = " AND 学号 like '%" & Sheet1.[K4] & "%'"
  13.     End If
  14.     If Sheet1.[K5] <> "" Then
  15.         BB = " AND 入学年月 like '%" & Sheet1.[K5] & "%'"
  16.     End If
  17.     If Sheet1.[K6] <> "" Then
  18.         CC = " AND 性别 like '%" & Sheet1.[K6] & "%'"
  19.     End If
  20.     If Sheet1.[K7] <> "" Then
  21.         DD = " AND 喜好 like '%" & Sheet1.[K7] & "%'"
  22.     End If
  23.     JJ = aa & BB & HH & CC & DD
  24.     If Len(JJ) Then KK = "WHERE " & Mid(JJ, 6, 888)
  25.     strsql = "select 姓名,班级,学号,入学年月,性别,喜好,数据1,数据2 FROM [数据表$A:H] " & KK
  26.     Sheet1.Range("A2").CurrentRegion.ClearContents
  27.     Sheet1.Range("A1:H1") = Sheet2.Range("A1:H1").Value
  28.     Sheet1.[A2].CopyFromRecordset CNN.Execute(strsql)
  29.     CNN.Close
  30.     Set CNN = Nothing
  31.     Application.ScreenUpdating = True
  32. End Sub
复制代码
查询的我已经更改了。你看下。。
至于你的selectchange如果运行是你要的结果的话应该没问题,我也试过貌似没看出问题来

评分

参与人数 1 +1 收起 理由
love_liwu + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-10-22 13:55 | 显示全部楼层
xdragon 发表于 2014-10-22 13:28
查询的我已经更改了。你看下。。
至于你的selectchange如果运行是你要的结果的话应该没问题,我也试过貌似没 ...


谢谢老师,您真的很厉害。其实发现编程不是一件容易的事情。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 10:52 , Processed in 0.341824 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表