VB(A)

자동 빼기

당근쨈 2015. 4. 19. 09:00

위에는 표가 있고

밑에서 주황색에 반을 입력하고 노란색에 숫자를 입력하면

해당 반을 찾아서 노란색 숫자만큼 값을 빼주는 매크로


매크로 자체는 어렵지는 않지만

에러처리와 내용의 완성도에 중점을 두었다.


Option Base 1
Option Explicit
Sub fnSum()
 
    Dim strName As String, intClass As Integer
    Dim i As Integer
    Dim strClass As Range, intNum As Range
    Dim fnClass As Range
    Dim rngClass As Range
    
    '변수 정의
    Set strClass = Range("B13"'반명
    Set intNum = strClass.Offset(, 1)   '뺄 숫자
    Set rngClass = Rows(2).SpecialCells(2)  '반 이름이 있는 영역
    
    '노란셀이 숫자가 아니면 매크로 종료
    If Not IsNumeric(intNum) Then Exit Sub
    
    With strClass
    
        '개나리1반에서 숫자를 기준으로 개나리와 1반으로 구분
        For i = 1 To Len(.Value)
            If IsNumeric(Mid(.Value, i, 1)) Then Exit For
        Next i
        
        '반 이름을 잘못 입력하면 매크로 종료
        If i = Len(.Value) + 1 Then Exit Sub
        
        '반 이름 분류
        strName = Left(.Value, i - 1)    '개나리
        intClass = CInt(Replace(Mid(.Value, i), "반"""))    '1반
    End With
        
    '반명이 있을 때 개나리1반을 찾아 노란 숫자만큼 뺌
    If WorksheetFunction.CountIf(rngClass, strName) Then
        Set fnClass = rngClass.Find(what:=strName, lookat:=xlWhole).Offset(intClass)
            
        '반에 데이터가 있을 때만 노란색만큼 뺌
        With fnClass
            If IsEmpty(.Cells) Then Exit Sub
            .Value = .Value - intNum
        End With
    End If
End Sub
cs


자동빼기1.xlsm


'VB(A)' 카테고리의 다른 글

흩어진 글자들을 한줄로 오름차순 정렬  (1) 2015.04.22
표를 달력으로 보내기  (2) 2015.04.20
달력 생성 및 검색 기능  (0) 2015.04.18
소방 21주기 교대근무 근무표  (0) 2015.04.04
근무일수 파악  (0) 2015.04.01