excel vba基础入门 find 第二个 不要findnext 我第一下就要查找第二个呢

Excel vba 多个条件查询应该怎么做,可以用find方法吗?_百度知道
Excel vba 多个条件查询应该怎么做,可以用find方法吗?
我的多条件的意思是:比如一个Excel表有好多字段(比如姓名,年龄,代号,工资,部门等),我想做个查询,可以有两个及以上的查询条件,比如(张*,财务部),最好都可以模糊查询,如(张*,财*)。现在我已经用ADO做了,但是.FullRowSelect = True怎么也通不过,附件控件和引用也都弄了,不知道怎么回事,谁能帮解释解释。有好答案一定加分,谢谢各位了。
提问者采纳
给你多个查询替换的例子看看,有用的话,给加分啊'多字符替换vba程序Public Sub Multi_replacement() '多个字符替换为一个Dim IP As VariantDim OP As StringDim TP As StringIP = Split(Application.InputBox(&替换的字符,多个用|隔开&), &|&)OP = Application.InputBox(&替换为&)TP = Application.InputBox(&单元格内替换为Y,(xlPart),单元格整体替换为N(xlWhole)&)
If TP = &N& Or TP = && Then
TP = xlWhole
TP = xlPart
End IfFor i = LBound(IP) To UBound(IP)
'LookAt:=xlWhole,单元格匹配,LookAt:=xlPart为字符匹配,单元格内字符也会替换,MatchCase:=True是区分大小写
Cells.replace What:=IP(i), replacement:=OP, LookAt:=TP, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=FalseNextEnd Sub
提问者评价
没看到满意答案,给你好了~
其他类似问题
为您推荐:
其他4条回答
用find是可以的,查询条件再说的具体点. 在表单上拖2个文本框控件,文本框里输入关键字,比如(张,财)代码里面取关键字,用like和表里的内容比较,多个查询的话,可以用and连接.代码框架如下:strKey1=textbox1.textstrKey2=textbox2.textfor iRow=1 to 100
if (strKey1 like Activesheet.Range(iRow,iCol)) and
(strKey2 like Activesheet.Range(iRow,iCol+1))
messagebox(&查询到&)
endifend for
本程序是在sheet1中建立基础信息,在sheet2显示结果,在sheet2中的A2:I2中输入关键字,如表1中A列是姓名,在表2中A2输入张就姓张的全部显示在表2中,可以多条件,表1 中B列是部门,在表2中2输入财,部门名称中有财字的全部显示出来,基本上符合你说的要求
Sub 查询筛选()
Dim Erow As Integer
With Sheets(&sheet2&)
Erow = Sheets(&sheet1&).[a65536].End(xlUp).Row
.Range(&a3:i65536&).ClearContents
For Each ce In .[a2:i2]
If ce && && Then ce.Value = &*& & ce & &*&
'加上通配符*,实现模糊查询
Sheets(&sheet1&).Range(&A2:I& & Erow).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
.[a1:i2], CopyToRange:=.[A3], Unique:=False...
给你2个实例
61、查找指定值
Sub 查找指定值()
Dim result As String, str1 As String, str2 As String
Dim c As Range
result = Application.InputBox(prompt:=&请输入要查找的值:&, Title:=&查找&, Type:=2)
If result = &False& Or result = && Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With ActiveSheet.Cells
Set c = .Find(result, , , xlWhole, xlByColumns, xlNext, False)
If Not c Is Nothing Then
str1 = c.Address
c.Interior.ColorIndex = 4
'加亮显示
str2 = str2 & c.Address & vbCrLf
Set c = .F...
在VBA中用Sql查询就可以
您可能关注的推广
excel的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁WorksheetFunction_excel表格的基本操作|excel制作财务报表|我要学excel|excel函数
扫描二维码访问网站:
查看: 377|回复: 6
自定义函数使用findnext函数时总是找不到下一个的问题?
本帖最后由 jxyu1217 于
16:49 编辑
根据日常的需要,想改进一下vlookup函数,自定了一个名为“匹配”的自定义函数&&Public Function 匹配(tValue As Variant, tRange As Variant, tCol As Variant),前三个参数分别参照vlookup的前三个参数。这个函数的主要目的是这样的,先用countif函数统计tvalue在查找范围(其实是查找范围的第一列)出现的次数,如果出现1次,直接调用vlookup函数,如果出现一次以上,则用find和findnext把所有的结果找出来,用&;&连接在一起,并改变该单元格的底色。现在的问题是,findnext函数那里总是出错,总是找不到下一个或者莫名奇妙的终止程序,还有个问题就是不知道怎么修改该单元格的底色。烦请高手指点。详见附件
(11.79 KB, 下载次数: 17)
16:35 上传
点击文件名下载附件
复制代码'三个参数相当于vlookup的前三个参数
Public Function 匹配(tValue As Variant, tRange As Variant, tCol As Variant)
Dim w As Workbook, sh As Worksheet, r5 As Range
Dim t1 As String
Set r5 = tRange.Resize(3, 1)&&'用find搜索时,只搜索rRange的第一列R5
t1 = tValue.Text
Debug.Print r5.Address
'如果查找的内容为空,直接返回空值
If t1 = && Then
& & 匹配 = &&
Else
& & '先用countif函数求出tValue在查找范围出现的次数
& & aa = Application.WorksheetFunction.CountIf(r5, t1)
& & '如果查找不到,返回空值
& & If aa = 0 Then
& && &&&匹配 = &&
& & ElseIf aa = 1 Then
& && &&&bb = Application.WorksheetFunction.VLookup(t1, tRange, tCol, False)
& && &&&If bb = 0 Then
& && && && &匹配 = &&
& && &&&Else
& && && && &匹配 = bb
& && &&&End If
& & Else
& & '超过一个,用find函数,把所有找到的结果用“;”连接成tResult
& && &&&Dim cRange As Range, tResult As String, strKeyWord As String
& && &&&With r5
& && && && &
& && && && &Set cRange = .Find(t1, LookIn:=xlValues, LookAt:=xlWhole)
& && && && &If Not cRange Is Nothing Then
& && && && && & firstAddress = cRange.Address
& && && && && & Do
& && && && && && &&&If tResult = && Then
& && && && && && && && &tResult = cRange.Offset(0, tCol - 1)
& && && && && && &&&Else
& && && && && && && && &tResult = tResult & &;& & cRange.Offset(0, tCol - 1)
& && && && && && &&&End If
& && && && && &
& && && && && && &&&Set cRange = .FindNext(cRange)& &'即使第二个存在,也找不到第二个,cRange总是nothing
& && && && && & Loop While Not cRange Is Nothing And cRange.Address && firstAddress&&'执行这一句的时候,经常会终止程序,不知道为什么
& && && && &End If
& && &&&End With
& && &&&'对于找到不止一个的,想改变单元格底色,不知道怎么改
& && &&&匹配 = tResult
& & End If
End If
End Function
复制代码
还有个问题就是不知道怎么修改该单元格的底色。自定义函数不能改单元格的底色
关注一下,我也想知道
顶一下,期待大牛出现。
百思不得其解:如果在程序中调用楼主的函数,好像没有问题,但在单元格里用这个函数,就出错:
Public Sub AAA()
MsgBox 匹配(Sheet1.[A1], Sheet2.[A1:b4], 2)
zez 发表于
百思不得其解:如果在程序中调用楼主的函数,好像没有问题,但在单元格里用这个函数,就出错:
Public Sub AAA( ...
是啊,自定义函数确实有很多弄不明白的东西。
除Replace方法可以修改单元格的值,还有自定义函数可以插入或修改批注外,自定义函数总是被动的,不能做一些主动的动作,请看美国人写的教材说明:
捕获.JPG (94.1 KB, 下载次数: 1)
02:26 上传
浏览过的版块
积分≥4700即可申请
优秀会员奖章No.1
优秀会员奖章No.2
优秀会员奖章No.3
最佳管理者
最佳管理者奖章No.4
最佳管理者
最佳管理者奖章No.3
最佳管理者
最佳管理者奖章No.2
最佳管理者
最佳管理者奖章No.1
金牌优秀管理者
金牌优秀管理者勋章No.1
优秀管理者
优秀管理者勋章No.1
金牌优秀会员
金牌优秀会员奖章No.2
金牌优秀会员
金牌优秀会员奖章No.1
玩命加载中,请稍候
玩命加载中,请稍候
File: 17:55:34查看: 4044|回复: 11
急求vba find条件查找的问题?
阅读权限20
在线时间 小时
各位老师,我想在下表中用vba find 条件查找: 条件是:性质=作废,并且 品名=拉手 所在地行,并将该行的A6:F6的区域字体变成红色的?
帮帮忙啊?
编号性质品名单位规格本期结存
数量DB000063使用拉手付 <font color="#DB001722作废盆子个 <font color="#DB001796使用锨把个 <font color="#DB001843作废门锁把 <font color="#DB000062作废拉手付 <font color="#
阅读权限95
在线时间 小时
Sub 按钮1_单击()
For Each rng In Sheet1.Range(&a4:a8&)
Set dd1 = rng.Offset(0, 1).Find(what:=&作废&, LookIn:=xlValues)
Set dd2 = rng.Offset(0, 2).Find(what:=&拉手&, LookIn:=xlValues)
If Not dd1 Is Nothing And Not dd2 Is Nothing Then
rng.Resize(1, 6).Font.ColorIndex = 3
End If
Next
End Sub复制代码
阅读权限30
在线时间 小时
Sub aa()
Set c = [B:B].Find(&作废&)
& & If Not c Is Nothing Then
& && &&&firstAddress = c.Address
& && &&&Do
& && && & If Cells(c.Row, 3) = &拉手& Then
& && && &&&Range(Cells(c.Row, 1), Cells(c.Row, 6)).Font.ColorIndex = 3
& && && & End If
& && && && &Set c = [B:B].FindNext(c)
& && &&&Loop While Not c Is Nothing And c.Address && firstAddress
& & End If
End Sub复制代码
阅读权限70
在线时间 小时
& & & & & & & &
参考一下:
12:51 上传
点击文件名下载附件
9.5 KB, 下载次数: 187
阅读权限70
在线时间 小时
最近药用,记下来
阅读权限20
在线时间 小时
请问老师&&以下这句是什么意思啊?
Loop While Not c Is Nothing And c.Address && firstAddress
阅读权限30
在线时间 小时
LHX19 发表于
请问老师&&以下这句是什么意思啊?
Loop While Not c Is Nothing And c.Address&&firstAddress
循环 当 c 不是空值,和 c 的现在位置不等于查找的第一个位置
上面程序是Range.Find 在帮助文件的示例
使用 FindNext 方法可重复搜索。
当搜索到指定查找区域的末尾时,此方法将绕回到区域的开始位置继续搜索。发生绕回后,要停止搜索,可保存第一个找到的单元格地址,然后测试后面找到的每个单元格地址是否与其相同
阅读权限50
在线时间 小时
changxuegu 发表于
这个好用。作个记号!
阅读权限20
在线时间 小时
各位老师, 我请教一下,我想用find查找方法,但当找到了第一个满足条件的就立刻停止循环,用什么发方法啊?
阅读权限20
在线时间 小时
非常好我贴,/留个脚印。
玩命加载中,请稍候
玩命加载中,请稍候
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!
本站特聘法律顾问:徐怀玉律师 李志群律师
Powered by查看: 924|回复: 8
如何用Find 查找到满足条件的第一个记录
阅读权限20
在线时间 小时
我的工作表里满足find查找条件的有好几项,比如:
Set rng = Range(&H2:H100&).Find(&&, LookIn:=xlValues, Lookat:=xlWhole)
当输出查找到的记录,我发现总是第二条被显示出现,第一条记录不会显示,
请问为什么不是显示第一条记录呢?如何做才能显示第一条记录呢?
阅读权限70
在线时间 小时
查找是从第一个单元格往下找 第一个会略过 所以你用H1:H100
阅读权限95
在线时间 小时
& & & & & & & &
Set Rng=[H:H].Find()
阅读权限95
在线时间 小时
如果缺省After参数,则默认从第一个单元格之后的第二个单元格开始,如果第一个单元格就是你要查找的内容,那么就错过了
纠正方法:设置After参数为查找区域最后一个单元格:
Set rng = Range(&H2:H100&).Find(&&, LookIn:=xlValues, After:=[H100], Lookat:=xlWhole)
阅读权限20
在线时间 小时
可是我发现如果满足条件的只有一条记录,即使它在第二条,我用Range(&H2:H100&).Find(&&, LookIn:=xlValues, Lookat:=xlWhole)
也能找到,只是多条满足条件的记录,才会出现满足条件的第二条被显示出现,为什么呢?
阅读权限95
在线时间 小时
& & & & & & & &
leetow2006 发表于
可是我发现如果满足条件的只有一条记录,即使它在第二条,我用Range(&H2:H100&).Find(&&, LookIn:= ...
指定After参数,见4楼
阅读权限30
在线时间 小时
zhaogang1960 发表于
如果缺省After参数,则默认从第一个单元格之后的第二个单元格开始,如果第一个单元格就是你要查找的内容,那 ...
赵版主,拜托抽时间帮帮me
阅读权限20
在线时间 小时
zhaogang1960 发表于
指定After参数,见4楼
我没看懂版主的意义。
我是说:如果满足条件的只有一条记录,即使它在第二条,我用Range(&H2:H100&).Find(&&, LookIn:=xlValues, Lookat:=xlWhole)也能找到,可是版主不是说如果缺省After参数,则默认从第一个单元格之后的第二个单元格开始,那也就是说是从H3开始查找的,可是我的满足条件的记录在H2,那应该查不到的呀,可是为什么能够查到呢?
阅读权限95
在线时间 小时
本帖最后由 zhaogang1960 于
22:06 编辑
leetow2006 发表于
我没看懂版主的意义。
我是说:如果满足条件的只有一条记录,即使它在第二条,我用Range(&H2:H100&).Fin ...
如果满足条件的只有一条记录,那么不管它在查找区域的哪个单元格,它总是第一条记录,当然不必指定After参数
但如果满足条件的不止一条记录,且查找区域的第一个单元格恰好就是你要查的内容,如果不指定After参数,则查找的第一个记录不会是第一个单元格,After参数默认值就是查找区域的第一个单元格( After:=[H2]),即从第二个单元格H3开始查找
玩命加载中,请稍候
玩命加载中,请稍候
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!
本站特聘法律顾问:徐怀玉律师 李志群律师
Powered by

我要回帖

更多关于 excel vba 的文章

 

随机推荐