나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 궁그미 (dock159)

추천:  2
파일:     조회:  1740
제목:   find코드에 대한 몇가지 질문입니다.
     
  "괄호안에 질문에 대한 답변좀 부탁드립니다."

Dim myws1 As Worksheet, myws2 As Worksheet '시트이름을 넣을곳
Dim datarg1 As Long, datarg2 As Long, i As Long '데이타 갯수 파악하여넣을곳,
                                                ' i 는 for 문에서 첨자사용
Dim findchk As Range '입출고 품번 데이타 넣을곳


 Set myws1 = Worksheets("입.출고") 'myws1 은  입.출고 라는 시트명 대입
 Set myws2 = Worksheets("재고현황") 'myws2 은  재고현황 라는 시트명 대입
 
 datarg1 = myws1.Range("b3000").End(xlUp).Row (옆의 문장 끝에서 .end(xlup).row 부분에 대한 설명)
              '입출고 시트에서 b3000 까지의 데이타 건수 파악 대입
 datarg2 = myws2.Range("d3000").End(xlUp).Row 
              '재고현황시트에서 d3000 까지의 데이타 건수 파악 대입

 
    myws2.Range("g8:i3000") = "" ( 옆의 문장 끝에 ""가 왜 지움처리로 해석이 되는지 설명좀...)
        '재고현황시트의 입고 8행부터  집계 3000 까지의 데이타를 지움 처리
    
    
    For i = 11 To datarg1 
              ' i 가 11 부터 1씩 증가하여 입출고의 데이타건수가 될때까지 계속 순환
              ' datarg1 이 20 이다 하면 i = 11 부터
              ' 아래 루틴 처리후 next i 가 나올때까지 처리하고 1증가해서 12가되고
              '이런식으로 datarg1 의 값인 20일때까지 처리하고 끝냄
                           
      Set findchk = myws2.Range("d:d").Find(what:=myws1.Cells(i, 2))
                            findchk 라는 품번 변수명에 재고현황시트의 d열(품번)에서 
                            '입출고시트의 i 행 b열 의 값을 찿아서 대입
                            '못찿으면  findchk 값이 nothing 됨
                                     
        If findchk Is Nothing Then 
                   ' 찿는값이 없으면(findchk = nothing) 아래의 메세지 표시하고
                   ' 작업 끝냄(exit sub)
        
           MsgBox "품번착오//" & myws1.Cells(i, 2) & "재고현황에 맞는 품번이 없읍니다", 0 + 48, myws1.Cells(i, 2) & "없음"
           Exit Sub
           
           
        Else '찿는값이 있으면
        
           Application.StatusBar = "자료정리중..." & (i - 11) / datarg1 * 100 & "% 진행중"
         ' 좌측 하단에 처리진행률 표시(i에서 10을 빼주고 실데이터는 i 가 11일때 한개임
          
             If myws1.Cells(i, 2).Offset(0, 4) = "입고" Then

                 '입출고 시트의 i행 b열의 번지에서 우측으로 4번째의 값이 "입고"이면
             myws2.Cells(findchk.Row, "g") = myws2.Cells(findchk.Row, "g") + _
                                            myws1.Cells(i, 2).Offset(0, 1)

           '재고현황시트에서  (찿은품번값(findchk)의 행번호(row), g열(입고)의 값에
           '다 입출고 시트의 (i,2)에서 우측으로 한칸이동한 c열(수량)의 값을 더해서  
           '자신의 값에 넣어라(입고 = 입고원래의 값 + 입출고시트.수량)
             Else
            아니면(else) 출고란에 출고=출고원래값+입출고.수량
                myws2.Cells(findchk.Row, "h") = myws2.Cells(findchk.Row, "h") + myws1.Cells(i, 2).Offset(0, 1)
           
             End If
           
           '재고 = 기초(f)+ 입고(g) - 출고(h)
           myws2.Cells(findchk.Row, "i") = myws2.Cells(findchk.Row, "f") + _
                            myws2.Cells(findchk.Row, "g") - _
                            myws2.Cells(findchk.Row, "h")
          ' for 의 i 와 cells(findchk.row, "i") 의 i 는 전혀 다름니다.
         ' cell 의 i 는 열 번호 범위지정이고 ,for의 i 는 순환하기 위한 첨자입니다.
        End If
        
        
    Next i
    
    Application.StatusBar = False
    MsgBox datarg1 - 10 & "건 자료 수불 완료", , "자료수불 완료"
    '실제 데이터 갯수 = i - 10
    
    With Worksheets("재고현황") ' 재고현황으로 와서
        .Activate 
        .Range("a8").Select
    End With


End Sub


 
[불량 게시물 신고]  
황기성안녕하세요? 궁그미 님!

...엑셀을 잘 사용하시면 VBA는 별로 어렵지 않답니다.

 datarg1 = myws1.Range("b3000").End(xlUp).Row (옆의 문장 끝에서 .end(xlup).row 부분에 대한 설명)
B3000셀을 선택하시고 Ctrl 키를 누른 상태에서 위쪽 화살표를 눌러 보세요.

    myws2.Range("g8:i3000") = "" ( 옆의 문장 끝에 ""가 왜 지움처리로 해석이 되는지 설명좀...)
""는 문자열 길이가 없는 공백이므로...


그럼..행 운이 있으시길...!
07-15 (12:37)
삭제 ■신고
        
  

작성일 : 2003-07-15(12:21)
최종수정일 : 2003-07-15(12:21)