VB(A) 197

소방 21주기 교대근무 근무표

엑셀 대한 문화충격을 안겨줬던 초과근무 서식. 그때 받은 충격을 아직 간직하다가 내 손으로 만들어보았다. 달력을 만드는 것에 중점을 뒀고 역시 어려운 부분은 공휴일 지정 부분이었다. 연도나 월을 수정하면 달력이 바뀌며 그에 맞춰서 근무도 변한다. 음력 공휴일까지 적용하는 것에는 성공했지만 설과 추석의 경우 대체공휴일을 지정하는 것에는 일단 보류. 어린이날의 대체공휴일 적용하는 것에 일단 만족. 내근 끌려가기 전 마지막 프로젝트. 나름 거대한 프로젝트. Option Explicit Sub worK119() Dim wsData As Worksheet Dim InputYear As Integer, InputMonth As Integer, Days As Integer '연,월,일 Dim i As Integer,..

VB(A) 2015.04.04

근무일수 파악

첫 근무일, 마지막 근무일과 연속된 근무일은 ~ 로 묶어주는 매크로 ~ 로 묶어주는 건 짜둔 게 있어 그걸로 썼다. Sub fnWork() Dim rngArea As Range Dim rngC As Range Dim i As Integer, j As Integer, k As Integer Dim arrNum() As Integer, ValArr() As Integer Dim strText() As String Dim cntR As Integer '작업속도 향상 With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With '기존자료 삭제 Range("C4", Cells(Rows..

VB(A) 2015.04.01

감독자 일자 파악

일자별로 감독자 현황이 나와있고 각 일자별로 감독자가 두명이 있는 테이블이다. 1. 테이블을 순환하며 감독자 이름을 비교 2. 감독자별 날짜를 찾아서 배열에 넣음 3. 날짜를 비교하여 빠른 날짜가 앞에 오도록 배열 재지정 Function fnDay(rngArea As Range, rngC As String) As String Dim rngCell As Range Dim arrDay() As Date, arr() As String Dim Temp As Date Dim i As Integer, j As Integer '감독일자 순환하며 작업 For Each rngCell In rngArea If rngCell = rngC Then ReDim Preserve arrDay(i) With rngCell '감독자가..

VB(A) 2015.03.31

폴더 선택 후 셀 크기에 맞게 이미지 불러오기

지식인에 올라온 질문. 폴더를 선택하면 폴더 안에 있는 JPG 파일을 모두 불러오되 셀의 크기에 맞게 불러오는 코드를 질문하였다. 1. 폴더를 선택한다. 2. 폴더 내에 있는 이미지 파일을 불러온다. 3. 셀 크기에 맞게 A,B열에 이미지를 삽입한다. Sub getPicture() Dim imgPos As Range Dim strPath As String, fileName As String Dim cR As Integer, cC As Integer '작업속도 상승 With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual '엑셀파일의 위치와 동일한 경로설정 및 폴더 선택 ChDir This..

VB(A) 2015.03.28

거래처번호 기준으로 셀병합 후 부분합

지식인에 올라온 질문. 거래처번호를 기준으로 셀병합을 하고 거래처별 부분합을 넣고 싶다는 글. 부분합을 입력하기 위한 셀삽입을 위해 표 밑에서 위로 올라가며 for 구문을 이용한 것 말고는 특별한 것이 없는 매크로 Option Explicit Sub Macro() Dim i As Integer, j As Integer Dim cntR As Integer, cntC As Integer Dim rngData As Range Dim sumGold As Long Dim k As Integer '처리속도 향상 With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With '기존자료 삭제..

VB(A) 2015.03.27

연속된 숫자는 ~로 표현하기

한 셀에 1,2,3,6,7,9 라는 숫자가 있으면1~3,6~7,9 로 표현하는 매크로다.버튼식 매크로와 사용자정의함수로 만들었다.버튼식을 만들면 함수는 버튼식에서 변경만 하면 되니까.동일한 수식이 여러개 들어가고 배열을 막 붙였다. 더 깔끔한 코드가 있을 것 같은데...다음은 작업 일지. 1. 셀의 숫자를 콤마 기준으로 나눈다.2. 연속된 숫자인지 판단하여 ~로 묶어줌 Sub Macro() Dim rngData As Range, rngcell As Range Dim arrNum As Variant Dim i As Integer, j As Integer, k As Integer Dim ValArr() As Integer Dim strText() As String '숫자영역 설정 및 기존자료 삭제 Set r..

VB(A) 2015.03.26

자동필터 - 거래명세표 작성

시트1에는 데이터가 있고 시트2에는 거래명세서 서식이 있다. 거래명세서에서 거래처셀에 거래처를 입력하면 시트1의 거래처와 일치하는 데이터를 불러온다. 1. 병합셀을 풀어 작업이 용이하도록 한다. 2. 거래처 값을 기준으로 자동필터를 실행하여 해당값을 불러온다. 3. 거래처 데이터를 불러온 후 다시 셀을 병합한다. 4. 거래처와 일치하는 값이 없을 땐 on error on resume 과 err.number 구문을 이용하여 에러처리를 하였다. 5. 코드 작성 후 Private Sub Worksheet_Change(ByVal Target As Range) 를 이용하여 코드를 연결해주었다. Sub Macro() Dim 표 As Range Dim 시트1 As Worksheet, 시트2 As Worksheet D..

VB(A) 2015.03.21

화학식에서 C 의 원자의 합

화학식이 있고 이 중 C의 원자값만 합계를 내는 사용자정의함수화학식에서 원소만 뽑아내는 것이 포인트. 1. 원소별로 분리를 하고2. C만 포함된 원소를 골라내서3. C의 개수를 각각 더한다. Function findC(Chemical As String) As Integer Dim i As Integer, j As Integer Dim strText As String, strChar As String Dim arrC() As String Dim sumArr As Integer '원소별 분리 For i = 1 To Len(Chemical) strChar = Mid(Chemical, i, 1) '알파벳이 있고 글자가 모이면 원소 분리 If Asc(strChar) >= 65 And Len(strText) The..

VB(A) 2015.03.19

영어문장 섞기

영어로 된 문장이 있고 이것을 섞는 사용자정의 함수이다. 간단하지만 변수가 의외로 많이 필요한 매크로 1. 문장에 있는 ,나 . 와 같은 특수문자를 없애고 배열에 넣는다. 2. 배열에 난수를 추가하여 섞는다. Function jnWord(rngWord As String) As String Dim cntArr As Integer Dim i As Integer, j As Integer Dim arrWord As Variant Dim temp As Variant '문장에 붙은 특수문자 제거 rngWord = Replace(rngWord, ",", "") rngWord = Replace(rngWord, ".", "") '특수문자 제거한 문장을 분리하여 배열에 넣음 arrWord = Split(rngWord, "..

VB(A) 2015.03.18

다른 파일의 차트를 불러와 정렬하기

앞의 파일과 같은데 앞의 것은 이미지파일로 뺐다면 이번 작업은 별도의 시트를 만들어 차트를 가져오는 작업이다. 1. 각 파일의 각 시트를 순환하며 차트 생성 2. 시트에서 차트 생성이 완료되면 붙이고자 하는 시트로 잘라내서 붙이기 3. 5열씩 차트를 정렬 Option ExplicitSub mkChart() Dim openFiles As Variant, openFile As Variant, xlsFile As String Dim wrkSht As Worksheet Dim rngArea As Range, testArea As Range Dim intR As Integer, intC As Integer Dim i As Integer, cntR As Integer Dim chtData As Range Dim o..

VB(A) 2015.03.16