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列来查看(对于这两种情况)