关于VBA的Find函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于VBA的Find函数相关的知识,希望对你有一定的参考价值。

我想在SHEET1里的C1单元格显示从SHEET2的A列里的数据表查找的100的数据的右边的值

Private Sub CommandButton1_Click()
With Sheet2.Columns("A:A")
Set c = .Find(100, LookIn:=xlValues)
Sheet1.Range("c1").Value = Cells(c.Row, 2)
End With
End Sub

请问有什么问题,请高手指教,谢谢!

  在Excel VBA中Find函数的基本用法。Find函数就是Excel表格中的查找功能,可以通过录制宏的方法来获得Find的代码。
  Sub Macro1()
  Cells.Find(What:="A", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
  xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
  , SearchFormat:=False).Activate
  Cells.FindNext(After:=ActiveCell).Activate
  End Sub
  从上面可以看到Find函数共有8个参数,分别对应Excel表格查找里面选项的各个项目,这里我就不多说了,感兴趣可以自己试下,其中只有一个参数是必须的,那就是"What",即要找的内容。下面来看整理之后的代码
  Sub Find演示()
  Dim rng
  Set rng = ActiveSheet.UsedRange.Find(What:="A")
  \'MsgBox "字母A地址为" & rng.Address(0, 0)
  \'MsgBox "字母A所在行为" & rng.Row
  MsgBox "字母A所在列为" & rng.Column
  End Sub
参考技术A Private Sub CommandButton1_Click()
With Sheet2.Columns("A:A")
Set c = .Find(100, LookIn:=xlValues, LookAt:=xlWhole)
Sheet1.Range("c1").Value = c.Offset(0, 1).Value
End With
End Sub
------
LookAt:=xlWhole 表示查找时整个单元格匹配,而不匹配1005、51008之类的数字
Offset(0, 1)表示在c的位置上,行移动0,列右移1 ,的单元格
参考技术B Private Sub CommandButton1_Click()
Dim c As Range
With Sheet2.Columns("A:A")
Set c = .Find(100, LookIn:=xlValues)
Sheets("sheet1").Range("C1") = Sheets("sheet2").Cells(c.Row, 2)
End With
End Sub
你的代码中cells(c.row,2)没有指定是哪个表的,会引用你按钮所在的表的单元格了。
参考技术C Sheet1.Range("c1").Value = Cells(c.Row, 2)
改成
Sheet1.Range("c1").Value = c.offset(0,1)

或者改成:
Sheet1.Range("c1").Value =Sheet2.Cells(c.Row, 2)本回答被提问者采纳
参考技术D Private Sub CommandButton1_Click()
With Sheet2.Columns("A:A")
Set c = .Find(100, LookIn:=xlValues)
Sheet1.Range("c1").Value = .Cells(c.Row, 2)
End With
End Sub

Excel VBA 使用 .Find 和 .FindNext 查找精确字符串

【中文标题】Excel VBA 使用 .Find 和 .FindNext 查找精确字符串【英文标题】:Excel VBA finding an exact string using .Find and .FindNext 【发布时间】:2015-08-13 21:28:00 【问题描述】:

我在使用 .Find 和 .FindNext 时遇到问题。我想准确搜索字符串“Q1”。目前,当我的 .FindNext 函数运行时,它会在一个以“Q10”为值的单元格中找到“Q1”。如何限制 .Find 和/或 .FindNext 函数来搜索我想要的确切字符串? 感谢您的帮助!

这是我的代码。例如,我想在可能具有 Q1、Q3、Q5、Q10、Q11、Q1、Q2、Q1 等的单元格范围内查找“Q1”的第三个实例。

Dim findValue As Range

' find first instance of Q1
searchString = "Q1" 
Set findValue = ActiveWorkbook.Sheets("Sheet1").Cells.Find(What:=searchString)
findValue.select

' set loopMax to 2 because we want to .Findnext to run two more times to arrive at the third instance of "Q1" 
For counter = 1 To loopMax
Set findValue = ActiveWorkbook.Sheets("Sheet1").Cells.FindNext(findValue)
findValue.select
Next counter  

我被困住了。任何帮助将不胜感激!

【问题讨论】:

需要在您对Find()的调用中添加lookat:=xlWhole 老兄,谢谢!!你们是救生员。 【参考方案1】:

需要在调用 Find() 时添加 lookat:=xlWhole

【讨论】:

以上是关于关于VBA的Find函数的主要内容,如果未能解决你的问题,请参考以下文章

vba中 find函数每个参数的详细解释

Excel vba:.find 函数返回运行时错误 91

IF FIND 函数在 vba 中找不到任何内容

求大神解答find函数

vba语言中find 的用法

Excel VBA 使用 .Find 和 .FindNext 查找精确字符串