반응형
반응형

안녕하세요 :)

이전 글 엑셀 사용법 : VBA-기초(1) 바코드 등록하는 엑셀 만들기-1에서 이어지는 글입니다 :D

 

 

아래는 제가 작성한 코드입니다 ㅎㅎ..

이글을 보는 코딩 고수님들은 뒤로가기를 눌러주세요 ㅜㅜ..

허접하지만 설명하겠습니다 ...

 


■ 코드

Sub 단추1_Click()

    '셀 클릭 잠시 막아 놓음.
    Call Run_Event

End Sub



' 실행 함수
Sub Run_Event()

    Dim dumy

    Dim bacode As String '바코드 변수
    Dim bacoHisNum As Integer '바코드 순번 변수

    
    bacode = getShData("매크로", 7, "C")
    
    
    If bacode <> "" Then
    
        
        bacoHisNum = setBacodeNum() '바코드 이력 순번
        
        
        Call setShData("매크로", 3, 1, bacoHisNum) '삭제
        
        Call setShBacoHis(bacoHisNum, bacode) '바코드 히스토리 입력
    
        Call setDropDownHis(bacode) '하단 바코드 이력
    
    
        Call setShData("매크로", 3, 3, "") '오류 초기화
    
    Else
        
        '이벤트 중지 코드
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    
        Call setShData("매크로", 3, 3, "바코드란 값 없음") '오류
    
    
        '이벤트 실행 코드
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        
    
    End If


End Sub


'******************************사용자 정의함수 Start *******************************

'바코드 시트에 순번 입력 및 가져오기
Function setBacodeNum()
    Dim Num
    
    'Num = getShData("바코드 이력", 1, 1)
    'Num = Num + 1
    
    'Worksheets("바코드 이력").Cells(1, 1) = Num
    
    
    
    Num = getShData("매크로", 3, 1)
    Num = Num + 1
    
    Worksheets("매크로").Cells(3, 1) = Num
    
    setBacodeNum = Num
End Function


'바코드 이력 남기기
Function setShBacoHis(shNum, bacode)

    Dim shNm
    
    shNm = "바코드 이력"


    Call setShData(shNm, shNum, "B", "N") '삭제여부
    Call setShData(shNm, shNum, "C", shNum - 2) '순번
    Call setShData(shNm, shNum, "D", bacode) '바코드
    'Call setShData(shNm, shNum, "E", bacode) '상품명은 vloopup으로 처리
    Call setShData(shNm, shNum, "F", Now) '바코드
    
    'Application.Goto reference:=[A&shNum], Scroll:=True
    
    'Application.Goto reference:=Worksheets("바코드 이력).Range("G10"), Scroll:=True
    
    
        Application.Goto Reference:=Worksheets(shNm).Range("A" & shNum), Scroll:=False
    
End Function


' 하단 바코드 이력 쌓기
Function setDropDownHis(bacode)

    Dim shNm, bcData1, bcData2, bcData3, bcData4, bcData5
    shNm = "매크로"

    bcData1 = bacode
    bcData2 = getShData(shNm, 8, "C")
    bcData3 = getShData(shNm, 9, "C")
    bcData4 = getShData(shNm, 10, "C")
    bcData5 = getShData(shNm, 11, "C")

    Call setShData(shNm, 8, "C", bcData1) '1행
    Call setShData(shNm, 9, "C", bcData2) '2행
    Call setShData(shNm, 10, "C", bcData3) '3행
    Call setShData(shNm, 11, "C", bcData4) '4행
    Call setShData(shNm, 12, "C", bcData5) '5행
    
    
    Call setShData(shNm, 7, "C", "") '바코드 값 초기화

End Function


'******************************사용자 정의함수 End *******************************

'-------------------------공통 함수 Start ---------------------------------------

'시트명, 행, 열 값 가져오기
Function getShData(sheetName, Row, Col)

    Dim shData

    shData = Worksheets(sheetName).Cells(Row, Col).Value
    
    getShData = shData
End Function


'시트명, 행, 열 입력값
Sub setShData(bacoShNm, Row, Col, shData)

    Worksheets(bacoShNm).Cells(Row, Col) = shData

End Sub

 

 

 

 

하나하나 뜯어볼께요 :)

먼저 공통함수 부터 보겠습니다.

 

 

■ 공통함수

'-------------------------공통 함수 Start ---------------------------------------

'시트명, 행, 열 값 가져오기
Function getShData(sheetName, Row, Col)

    Dim shData

    shData = Worksheets(sheetName).Cells(Row, Col).Value
    
    getShData = shData
End Function


'시트명, 행, 열 입력값
Sub setShData(bacoShNm, Row, Col, shData)

    Worksheets(bacoShNm).Cells(Row, Col) = shData

End Sub

 

공통함수를 왜 만드는 이유는 그냥 제가 편하게 사용하기 위해서 만들었습니다 ㅎㅎ

setShData() 함수는 한줄로 구성되어 있지만

getShData() 함수는 세줄로 되어있어서 간단하게 사용하려고 만들었습니다.

그리고 매번 길다란 문구를 입력할 필요도 없어서 이런식으로 만들면 좋아요

 

대강 코드에 대해 설명하면

setShData()는 매개변수 bacdShNm, Row, Col, shData를 받는다고 나와있습니다.

setShData("매크로", 1, 1, "A1 데이터 입력")로 간단하게 매크로시트 1행, 1열에 "A1 데이터 입력" 이라는 값을 넣을 수 있습니다.

 

getShData()는 매개변수 bacdShNm, Row, Col를 받는데요

이는 getShData("매크로", 1, 1)로 간단하게 위에서 set 했던 "A1 데이터 입력" 값을 가져올 수 있습니다.

 

 

■ 단추1_Click()

Sub 단추1_Click()

    '셀 클릭 잠시 막아 놓음.
    Call Run_Event

End Sub

 

단추1_Click() 함수는 확인 버튼을 누를때 실행됩니다.

아래 Call Run_Event 를 호출하는걸 볼 수 있습니다.

함수를 찢어놓는건 재활용하기 좋기 때문입니다. ㅎㅎ

 

 

 

■ Run_Event()

' 실행 함수
Sub Run_Event()

    Dim dumy

    Dim bacode As String '바코드 변수
    Dim bacoHisNum As Integer '바코드 순번 변수

    
    bacode = getShData("매크로", 7, "C")
    
    
    If bacode <> "" Then
    
        
        bacoHisNum = setBacodeNum() '바코드 이력 순번
        
        
        Call setShData("매크로", 3, 1, bacoHisNum) '삭제
        
        Call setShBacoHis(bacoHisNum, bacode) '바코드 히스토리 입력
    
        Call setDropDownHis(bacode) '하단 바코드 이력
    
    
        Call setShData("매크로", 3, 3, "") '오류 초기화
    
    Else
        
        '이벤트 중지 코드
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    
        Call setShData("매크로", 3, 3, "바코드란 값 없음") '오류
    
    
        '이벤트 실행 코드
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        
    
    End If


End Sub

 

 

핵심이 되는 함수죠.

 

매크로 시트의 C7 데이터를 읽어와 바코드 이력 시트에 입력하는 코드입니다.

 

C7의 값이 존재할때 ( 바코드값 <> "")

 

    1. 바코드 이력 순번 + 1

    2. 바코드 이력 순번 A3셀에 입력.

    3. 바코드 이력 시트에 데이터 입력.

    4. 매크로 시트 최근이력 데이터 입력.

    5. 오류 Message 셀 초기화.

 

순으로 되어있습니다.

메인이 되는 함수는 간결하게 작성하는게 유지보수에 좋은것 같아요ㅎㅎ

흐름을 먼저 파악해야 어디서 부터 어떻게 무엇이 잘못되었거나 내가 수정하고 싶은 기능이 어디에 있는지 빠르게  파악하기 쉬운것 같습니다.

 

오늘은 여기까지 하고 다음글에 1~5까지의 함수를 분석해보도록 할께요 :)

 

감사합니다.

반응형
반응형

안녕하세요 :)

오랜만에 글을 올리는것 같습니다.

오늘 설명드릴 엑셀파일은 바코드 등록하는 엑셀파일입니다 :)

아는 지인분께서 바코드를 사용하여 재고조사를 하고 싶은데 엑셀을 다룰지 몰라서 저에게 부탁하셨습니다.

저역시 많이 아는것은 없지만 최대한 도움이 되고자 엑셀을 짜봤는데요.

하지만 결국에는 해당 브랜드에서 제공하는 재고조사 툴을 사용하여 제가 만든 엑셀파일은 켜보지도 못하였네요..

 

기초적인 VBA이가 작성되어 있어 교육적인 문서로 충분하다고 생각하여 공유합니다 :)

 

총 3개의 페이지로 구성되어 있습니다.

1. 매크로 시트

2. 바코드 이력 시트

3. 통계시트

 

1. 매크로시트 부터 확인해보겠습니다 :)

매크로 시트에는 다양한 작업준비코드가 존재합니다.

현순번 : 바코드이력의 행 순번

오류 Message : 오류메세지 출력 셀

자동확인 : 바코드길이에따라 자동으로 확인하는 플래그

바코드길이(1이상) : 입력된 바코드길이 도달시 자동으로 확인기능수행 (자동확인 Y 일경우)

바코드길이(0) : 바코드길이에 상관없이 무조건 확인기능수행

확인버튼 : 바코드셀에 입력된 값을 바코드 이력시트 및 하단 이력에 바코드 입력

입력폼 : 바코드 입력폼창 호출

 

화면에 있는 각각의 기능들을 설명드렸습니다 :)

 

바코드에 숫자입력 후 확인버튼을 누르게 되면 아래에 1~5번까지 이력을 볼 수 있도록 만들었습니다 .

 

 

입력해던 바코드 12345가 아래에 표시된것을 알 수 있습니다.

하지만 아래 5줄은 최신 이력들을 나타낸 것들이고 더 많은 이력들은 바코드 이력 시트에 쌓이게 됩니다.

 

 

 

 

 

바코드 이력 시트에 보면 매크로시트에서 입력한 12345가 입력딘 것을 알 수 있습니다.

 

이런식으로 바코드를 입력하면 바코드 이력시트에 데이터가 쌓여서 쌓인 데이터로 SUMIF, COUNTIF, VLOOKUP 등을 이용해 통계시트에서 활용하려고 했었습니다 :)

 

하지만 셀 입력하는게 제가 생각한 바코드입력기랑 너무 달라서 바로바로 할 수 있는 기능을 추가했습니다.

 

 

 

폼을 이용하여 확인버튼을 누르지 않아도 바로바로 바코드 이력에 데이터가 쌓일 수 있도록 하였습니다 :)

 

첫번째 글에서는 제가 만들었던 엑셀의 구성에 대해 알아보았고

 

다음글에서는 소스를 하나하나 뜯어보는 글로 다시 찾아뵙겠습니다.

 

긴글 읽어주셔서 감사드립니다.

 

 

 

반응형
반응형

지정 범위의 숫자의 갯수를 알려주는 함수 COUNT 함수를 사용해 봅시다.

 

 

COUNT 함수는 숫자가 포함된 셀의 개수를 세고 인수 목록 내에 포함된 숫자의 개수를 셉니다.

COUNT 함수를 사용하면 범위나 숫자 배열에 포함되어 있는 숫자 필드에서 항목의 수를 구할 수 있습니다.

예를 들어 다음과 같은 수식을 입력하면 범위 B1:B10에 있는 숫자의 개수를 구할 수 있습니다.

 

1.COUNT 함수

위 설명대로 COUNT 함수는 숫자의 갯수만 알려줍니다.

인자로 직접 입력할시엔 결과값이 달라집니다.

 

=COUNT( 1, 2, 3, "사과", "배")

의 결과값은 숫자가 3개가 있으므로 3으로 출력이되지만,

 

=COUNT( 1, 2, 3, "4", "5")

의 결과값은 5가 출력이 됩니다.

"4", "5"가 텍스트이지만 텍스트로 표현된 숫자이기 때문에 숫자로 인식하여 카운팅을 해줍니다.

 

이는 인수로 직접 입력했을경우에만 적용이 되고 범위로 지정하게되면 숫자만 카운팅하게 됩니다.

 

텍스트로 표현된 숫자를 입력해보았습니다.

COUNT함수를 사용하니 5, 3만 카운팅하여 결과값 2를 출력하게 됩니다.

 

이를 인수로 입력하게되면

"1", "2", "3" 이 텍스트이지만 숫자로 되어있기 때문에 결과값이 5로 출력이 되었습니다.

인자로 입력할 일은 거의 없기때문에 재미로 알아두시면 좋을것 같습니다

 

반응형

+ Recent posts