[英]excel VBA index and match functions
我正在嘗試將Excel函數更改為VBA代碼。 在Col AC,第2行中的以下公式... =IF(ROWS($1:1)< MATCH(0.01,H$2:H$10)+1,"",INDEX(X:X,ROWS($1:1)-MATCH(0.01,H$2:H$10)+1))
...掃描第H列的前10行。
此公式將在Col H行中查找第一個非零值。找到該行后,col X中的值將在Col AC中打印出來,以便Col AC中的行與第一個非零行匹配。 -Col H中的零值。
我希望這種描述是有意義的。 它在excel工作表中完美工作。 現在,我想將其更改為VBA代碼,這就是我所擁有的...
For i = 2 To lengthRows
With Application.WorksheetFunction
Range("AC" & i) = .IF(Rows(1) < .Match(0.01, Range("H2:H10")) + 1, "", .Index(Columns(24), Rows(1) - .Match(0.01, Range("H2:H10")) + 1))
End With
Next i
... Rows(1)是第一行,Columns(24)是ColX。
運行代碼時,出現運行時錯誤不匹配'13:類型不匹配。
我試圖了解如何回答上一個問題: Excel VBA:如何解決索引和匹配函數類型不匹配錯誤
以前面回答的問題為例。 您正在將匹配結果推入索引公式。 如果匹配結果找不到匹配項,則它將返回錯誤2042,當將其推入Index公式時,將給出不匹配錯誤。
使該解決方案適合您的示例如下:
Dim rw As Variant
With Application.WorksheetFunction
For i = 2 To lengthRows
rw = .Match(0.01, Range("H2:H10")) 'Is there a reason you're not specifying the third parameter 0 for exact match?
If Not IsError(rw) Then
Range("AC" & i) = .If(Rows(1) < .Match(0.01, Range("H2:H10")) + 1, "", .Index(Columns(24), Rows(1) - .Match(0.01, Range("H2:H10")) + 1))
Else
' Do something else if there was an error
End If
Next i
End With
我認為,一旦您想使用VBA,就需要使用VBA的附加功能,而不是堅持使用Excel中構造的公式。
由於您要在H列中查找第一個具有非零值的單元格,因此可以使用Application.Match
輕松找到它,但是您需要將match的第三個參數設置為-1
(表示大於,查找值> 0.01的匹配項)。
因此,現在有了行號,如果您想在X列中查找該行的值,則可以使用Range("AC2").Value = Range("X" & MatchRow + Rng.Item(0).Row).Value
碼
Option Explicit
Sub ConvertFormulaToVBA()
Dim MatchRow As Variant
Dim Rng As Range
Dim lengthRows As Long, i As Long
lengthRows = Cells(Rows.Count, "H").End(xlUp).Row '<-- get last row with data in Column H (in your example it's 10)
Set Rng = Range("H2:H" & lengthRows) ' <-- set the range to H2 until last row in Column H
MatchRow = Application.Match(0.01, Rng, -1) ' <-- setting the third parameter to -1, meaning greater than 0.01
If Not IsError(MatchRow) Then
Range("AC2").Value = Range("X" & MatchRow + Rng.Item(0).Row).Value
Else
' raise a message box if there is no Match
MsgBox "No none-zero value found at Range " & Rng.Address
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.