2013-04-24 3 views
0

일반적인 Excel 파일을 작성하여 사용자가 원하는 것을 보여줍니다. Tool.xlsm이라는 파일에는 두 개의 워크 시트가 있습니다. Sheet1 및 Sheet2. Sheet1은 사용자 입력을 허용 할 몇 개의 필드를 갖도록 설계 될 것입니다. Sheet2는 사용자로부터 숨겨 지지만 다양한 드롭 다운 목록 선택 옵션과 특정 코드가 선택 될 때 Sheet1의 다른 셀에 표시되어야하는 해당 설명을 포함합니다. 또한 Sheet2는 한 열에 수많은 ID #를 포함하고 다음 열에 해당 사용자 이름을 포함합니다. 이 기능의 목적은 사용자가 ID #을 속한 사용자와 신속하게 연결할 수있게하기 위함입니다.vba/excel - 시트 1의 셀에 사용자가 입력 한 내용을 기반으로 sheet2의 값에서 sheet1의 셀 채우기

여기가 내가 지금까지 가지고있는 것입니다. 나는 내가해야 할만큼 효율적으로 그 일을 할 수 있을지 의심 스럽지만, 당신의 모든 전문 지식에 크게 감사드립니다!

Sub Button1_Click() 

'Based on selected value of C1, show corresponding message in J1' 
'Can this be done by simply referencing the code descriptions in sheet2?' 

If Range("C1") = "code 1" Then 
    Range("J1") = "code 1 description" 
End If 

If Range("C1") = "code 2" Then 
    Range("J1") = "code 2 description" 
End If 

'End of code selection' 
End Sub 

Sub Button2_Click() 

'Based on ID# entered into C3, display corresponding name in J1 (Sheet2 contains ID#s with corresponding names)' 
'There has to be an esier way to loop through 1000s of records and display corresponding ID# and Person''s name' 
'Rather than assigning Person 1, to Range J1, I should be able to just reference the cell Sheet2!E3 but that doesn''t seem to work' 

If Range("C3") = "1001" Then 
    Range("J1") = "Person 1" 
End If 

If Range("C3") = "34349090" Then 
    Range("J1") = "Person 83" 
End If 

'End ID# search' 
End Sub 

Sub Button3_Click() 

'Clear unlocked cells' 

End Sub 

my file in dropbox

답변

0

당신은 worksheet_change 이벤트를 사용할 수 있습니다. rngFindCode & rngFindCode1 범위를 적절하게 설정하여 sheet2의 데이터를 참조하십시오.

다음은 코드입니다. 당신의 쿼리에

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error Resume Next 

    Application.EnableEvents = False 

    If Target.Address = "$C$1" And Target.Cells.Count = 1 And Target.Value <> "" Then 

     Dim rngFindCode As Range ' 
     Dim cellCode As Range 

     Set rngFindCode = Sheets("Sheet2").Range("C1:C100") ' Refers to range where code is in sheet 2 
     Set cellCode = rngFindCode.Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) 

     If Not cellCode Is Nothing Then 
      Range("J1").Value = cellCode.Offset(0, 1).Value 
     End If 

    ElseIf Target.Address = "$C$3" And Target.Cells.Count = 1 And Target.Value <> "" Then 

     Dim rngFindCode1 As Range ' 
     Dim cellCode1 As Range 

     Set rngFindCode1 = Sheets("Sheet2").Range("E1:E100") 'Refers to range where name is 
     Set cellCode1 = rngFindCode1.Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) 

     If Not cellCode1 Is Nothing Then 
      Range("J1").Value = cellCode1.Offset(0, 1).Value 
     End If 

    Else 
     Range("J1").Value = "" 
    End If 

    Application.EnableEvents = True 
End Sub 
+0

: 시트 1에

, 셀 C3의 ID를 가정, 수식을 입력 :

는, K 및 열 J의 ID 년대 귀하의 사용자 이름이 열에 있다고 가정 일예로! 나는 그것을 오늘 시도하고 결과를 게시 할 것입니다! – user2292941

+0

제발 내 용서를 용서해주세요,하지만 제 생각에는 그게 효과가없는 것처럼 보입니다. 내 파일 http://db.tt/tfQi0PDK를 확인하고 귀하의 조언에 따라 기능을 수행 할 수 있는지 확인하십시오. 감사! – user2292941

+0

@ user2292941이 링크에서 다운로드 할 수있는 파일에 코드를 추가했습니다. http://sdrv.ms/ZJ4jAh – Santosh

1

:이 단순히 시트 2의 코드 설명을 참조하여

을 할 수 있습니까?

예. 이 경우 VLOOKUP 수식을 사용할 수 있습니다.

마찬가지로, VLOOKUP 수식을 사용하여 ID를 기반으로 이름을 반환 할 수 있습니다. 나는 빠른 응답을 주셔서 감사합니다 =VLOOKUP(C3, Sheet2!$J$K, 2, False)

+0

VLOOKUP 함수를 완전히 잊어 버렸고 구현하려고했을 때 #ref 오류가 발생했습니다. 주위에 조금 놀아 라. 그러면 나는 그것을 이해했다! 귀하의 의견을 보내 주셔서 감사합니다! – user2292941

+0

@David 약간의 구문 오류,'vlookup은'2, FALSE로 끝나야합니다.)' – glh

+1

@glh thx는 그것을 잡기 위해서입니다. –

관련 문제