簡體   English   中英

Range.find無法使用excel VBA

[英]Range.find not working with 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也不返回任何內容。 任何幫助,將不勝感激。 謝謝!

這樣的事情會不會更快:

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列來查看(對於這兩種情況)

您需要將array(i)值轉換為date - > 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM