Range.find不能使用excel VBA

在excel VBA中,我遇到了range.find方法的问题。

我有两张床单。 表A的格式如下(月份不规则):

Dec-1997 Dec-1999 Dec-2000 Dec-2001 Dec-2002 Dec-2003 Dec-2004 Dec-2005 Dec-2006 Mar-2007 Dec-2007 Dec-2008 Dec-2009 Dec-2010 Dec-2011(a) Dec-2013 Dec-2014 

工作表B有一个列A,其中date按照下面的定期季度间隔布置。

 Jun-2011 Sep-2011 Dec-2011 Mar-2012 Jun-2012 Sep-2012 Dec-2012 Mar-2013 Jun-2013 Sep-2013 Dec-2013 Mar-2014 Jun-2014 Sep-2014 Dec-2014 

我希望我的VBA代码遍历表A中的每个项目,并在表B中find关联的行号。

以下是我的代码片段:

 Sub sSearch(arr As Variant, j As Integer, rngSearch As Range, ws As Worksheet) Dim wsWrite As Worksheet Set wsWrite = ThisWorkbook.Sheets(1) ' Sheet B Dim rngResult As Range Dim intRows As Integer Dim rngRow As Range Dim strDate As String For i = 0 To UBound(arr) Set rngResult = rngSearch.Find(arr(i), LookIn:=xlValues) intRows = rngResult.End(xlDown).Row - rngResult.Row ' determine number of rows in Sheet A For k = 1 To intRows ' strDate = Left(rngResult.Offset(k).Text, 9) set rngRow = wsWrite.Range("A:A").Find(What:=strDate, LookIn:=xlValues) wsWrite.Cells(intRow, i + j).Value = arr(i) wsWrite.Cells(intRow, i + j).Value = _ ws.Cells( _ rngResult.End(xlDown).Row, _ rngResult.End(xlToRight).Column).Value Next Next End Sub 

我在下面一行中得到一个错误

 set rngRow = wsWrite.Range("A:A").Find(What:=strDate, LookIn:=xlValues) 

我尝试了所有我能想到的,包括通过微软文档查找,在这里search,但没有运气。 rngRow没有返回任何内容,即使我可以看到存储在strDate中的值是该表单元格A2中的一个值。 任何帮助,将不胜感激。 谢谢!

您需要将array(i)值转换为date – > CDate(arr(i)) 。 新build查找行如下所示:

Set rngRow = wsWrite.Range("A:B").Find(What:=CDate(arr(i)), LookIn:=xlFormulas)

没有CDate(arr(i))你找不到数据,你可以手动testing在Excel中,只有像"Dec-00"searchExcelfind的东西

检查date或string:

 If IsDate(Arr(i)) Then value_to_lookup = CDate(Arr(i)) Else value_to_lookup = Arr(i) End If Set rngRow = Range("A:b").Find(What:=value_to_lookup, LookIn:=xlFormulas) 

会不会这样更快:

 Function getRow(str As String, rng As Range) As Long str = Left (str, 10) getRow = Application.Match(str, rng, 0) End Function 

这将给行长,可以用来设置范围…

或者把这个单元格作为参考:

 Function getCell(str As String, rng As Range) As Range str = Left (str, 10) Set getCell = rng(1).Offset(Application.Match(str, rng, 0) - 1) End Function 

假设你使用1列来查看(对于这两种情况)