请问我要写一段excel下的vba,功能是查找包含某一字段的单元格,并返回其行数,应该怎么写呢?

比如我要查包含“许嵩”的单元格,但我的单元格都是这个样子的“许嵩半城烟沙”,“林俊杰她说”~另外我这些都是在第一列的,我只需要返回第一个包含这个内容的单元格的行数~谢谢!

第1个回答  2011-07-01
.find (what:="许嵩",lookat:=xlpart)
好象是这样吧
给一个在用的具体例子吧!
Dim F As Boolean
Set Rng = .Rows("1:1").Find(what:="责任部门", lookat:=xlWhole) '将上面没在有全部再出来一次

If Not Rng Is Nothing Then
k = Rng.Column
Lrow = .Cells(65536, k).End(xlUp).Row
ReDim arr2(1 To Lrow - 1) ' '余下的没有机台的责任部门
jj = 1
For i = 2 To Lrow
F = False
A = .Cells(i, k)
For j = 1 To UBound(arr)
If Len(arr(j, 1)) > 0 Then If arr(j, 1) = A Then F = True: Exit For
Next
If Not F Then arr2(jj) = A: jj = jj + 1
Next
Else
MsgBox "基础资料表中没有责任部门"
End If追问

看不懂。。我今天第一次接触这东西。。
.Cell,.Rows是啥。。

追答

天啊,看来你是不懂VBA,你想用公式来处理是吗?
公式你让我想想先

追问

确实不懂。。不过我有pascal和c++的基础。。基本能看懂。。不过.Cells是啥意思?
我刚才录制了一个macro看编码很复杂= =
Cells.Find(What:="股票型基金", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
好复杂。。而且,我要如何得到行数呢。。

追答

=MyFind(C18,C8:C30,1)'这是在某个单元格上写的公式,不用解释了吧?

下面这一段请在模块(你录制了一个macro的地方)复制进去,之后保存退出所有的EXCEL,再重新打开那个文件,再写入上面的公式,OK!
这是E里面的自定义函数,在2003中测试成功

Function MyFind(FindTxt As Range, FindRag As Range, FindMode As Boolean)
'FindTxt 要查找的字串,要自己点选,
'FindRag'查找的范围要自行选择
'FindMode 查找的方式单元格全部匹配为1,在你的要求里,只是部分匹配,请用0
Dim Rng As Range
Set Rng = FindRag.Find(what:=FindTxt.Value, lookat:=IIf(FindMode, 1, 0)) '
If Not Rng Is Nothing Then
MyFind = Rng.Row '查找到显示行数
Else
MyFind = "not finded"'没找到时显示这个字串
End If
End Function

本回答被网友采纳
第2个回答  2011-07-01
讲明白点,这样我都听不懂
第3个回答  2011-07-01
如果有不止一个单元格包含你要找的某字段,返回哪一个的行数?追问

只会有一个。。
你可以想像为“一人一首成名曲”
现在是要从整个第A列查出来。。

追答

Sub Macro1()
Dim myfind As String
myfind = Range("C1")
Columns("A:A").Select
Selection.Find(What:=myfind).Activate
Range("b1") = ActiveCell.Row
End Sub
这个是假设你要查找的内容(比如“许嵩”)在单元格C1,而查找的结果(也就是包含“许嵩”的单元格行数放在B1单元格。

相似回答