본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #35 [ 물품계산하기 ]

by 일등미노왕국 2023. 3. 5.

 

더보기

 

Option Explicit
Sub 기초방35()

    Dim rngAll As Range: Set rngAll = [d7:d19]                              '= 표1 영역
    Dim rnga As Range
    Dim rngT As Range: Set rngT = [f7:f16]                                  '= 표2 영역
    Dim rngB As Range
    Dim Vtemp, V(9)
    Dim i&, j&, num&, sumN&, cnt&
    Dim str$
    
    Haja_format                                                             '= 초기화
    rngT.Resize(rngT.Rows.Count, 2).Copy [i7]                               '= 결과 열에 표2 복사
    
    For Each rnga In rngAll                                                 '= 표1 순환
    
        Vtemp = Split(rnga, ",")                                            '= 콤마로 분리 후 임시배열에 담음
      
        For i = LBound(Vtemp) To UBound(Vtemp)                              '= 임시 배열 순환
        
            For Each rngB In rngT
            
                If InStr(rnga, rngB) > 0 Then
                    If InStr(Vtemp(i), rngB) = 0 Then
                        V(cnt) = Vtemp(i)
                    End If
                End If
            
            Next rngB
        
            sumN = CLng(Replace(Split(Trim(Vtemp(i)), " ")(1), "개", ""))   '= 분리된 것 중 숫자만 분리
            
            num = Application.Match(Split(Trim(Vtemp(i)), " ")(0), rngT, 0) '= 표2와 비교하여 해당 물품의 위치를 파악
            
            Cells(num + 6, "l") = Cells(num + 6, "l") + sumN                '= [합계] 표의 수량 부분에 각 물품의 수량을 누적
            
            Cells(num + 6, "n") = Cells(num + 6, "j") * Cells(num + 6, "l") '= 물품의 수량과 누적해가는 수량의 곱을 구함
            
            Haja_Delay Cells(num + 6, "N"), rnga                            '= 딜레이효과를 주는 코드
            
            Vtemp(i) = num & "_ " & Trim(Vtemp(i))
        
        Next i
    
    Next rnga
    MsgBox "완료하였습니다."
End Sub

Function Haja_format()

    [q7:q19].Copy [d7]
    [i7:j16].ClearContents
    [l7:l16].ClearContents

End Function

Function Haja_Delay(rngX As Range, rnga As Range)

    Dim i&
   
    For i = 1 To 50
    
        rngX(1, -4).Resize(1, 6).Font.Bold = True
    
        rnga.Interior.ColorIndex = 6
    
    Next i

        rngX(1, -4).Resize(1, 6).Font.Bold = False
        rnga.Interior.ColorIndex = xlNone
End Function

기초방35-1.xlsm
0.02MB

 

댓글