Range.find无法使用excel VBA

时间:2016-02-29 10:58:31

标签: excel vba 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,其中日期按照下面的常规季度间隔排列。

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中找到关联的行号。

以下是我的代码中的代码段:

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)

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

2 个答案:

答案 0 :(得分:3)

这样的事情会更快:

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

这将使行尽可能长,可用于设置范围...

或者将单元格作为ref:

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

答案 1 :(得分:1)

您需要将array(i)值转换为日期 - > CDate(arr(i))。新的Find行看起来像这样:

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

如果没有CDate(arr(i))您无法找到数据,您可以在excel中手动测试,只能使用"Dec-00"等搜索来查找excel

检查日期或字符串:

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)