2016-11-15 1 views
0

저는 VBA에 매우 익숙하며 도움을받을 수 있습니다. 나는 수동으로 셀에 입력하는 대신 vlookup을 수행하는 매크로를 만들려고합니다.Vlookup 매크로 2 워크 시트

내 Excel 파일에는 'Microsoft'라는 워크 시트와 'SN 사용자 이름'이라는 두 개의 워크 시트가 있습니다.

그래서 나는 = VLOOKUP (시트 '마이크로 소프트 (B21) 여기

은 VBA에서 수행하려고 VLOOKUP 메신저 인에 B21를 반환하는 조회의 결과'SN 사용자 이름 '에서 데이터를 찾고 있어요 , 'SN 사용자 이름'! A : B, 2, FALSE)

감사의 말을 전합니다. 감사합니다.

+1

사이트를 제대로 검색 했습니까? 나는이 질문을 여러 번 보았다. 도움을 받으려면 다음 링크를 참조하십시오. [http://stackoverflow.com/questions/40512439/how-to-get-vlookup-to-select-down-to-the-lowest-row-in-vba/40512623# 40512623] :) – user1

+0

정확하게 이해하면 vlookup의 결과를 B21에 넣고 싶지만 B21을 매개 변수로 전달하면 순환 참조가 발생합니다. 오류 또는 예기치 않은 동작에 대한 세부 정보를 게시하면 도움이됩니다. – jsheeran

+0

@Shah Miah 'Application.VLookup'으로 VLOOKUP의 VBA 버전을 사용할 수 있습니다. 필요에 맞는 솔루션 유형에 달려 있습니다. 아래 내 대답을 확인하고 그것이 당신을 위해 작동하는지 알려 주시기 바랍니다 –

답변

0

VBA 버전 기능 Application.VLookup을 사용할 수 있습니다.

아래의 코드 코드는 시트 "Microsoft"의 셀 B21 값이 시트 "SN 사용자 이름"의 열 A : B에 있는지 확인합니다. 발견되면 셀 A21에 두 번째 열을 반환합니다 (필요에 따라 수정할 수 있음). 그렇지 않으면 참조 용으로 "Item Not Found"라는 텍스트 메시지를 A21 셀에 넣습니다.

Option Explicit 

Sub VLookup_withErrHandling() 

Dim Cell    As Range 
Dim Rng     As Range 
Dim lRow    As Range 

Set Cell = Sheets("Microsoft").Range("B21") 
Set Rng = Sheets("SN Username").Range("A:B") 

If Not IsError(Application.VLookup(Cell, Rng, 2, False)) Then 
    Cell.Offset(0, -1).Value = Application.VLookup(Cell, Rng, 2, False) 
Else 
    Cell.Offset(0, -1).Value = "Item Not Found" 
End If 

End Sub 

For 루프 추가 :

Dim lRow    As Long 

' just for example, loop from row 21 until row 30 
For lRow = 21 To 30 
    Set Cell = Sheets("Microsoft").Range("B" & lRow) 

    If Not IsError(Application.VLookup(Cell, Rng, 2, False)) Then 
     Cell.Offset(0, -1).Value = Application.VLookup(Cell, Rng, 2, False) 
    Else 
     Cell.Offset(0, -1).Value = "Item Not Found" 
    End If 

Next lRow 

편집 1 : 당신이 당신의 "마이크로 소프트"시트에서 많은 행을 반복 할 경우에, 당신은 아래의 코드 조각을 추가 할 수 있습니다 : 아래 수정 된 메모에 따라

Option Explicit 

Sub VLookup_withErrHandling() 

Dim Cell    As Range 
Dim Rng     As Range 
Dim LastRow    As Long 
Dim lRow    As Long 

With Sheets("SN Username") 
    ' find last row with username in column A 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

    Set Rng = Sheets("SN Username").Range("A2:B" & LastRow) 
End With 

' loop through row 2 until row 20 
For lRow = 2 To 20 
    Set Cell = Sheets("Microsoft").Range("A" & lRow) 

    If Not IsError(Application.VLookup(Cell.Value, Rng, 2, False)) Then 
     Cell.Offset(0, 1).Value = Application.VLookup(Cell.Value, Rng, 2, False) 
    Else 
     Cell.Offset(0, 1).Value = "UserName Not Found in SN UserNames sheet" 
    End If 

Next lRow 

End Sub 
+0

안녕 샤이, 귀하의 회신에 많은 감사드립니다! 나는 이것에 처음이에요. 제발 날 베어주세요. 내가 이전에 해본 적이 없을 것 같은데 다시 설명해 보도록하겠습니다. –

+0

좋아, 게시물을 수정 하시겠습니까? –

+0

안녕하세요, 귀하의 회신에 많은 감사드립니다! 나는 이것에 처음이에요. 제발 날 베어주세요. 나 시트 '마이크로 소프트'이 다시 (사과를) 설명 해보자 '는 열 A'에서 사용자 이름의 목록이 있습니다 (사용자 이름은 A2에서 시작 A20 완료) 시트 'SN 사용자 이름을'동일한 사용자 이름 목록에있다 A 열 (사용자 이름은 A2에서 시작하여 A20을 시작)과 '전체 이름'목록을 '열 B'로 시작합니다 (전체 이름은 B2에서 시작하여 B20을 시작합니다). 그래서 내가하려는 것은 사용자 이름과 '열 B'에있는 'Microsoft'워크 시트의 '정식 이름'값을 반환하십시오. –

관련 문제