VBA를 사용하여 Excel에서 일치 기능을 사용하려고합니다. 불일치 오류가 발생합니다.
Sub pipe_size()
Dim x As Single
Dim y As Single
Dim NPS As Single
Dim Sch As String
Dim z As Single
NPS = Worksheets("Sheet2").Range("R35").Value
Sch = Worksheets("Sheet2").Range("R36").Value
'x is column number, y is row number
x = Application.Match(NPS, Worksheets("Sheet2").Range("Q5:Q33"), 0)
'y = Application.Match(Sch, Worksheets("Sheet2").Range("R3:AD3"), 0)
Worksheets("Sheet2").Range("Y34").Value = Sch
Worksheets("Sheet2").Range("Y35").Value = x
'Worksheets("Sheet2").Range("Y36").Value = y
End Sub
NPS
숫자 일 뿐이지 만 Sch
숫자 또는 텍스트 일 수 있습니다. 현재 마지막 세 줄은 Excel이 올바른 값을 선택하는지 테스트하려는 것입니다.
Sch
텍스트와 숫자를 올바르게 선택하지만 줄은
y = Application.Match(Sch, Worksheets("Sheet2").Range("R3:AD3"), 0)
유형 불일치를 제공합니다.
문제는 if Sch
가 숫자이고 다음을 사용하여 문자열로 캐스트한다는 것입니다.
Dim Sch As String
Sch = Worksheets("Sheet2").Range("R36").Value
다음은 문자열과 일치하려고 Sch
으로 Range("R3:AD3")
더 문자열이 없기 때문에이 오류가 발생 Sch
범위 만 숫자 내에서가 Sch
.
또한 당신은 차이가 있음을주의해야 Application.Match
하고 Application.WorksheetFunction.Match
. 첫 번째는 VBA 함수이고 두 번째는 워크 시트 =MATCH()
에서 사용 하는 워크 시트 함수와 동일합니다 .
그들은 다르게 동작합니다.
v = Application.Match(7, Array(1, 2, 3), 0)
여기서 오류 2042가 변수에 할당됩니다 v
. VBA에서 오류를 포착 할 수 없습니다.
하지만 이것은
v = WorksheetFunction.Match(7, Array(1, 2, 3), 0)
VBA에서 잡을 수있는 런타임 오류 1004가 발생합니다.
On Error Resume Next
v = WorksheetFunction.Match(7, Array(1, 2, 3), 0)
Debug.Print Err.Number
On Error GoTo 0
따라서 다음을 제안합니다.
NPS
및 Sch
변형WorksheetFunction
그래서 우리는 이것으로 끝납니다 ...
Sub pipe_size()
Dim x As Variant, y As Variant
Dim NPS As Variant, Sch As Variant
NPS = Worksheets("Sheet2").Range("R35").Value
Sch = Worksheets("Sheet2").Range("R36").Value
'x is column number, y is row number
On Error GoTo errorMatchX
x = Application.WorksheetFunction.Match(NPS, Worksheets("Sheet2").Range("Q5:Q33"), 0)
On Error GoTo errorMatchY
y = Application.WorksheetFunction.Match(Sch, Worksheets("Sheet2").Range("R3:AD3"), 0)
On Error GoTo 0
Worksheets("Sheet2").Range("Y34").Value = Sch
Worksheets("Sheet2").Range("Y35").Value = x
Worksheets("Sheet2").Range("Y36").Value = y
Exit Sub
errorMatchX:
If Err.Number = 1004 Then
MsgBox "x did not match."
Else
MsgBox "Error: " & Err.Number & ": " & Err.Description, vbCritical, Err.Source, Err.HelpFile, Err.HelpContext
End If
Exit Sub
errorMatchY:
If Err.Number = 1004 Then
MsgBox "y did not match."
Else
MsgBox "Error: " & Err.Number & ": " & Err.Description, vbCritical, Err.Source, Err.HelpFile, Err.HelpContext
End If
End Sub
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다