엑셀

제조에서 꼭 필요한 엑셀 소요량 계산기 만들기

컴퓨터쟁이 2025. 1. 19. 01:56
반응형

엑셀로 제품bom별 소요량을 넣어서 자동 계산하는 기능을 만들었습니다. 

그냥 제가 쓰려고 만든 것이라 다른 분들도 도움이 되면 좋을 듯 하여 공유 드립니다. 

상업적으로 사용하시면 신고 예정입니다.

정말 필요하신 분들이 사용하시면 좋을 것 같아서 공유 함을 다시 한번 강조합니다.

 

궁금한 점이 있다면 카톡으로 문의 주시면 시간이 되면 알려드릴게요. 

 

 

엑셀 알려드려요

 

open.kakao.com

 


엑셀 UserForm으로 다단계 BOM 계산 프로그램 만들기

  • 목적:
    • 제품을 조회하고, 선택한 제품의 수량을 입력하면 공정별 소요량을 계산하여 표시.
    • 데이터를 Sheet "BOM"에 입력하고 결과를 Sheet "Result"에 출력.

 


단계별 가이드

1. 데이터 준비

Sheet "BOM"

  • 역할: 제품과 공정, 소요량 비율을 정의.

BOM 계산 프로그램


2. UserForm 디자인

UserForm 구성 요소

  1. 텍스트박스:
    • txtProductName (제품 이름 입력/선택)
    • txtQuantity (수량 입력)
  2. ListBox:
    • lstProducts (제품 목록 표시)
  3. 버튼:
    • btnLoadProducts (제품 목록 조회)
    • btnSelectProduct (제품 선택 및 입력)
    • btnCalculate (소요량 계산 실행)
    • btnClose (UserForm 닫기)

UserForm 디자인 예시

  • 레이블:
    • 제품 이름, 수량 입력 안내.
  • 텍스트박스:
    • 제품 이름과 수량 입력용.
  • ListBox:
    • 제품 목록 조회용.
  • 버튼:
    • "제품 조회", "선택", "start(계산 실행)", "end(닫기)".

제조에서 꼭 필요한 엑셀 소요량 계산기 만들기

 

3. VBA 코드 작성

3.1. UserForm 초기화

UserForm이 열릴 때 제품 목록을 자동으로 로드합니다.

Private Sub UserForm_Initialize()
    Call btnLoadProducts_Click
End Sub

 

3.2. 제품 목록 조회

Sheet "BOM"에서 제품 목록을 ListBox에 표시합니다.

Private Sub btnLoadProducts_Click()
    Dim wsBOM As Worksheet
    Dim lastRow As Long
    Dim i As Long


    Set wsBOM = ThisWorkbook.Sheets("BOM")
    Me.lstProducts.Clear

    lastRow = wsBOM.Cells(wsBOM.Rows.Count, 1).End(xlUp).Row
   
    For i = 2 To lastRow
        If wsBOM.Cells(i, 1).Value <> "" Then
            Me.lstProducts.AddItem wsBOM.Cells(i, 1).Value
        End If
    Next i
End Sub

 

 

3.3. 제품 선택

ListBox에서 선택한 제품 이름을 txtProductName에, 기본 수량을 txtQuantity에 입력합니다.

Private Sub btnSelectProduct_Click()
    If Me.lstProducts.ListIndex = -1 Then
        MsgBox "제품을 선택하세요.", vbExclamation
        Exit Sub
    End If

    Me.txtProductName.Value = Me.lstProducts.Value
    Me.txtQuantity.Value = 1 ' 기본값
End Sub

 

3.4. BOM 소요량 계산

입력된 제품과 수량을 기반으로 다단계 BOM을 계산하고 결과를 Sheet "Result"에 출력합니다.

Private Sub btnCalculate_Click()
    Dim wsBOM As Worksheet, wsResult As Worksheet
    Dim productName As String
    Dim inputQuantity As Double
    Dim lastRowBOM As Long
    Dim resultRow As Long

    Set wsBOM = ThisWorkbook.Sheets("BOM")
    Set wsResult = ThisWorkbook.Sheets("Result")

    productName = Me.txtProductName.Value
    If IsNumeric(Me.txtQuantity.Value) Then
        inputQuantity = CDbl(Me.txtQuantity.Value)
    Else
        MsgBox "수량은 숫자만 입력하세요.", vbExclamation
        Exit Sub
    End If

    If productName = "" Or inputQuantity <= 0 Then
        MsgBox "제품 이름과 유효한 수량을 입력하세요.", vbExclamation
        Exit Sub
    End If

    wsResult.Cells(4, 1).Resize(wsResult.Rows.Count - 3, 2).ClearContents
    wsResult.Cells(4, 1).Value = "공정"
    wsResult.Cells(4, 2).Value = "필요 수량"
    resultRow = 5

    lastRowBOM = wsBOM.Cells(wsBOM.Rows.Count, 1).End(xlUp).Row

    Call CalculateBOMRecursive(wsBOM, productName, inputQuantity, lastRowBOM, wsResult, resultRow)
   
    MsgBox "소요량 계산이 완료되었습니다.", vbInformation
End Sub

 

 

3.5. 재귀 함수

하위 공정을 재귀적으로 계산합니다.

 

Private Sub CalculateBOMRecursive(wsBOM As Worksheet, currentProduct As String, requiredQuantity As Double, lastRowBOM As Long, wsResult As Worksheet, ByRef resultRow As Long)
    Dim i As Long
    Dim subProduct As String
    Dim unitQuantity As Double
    Dim subQuantity As Double

    For i = 2 To lastRowBOM
        If wsBOM.Cells(i, 1).Value = currentProduct Then
            subProduct = wsBOM.Cells(i, 2).Value
            unitQuantity = wsBOM.Cells(i, 3).Value
            subQuantity = requiredQuantity * unitQuantity

            wsResult.Cells(resultRow, 1).Value = subProduct
            wsResult.Cells(resultRow, 2).Value = subQuantity
            resultRow = resultRow + 1

            Call CalculateBOMRecursive(wsBOM, subProduct, subQuantity, lastRowBOM, wsResult, resultRow)
        End If
    Next i
End Sub

 

3.6. UserForm 닫기

Private Sub btnClose_Click()
    Unload Me
End Sub

 

 

4. UserForm 실행 매크로

UserForm을 실행하는 매크로를 작성합니다.

Sub ShowBOMForm()
    BOMForm.Show
End Sub

 

실행 절차

  1. Sheet "BOM"에 데이터를 입력합니다.
  2. Alt + F8 → ShowBOMForm 실행.
  3. UserForm에서:
    • "조회" 버튼 클릭 → 제품 목록 로드.
    • 제품 선택 → "선택" 버튼 클릭.
    • 수량 입력 → "계산 실행" 버튼 클릭.
  4. 결과는 Sheet "Result"에 표시됩니다.

결과 예시

입력

  • 제품 이름: 제품A
  • 수량: 1

출력 (Sheet "Result")

BOM 계산 프로그램

 

 

배포 시 주의점

  1. 매크로 활성화:
    • 파일을 .xlsm 형식으로 저장.
    • 매크로 실행이 가능한 환경에서만 사용 가능.
  2. 데이터 확장:
    • 새로운 제품이나 공정을 추가할 경우 BOM 데이터를 업데이트.

 


출력 (Sheet "Result") 에서 계속 버튼을 클릭 시에 팝업창이 뜨면서 

위그림과 같은 팝업창이 나타나며, 제품조회 버튼 옆에 제품을 입력하면 제품을 찾아줍니다. 
아래 제품을 클릭하고 선택을 하면 위에 제품명이 자동으로 들어갑니다. 

start를 누르면 결과값이 아래사진과 같이 나타 납니다. 

 

BOM 계산 프로그램BOM 계산 프로그램BOM 계산 프로그램BOM 계산 프로그램제조에서 꼭 필요한 엑셀 소요량 계산기 만들기

 

소요량 계산기 2501018.xlsm
0.03MB

 

 

 

 

반응형