【excel vba】在A列中搜索包含特定内容的单元格,查找它右边的单元格的内容
昨天才学的vba……见谅。我想找到哪个序号左边有“满”。例如图中应该输出99A0007我写的代码是:Sub课容量判断()''课容量判断宏'Sheets("已选人数统计")...
昨天才学的vba……见谅。我想找到哪个序号左边有“满”。例如图中应该输出99A0007
我写的代码是:
Sub 课容量判断()'' 课容量判断 宏'Sheets("已选人数统计").Select Cells.Find(what:="满").Activate ActiveCell.Offset(0, 1).Select Dim bianhao As Integer biaohao = Selection Sheets("已选课程").Select '回到已选课程的表判断有没有选课容量已满的课
h = Application.WorksheetFunction.CountIf(Range("C81:C20"), bianhao) If h >= 1# Then 'MsgBox "课程编号为" & biaohao & "的课容量已满" End IfEnd Sub
遇到的问题是它用find找不到A1,单元格,会找到A2不知道为什么……
这问题应该不难,麻烦解答了。 展开
我写的代码是:
Sub 课容量判断()'' 课容量判断 宏'Sheets("已选人数统计").Select Cells.Find(what:="满").Activate ActiveCell.Offset(0, 1).Select Dim bianhao As Integer biaohao = Selection Sheets("已选课程").Select '回到已选课程的表判断有没有选课容量已满的课
h = Application.WorksheetFunction.CountIf(Range("C81:C20"), bianhao) If h >= 1# Then 'MsgBox "课程编号为" & biaohao & "的课容量已满" End IfEnd Sub
遇到的问题是它用find找不到A1,单元格,会找到A2不知道为什么……
这问题应该不难,麻烦解答了。 展开
2个回答
2014-06-03
展开全部
你是A2里边也是 满?或者其他位置还有 满 并不是你图上的 只有A1 有满?
要知道Find 的方法 你使用的参数 默认是 从左上角A1 之后开始的 所以 A2中 有满足条件的就不会显示找到A1 只有仅仅A1 一个单元格中 有 满 才会左后搜索到………………即A1是最后一个搜索的单元格,在没有指定开始位置的时候!
删除其他单元格 中的 满 仅仅保留A1 中有 就可以找到了……
你的这个搜索 没有实际使用意义!因为 只能找到A1 之后的第一个单元格中满足条件的……所以 根据你的需求 你要改变一下方法……避开第一行 数据就能按着你的意思来找到第一个满足条件的了……
祝你快乐!
要知道Find 的方法 你使用的参数 默认是 从左上角A1 之后开始的 所以 A2中 有满足条件的就不会显示找到A1 只有仅仅A1 一个单元格中 有 满 才会左后搜索到………………即A1是最后一个搜索的单元格,在没有指定开始位置的时候!
删除其他单元格 中的 满 仅仅保留A1 中有 就可以找到了……
你的这个搜索 没有实际使用意义!因为 只能找到A1 之后的第一个单元格中满足条件的……所以 根据你的需求 你要改变一下方法……避开第一行 数据就能按着你的意思来找到第一个满足条件的了……
祝你快乐!
追问
A2没有满。只有A1有。
那请问有什么更好的搜索方法吗??
最好能做到一次找出所有满(默认情况是全部中只有一个满)并且用msgbox提示
追答
如果 A2 及其他没有 满 只有A1 有的话 是应该能够找到的………………我这里运行这样的语句 是可以找到的……
另外 你这是个 默认的是搜索全部的单元格 如果其他单元格中有很多数据的话 速度估计会很慢(没试过)应该指定一个搜索区域更好!(详细 参看 Find 方法 的说明)
如果 你一次 要找出所有的 满 在 某个区域中 那么 你就要用到 工作表函数 了 不知道 你要将找到的结果怎样来处理 所以无法给你更具体的代码建议……
如果 你的 A列 总是 会有 一个 满 字的话,就将第一行空出来 作为列标题使用 这样 你原来的语句就可以正确执行了……即使第一个有效数据 出现在数据区域的最上端
如果 你的A列 只能有一个 满 才算正确 那么 在代码开头的部分 可以使用 If
If WorksheetFunction.CountIf(Cells, "满") > 1 Then
MsgBox "数据有误"
Exit Sub
这样类似的 代码……
其他 需要你详细说说 你想 怎么做 和 你的数据是怎样的
你似乎需要如下的代码 将 左边 显示为 满 的 右边的编号 都用信息窗口显示出来……
Sub test()
Dim mycell As Range
'For Each mycell In ActiveSheet.Cells '这一行 要进行全表的搜索速度会比较慢 建议使用下面的限定范围
For Each mycell In ActiveSheet.Range("a:g")
If mycell.Value = "满" Then
If BH = "" Then
BH = BH & ": " & mycell.Offset(0, 1).Value
Else
BH = BH & "," & mycell.Offset(0, 1).Value
End If
End If
Next
MsgBox "这些标号全部已满" & BH
End Sub
祝你一切顺利!
展开全部
function myfun(rng as range,finstr as string) as string
on error goto l_end
myfun = rng.find(finstr,lookin:=xlvalues,lookat:=xlwhole).address
exit function
l_end:
myfun=0
end function
'主函数
sub test()
dim addr1 as string
addr1 = myfun(range("a:d"),"满")
if addr1 = 0 then
msgbox("没找到")
else
msgbox("订单号" & range(addr1).offset(0,1).value & "左边有 满")
end if
end sub
on error goto l_end
myfun = rng.find(finstr,lookin:=xlvalues,lookat:=xlwhole).address
exit function
l_end:
myfun=0
end function
'主函数
sub test()
dim addr1 as string
addr1 = myfun(range("a:d"),"满")
if addr1 = 0 then
msgbox("没找到")
else
msgbox("订单号" & range(addr1).offset(0,1).value & "左边有 满")
end if
end sub
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询