2014-01-31 4 views
0

VBA를 통해 데이터 입력 양식을 만들고 있습니다. 나는 이것에 아주 새롭 나가 의미하는 수색 결과를 얻을 수 없습니다 나가 나가하고 싶은 것을의 이름의 불확실한 때.Excel에서 여러 값의 행을 확인하십시오.

어쨌든, 사용자가 실행중인 감사에서 수집 한 데이터를 입력하는 것이므로 "저장"버튼을 클릭하면 텍스트 상자와 콤보 상자의 데이터가 Excel 통합 문서의 새 행에 쓰여집니다. 제 양식에는 나머지 데이터가 오는 각 데이터 입력 (연도, 분기, 일, 구)을 식별하는 네 개의 필드가 있습니다. 중복 된 항목을 방지하기 위해 이미 통합 문서에 동일한 값을 가진 행이 있는지 먼저 확인하는 코드를 얻으려고합니다.


년 - - 스프레드 시트는 다음과 같은 데이터가 들어 QUARTER ---- DAY --- WARD


2013 ---------- 1 --------- 월요일 - ICU
2013 ---------- 2 --------- 월요일 - ICU
2013 ---------- 3 ----- ---- 월요일 - ICU
2013 ---------- 4 --------- 월요일 - ICU
2014 ---------- 1- -------- Monday - ICU

그리고 사용자는 다음 값을 사용하여 새 항목을 입력합니다.

년 - 2014
분기 - 1
일 - 월요일
워드 - ICU 나는 결과를 줄 것이다 몇 가지 코드가 필요

(MSGBOX 말 중복 된 항목 등)

하지만 경우 했다 하나를 입력

년 - 2014
분기 - 2,453,210 일 - 월요일
워드 - ICU

모든 괜찮 그들은

+1

한 가지 방법은 텍스트 상자 값을 기준으로 시트를 '자동 필터링'하는 것입니다.재생 된 행이 있으면 복제본이있는 것입니다. 그래서'자동 필터 (AutoFilter) '를 사용하는 것에 대한 답변이 많이 있습니다. –

답변

0

여기 코드입니다

내가 (바보 같은 질문에 대한 미안!) 당신의 도움을 주셔서 감사합니다 "저장"버튼을 클릭 할 수 있습니다 첫 번째 빈 행 (정확하게 주먹 열이 비어있는 첫 번째 행까지)까지 범위를 반복하며 4 개의 키 필드를 제공하는 4 개의 매개 변수와 비교합니다 ( Function IsDuplicate()).

저장 버튼에서 이것을 호출 할 수 있으며, 결과에 따라 양식을 쓰고 닫거나 작성을 거부하고 MsgBox를 표시하십시오.

Sub Test() 
Dim DTab As Range 

    Set DTab = ActiveSheet.[B3] ' define start of data table 

    If IsDuplicate(DTab, 1, 1, 1, 1) Then  ' your form input here instead of 1,1,1,1 
     MsgBox ("duplicate") 
     ' stay in form 
    Else 
     MsgBox ("unique") 
     ' write record and close form 
    End If 
End Sub 

Private Function IsDuplicate(DRange As Range, P1 As Variant, P2 As Variant, P3 As Variant, P4 As Variant) As Boolean 
Dim Idx As Long 

    IsDuplicate = False 
    Idx = 2       ' 1st row is header 

    Do While DRange(Idx, 1) <> "" ' break at 1st blank row 
     If DRange(Idx, 1) = P1 And _ 
      DRange(Idx, 2) = P2 And _ 
      DRange(Idx, 3) = P3 And _ 
      DRange(Idx, 4) = P4 Then 
      IsDuplicate = True 
      Exit Do 
     End If 
     Idx = Idx + 1 
    Loop 

End Function 

enter image description here

당신은 때때로 당신이 레코드의 수를 반환하는 Idx 대신 단지 True/False을 반환하려면 .... 꽤 자주이 기능이 필요합니다

- 당신이 삽입할지 여부를 결정해야하는 경우/레코드 추가 또는 업데이트.

관련 문제