위에는 표가 있고
밑에서 주황색에 반을 입력하고 노란색에 숫자를 입력하면
해당 반을 찾아서 노란색 숫자만큼 값을 빼주는 매크로
매크로 자체는 어렵지는 않지만
에러처리와 내용의 완성도에 중점을 두었다.
Option Base 1Option ExplicitSub 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 IfEnd Sub cs
'VB(A)' 카테고리의 다른 글
흩어진 글자들을 한줄로 오름차순 정렬 (1) | 2015.04.22 |
---|---|
표를 달력으로 보내기 (2) | 2015.04.20 |
달력 생성 및 검색 기능 (0) | 2015.04.18 |
소방 21주기 교대근무 근무표 (0) | 2015.04.04 |
근무일수 파악 (0) | 2015.04.01 |