예스폼 엑셀서식
VBA 순번기능 자동입력폼 만들어주세요
수정 분류 기타/일반 등록자 최*숙 등록일 2007-05-03 첨부파일 엑셀 고객관리 - 테스트용-양식
질문
예스폼을 사랑하는 애용자 입니다. 저희 회사는 납골당을 관리하는 업체인데 회원 관리 프로그램을 제작 하지 못해서 자동화엑셀로 만드는 중입니다 몇가지 부족한게 있어서 부탁드립니다. 회원시트에 일일이 기록 하면 다른 시트엔 자동으로 들어가게 했는데 항목이많다보니까 번거러워서 1.자동입력폼을 만들면 좋을것 같아서 요. 2.다른 시트에서 자료를 분류할때 자동필터를 쓰는데요 필터되고나면 순번 이 맞지않고 자료의 갯수를 알수 없어서 필터후에도 순번이 자동으로 채워 지고 자료의 갯수를 확인할수있게 해주세요. 감사합니다.
답변

안녕하세요. 최종숙 회원님
예스폼
Power Excel 서식 담당자입니다.

회원님께서 신청하신 [자사용 납골당 프로그램 VBA정렬 기능)] 은 요청하신 사항을 반영하여 제작되었으며, 파워엑셀 게시판에 등록이 완료되었습니다.

말씀하신 "회원시트에 일일이 기록 하면 다른 시트엔 자동으로 들어가게 했는데 항목이많다보니까 번거러워서 1.자동입력폼을 만들면 좋을것 같아서 요. 2.다른 시트에서 자료를 분류할때 자동필터를 쓰는데요 필터되고나면 순번 이 맞지않고 자료의 갯수를 알수 없어서 필터후에도 순번이 자동으로 채워 지고 자료의 갯수를 확인할수있게 해주세요.." 아래와 같이 반영하였으며, 검토정리사항과 작업사항 및 추가정보를 순차적으로 참고하시기 바랍니다.

파워엑셀 요청서식 검토사항_1차(프로시저)
─────────────────────────────────────────────
1. 첨부하신 파일의 코드 원문입니다 [Art + F11을 누르시면 VBE창이 활성화 됩니다.]

─────────────────────────────────────────────
Option Explicit

Sub Numbering()

Const strID As String = "예은추모공원"

  Dim rngTarget As Range
  Dim rngArea As Range
  Dim rngCell As Range
  Dim i As Integer
  Dim strMsg As String
 
  Set rngTarget = Range("번호")
  strMsg = "작업 대상 영역의 내용을 모두 지웠습니다." & vbCr
  strMsg = strMsg & "이제 순번을 새로 매깁니다."

  rngTarget.ClearContents
  MsgBox strMsg, , strID
 
  For Each rngCell In rngTarget
    With rngCell
     Set rngArea = Range(.Offset(0, 1), .Offset(0, 5))

      If WorksheetFunction.Countf(rngArea) > 0 Then
       i = i + 1
        .Value = i
     End If
    End With
  Next rngCell

  MsgBox "자료의 순서화 작업이 종료됨", , strID

  End Sub
─────────────────────────────────────────────
2. 원문에서 For Each / Next 루프를 시작하여 종료하는 형태적인 요소는 만족하지만, 현재 어떠한
  기준으로 필터링이 이루어 진 경우에는 활성화 된 셀(범위)과 비활성화된 셀(범위)을 확인하여
  동적인 요소를 부여할 수 없습니다. 그렇기 때문에 올바른 순번을 부여 받을 수 없도록 됩니다.

3. 현재 첨부하신 원문에 작성된 코드중에 If WorksheetFunction.Countf(rngArea) > 0 Then 에서
  런타임 오류가 발생되는 것은 잘못된 워크시트 함수명을 사용했기 때문입니다.
 
Countf를 숫자가 작성된 셀의 합계를 구하는 Count로 수정하셔야 하며, 현재 합산영역이 C:C가
  아닌 Range("번호")로 잡혀있기때문에 CountA를 사용하실 수도 있지만 현재 해당하는 항목에
  표기되는 데이터의 형식이 숫자이어야 하므로 Count를 사용하시는 것이 좋습니다.

4. Const strID As String = "예은추모공원" 에서 일반문자 값 대신 Const문을 사용하시는 것은
  빈도수가 많은 경우 더욱 효과적이며, 좋은 예 입니다. 수정문에는 보다 간단하게 정리하였습니다.

5. 수정파일에서 전체보기를 누르신 후, 기존수량 계산 버튼을 클릭하면 순차적인 번호로 생성되지만
  분양담당에서 필터링 하신 후, 클릭하면 올바르게 처리하지 못하는 것을 확인할 수 있습니다.
─────────────────────────────────────────────

수정문에 상단의 오류사항을 수정하였으며, 아래는 관련 작업사항입니다.

파워엑셀 요청서식 작업사항
─────────────────────────────────────────────
1. 제공해드린 파일의 코드 수정문입니다. [Art + F11을 누르시면 VBE창이 활성화 됩니다.]
─────────────────────────────────────────────
Option Explicit

Sub Powerexcel_Numbering()

  Dim i As Integer
  Dim j As Integer
  Dim ctNum As Integer

  ctNum = WorksheetFunction.Count(Range("A:A"))

  Application.ScreenUpdating = False

  For i = 1 To Range("번호").Count
  Application.Goto Reference:="R" & i + 3 & "C3"
  ActiveCell.ClearContents

  Next i

  MsgBox "작업 대상 영역의 내용을 모두 지웠습니다." _
  & Chr(13) & "이제 순번을 새로 매깁니다.", vbInformation, "예은추모공원"

  For j = 4 To ctNum
  Application.Goto Reference:="R" & j & "C3"

    With ActiveCell
      If .RowHeight <> 0 Then
        .Value = WorksheetFunction.Count(Range("C:C")) + 1
      End If
    End With
  Next j

End sub
─────────────────────────────────────────────
1. 범위의 수와 대상의 수, 결과의 수 등을 워크시트 함수를 사용하여 산출한 후, 다양한 방법중에서
  가장 간단하고 쉽게 응용할 수 있는 형태로 작성하였습니다.
2. 활성 및 비활성을 고려한 후, 결과 영역에서 순차적인 부여를 기준으로하여 범위단위의 처리보다
  셀(요소)단위로 처리하는 방식을 사용하였습니다. 비활성에 대한 기준은 Row의 Hidden 상태를
  기준으로 작성할 수도 있습니다.
3. 고유한 셀주소를 기준으로 Application.Goto Reference:="R" & i + 3 & "C3" 와 같이 작성하여
  논리에 대한 부분을 추가한 후, 순환시켜 기준에 대한 연속성을 가질 수 있도록 반영하였습니다.
4. 수정파일에서 전체보기를 누르신 후, 분양담당에서 이순신으로 필터링 하신 후, 새로운 수량 계산
  버튼을 클릭하면 순차적인 번호로 생성되는 것을 확인할 수 있습니다.
─────────────────────────────────────────────


이에 따른 메일을 발송하였습니다.

파워엑셀 요청서식 검토사항_2차
─────────────────────────────────────────────
1. 프로시저의 이름을 중복하여 사용하는 것은 좋지 않습니다.
2. 코드를 작성하실 때에 주석을 달아 놓으시면 동작 부분별, 작업 범주별 등의 확인 및 수정을 보다
  빠르고 정확하게 할 수 있습니다.
─────────────────────────────────────────────


파워엑셀 요청서식 추가정보
─────────────────────────────────────────────
1. 자사용 프로그램을 제작하시는 경우, 일단 각 각의 시트와 구성요소를 파악하는 것이 중요합니다.
  전반적인 설계가 끝나면 작성, 입력, 각종 기능들의 타입과 함께 각 각의 요소와 연동되는 부분을
  고려하여 운용사항에 맞게 하나씩 정리하는 것이 필요합니다.
2. 함수 및 VBA를 사용하기 이전에 문서의 표준화를 검토하시는 것을 권하여 드립니다. 외향적인
  부분 뿐만이 아니라 내적인 연결, 집계 등의 기초작업에 표준화는 매우 중요합니다.
3. 특정한 관리기준이나 해당 구성을 만족하는 방식으로 모든 작업이 이루어지지 않는 경우,
  셀을 병합하는 것은 좋지 않습니다. 고급필터, 정렬, 배열수식 등을 사용하기 비효율적이며,
  열방향 병합보다 행방향 병합은 어느 부분에서 올바르지 못한 동작을 수행하는지 파악하기가
  어려운 경우가 있으므로 참고하시기 바랍니다.
4. Userform이나 Inputbox를 이용하여 자료를 입력하는 방식은 표준화를 완료하시고 항목정리가
  완료된 후, 진행하시는 것이 좋습니다. 
─────────────────────────────────────────────

추가로 원하시는 사항이나 서식관련 사항들은 아래 연락처로 문의하여 주시면 성심껏 답변해드리겠습니다. 감사합니다.



※ 관련 이미지

랭키 서식/양식 1위 6년 연속(2013~2018)
보안사이트 인증
콘텐츠 제공 서비스 우수 품질인증
저작권OK 인증 한국저작권보호원
서식제공 파트너
네이버
한글과컴퓨터
마이크로소프트