2017-01-31 3 views
0

VBA 코드로 Excel 함수를 변경하려고합니다. 아래 골 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))VBA 색인 및 일치 함수를 Excel에서

는 ... H. 골의 제 10 개 행을 검사

이 수식 골 H의 행의 제 없음 - 제로 값을 찾는다 그 행을 찾으면 Col X의 값이 Col AC에 인쇄되어 Col AC의 행이 Col H의 첫 번째 0이 아닌 값을 가진 행과 일치하게됩니다.

감각. 엑셀 워크 시트에서 완벽하게 작동합니다. 이제, 내가 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 

... 행 (1) 첫 번째 행과 열 (24)은 골 X를

입니다 ... 내가 가진 무엇

코드를 실행할 때 런타임 오류가 일치하지 않습니다 '13 : 형식이 일치하지 않습니다.

나는이 이전의 질문에 대답했다 방법을 이해하는 것을 시도하고있다 : Excel VBA: how to solve Index and Match function type mismatch error

+0

0.01, H $ 2 : H $ 10)', 0.01 값을 찾고, 0 값이 아닌 값을 찾고, 셀이 0.2이면 'Match'는 그것을 돌려주지 않을 것입니다. 'Match'를 'MATCH (0.01, H $ 2 : H $ 10, -1)'로 변경해야하며, 세 번째 매개 변수가 '-1'이면 0.01보다 큰 값을 찾습니다. –

답변

1

이전 대답 질문에서 예를 복용합니다. 일치 결과를 색인 수식으로 푸시합니다. 일치하는 결과가 일치하는 항목을 찾지 못하면 오류 2042가 반환됩니다.이 수식은 인덱스 수식에 푸시되면 불일치 오류가 발생합니다.

다음과 같이 될 것입니다 귀하의 예를 들어 해당 솔루션을 적응 :

당신이 VBA를 사용하려면 일단 생각
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 
+0

Hi Zerk, 나에게 형식 불일치 오류를 준다 – Sarah

+0

안녕하세요 얼룩, 아래 코드가 작동합니다. 도와 주셔서 정말로 고맙습니다. – Sarah

+0

'Dim rw As Variant Application.WorksheetFunction 사용 i = 2의 경우 lengthRows rw = .Match (0.01, Range ("H2 : H10")) +1'세 번째 매개 변수를 지정하지 않는 이유가 있습니까? 정확한 일치를 위해 0? 아니요 i Sarah

1

, 당신은 VBA가 기능을 추가 사용할 필요가, 당신은 구성된 공식을 고수하지 뛰어나다.

0이 아닌 값이있는 열 H의 첫 번째 셀을 찾고 있으므로 Application.Match을 사용하여 쉽게 찾을 수 있지만 일치 항목의 세 번째 매개 변수를 -1 (더 큼을 의미)으로 설정해야합니다 값이 0.01보다 큰 경우 일치). 이 행에 대한 열 X의 값을 찾으려면

은 그래서 지금, 우리는 당신이 사용할 수있는, 행 번호가 Range("AC2").Value = Range("X" & MatchRow + Rng.Item(0).Row).Value

코드는`MATCH를 (사용

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 
+0

끝맺음, 내가 rw =를 넣을 때.Match (0, Range ("H2 : H10")) + 1, 올바른 값을 가진 MsgBox를 제공합니다. rw = .Match (0, Range ("H2 : H10"), -1)를 사용할 때 정확한 값을 얻지 못합니다. 위의 convertFormulaToVBA 코드를 시도해 보니 MsgBox에 "Range에서 찾을 수있는 0이 아닌 값"& Rng.Address가 표시됩니다. – Sarah

+0

게시 한 전체 코드를 복사 했습니까? 값이 0.01보다 큰 열 h에 셀이 있습니까? 그럼 그게 작동 –

+0

나는 0으로 0.01을 대체했지만, 그것은 나를 위해 작동하지 않습니다. 귀하의 코드를 Zerk 's와 결합하여 아래 코드를 얻었습니다. 도와 주셔서 정말로 고맙습니다! – Sarah