■ Macro Tip
( 출처 : http://www.abyul.com/zbxe/5702 )
**** Macro를 작성하다가 특정 코드에 커서를 놓고 F1을 누르면, 관련 VBA 도움말을 볼 수 있다. ****
1. 다른 함수를 호출할때는 Call을 사용하자.
ex) Call edit_MakeToValue
2. 전역변수로 선언할 때는 Public으로 선언하라.
ex) Public strPath As String
3. 상수 처리는 Const를 사용.
Public Const HomePage As String = "http://www.abyul.com/"
3. 정확하고 완전한 프로그램을 위해서는 Option Explicit로 선언하자.
ex) Option Explicit
4. ERROR처리
On Error GoTo ERROR:
ERROR:
5. 상대 위치(바로 아래셀) 이동 & 맨 마지막셀로 이동
ActiveCell.Offset(1, 0).Range("A1").Select
Application.Goto Sheets("환율표").Range("C" & Sheets("환율표").Range("C65536").End(xlUp).Row + 1)
6. workBook실행시 자동 실행시키기.
ThisWorkbook에 Workbook_Open()함수를 만들고 명령어를 등록한다.
7. 메시지 박스 띄우기
MsgBox "현재 파일은 xls로 저장되어 있지 않아 Text 파일로 생성할 수 없습니다!", vbExclamation, "CoreLogic"
부정 : vbExclamation
알림 : vbInformation
IF MsgBox("데이터를 지우시겠습니까?", vbyesno + vbQuestion + vbDefaultButton2, Es) = vbYes THEN …
IF MsgBox("이미 등록된 코드입니다. 수정하시겠습니까?", vbyesno + vbQuestion, Es) = vbYes THEN…
8. 사용자 입력 폼 띄우기
User_Input = Application.InputBox( _
Prompt:="1 ~ 10 까지의 숫자를 입력하세요.", _
Title:="분기문 예제", Type:=1)
9. Case문
PIN = "123456-1234567"
Select Case Mid(PIN, 8, 1)
Case "1", "3"
MsgBox "남자 입니다.", vbInformation, HomePage
Case "0", 5 To 9, Is < 0
MsgBox "잘못입력했습니다.", vbInformation, HomePage
Case Else
MsgBox "여자거나 일껄?", vbInformation, HomePage
End Select
10. 셀수식보기
수식 넣을 셀 선택하고, Ctrl+F3눌러 이름 정의, "수식보기"라고 이름 넣고,
참조에 "=GET.CELL(6,수식셀주소)" 입력. 수식넣을 셀에 "=수식보기"라고 입력.
11. 문자열 대체시키기
strBookName = Replace(strBook, ".xls", "")
12. 문자열 서식 포멧 지정하기
year = Format(Cells(5, 4), "0000")
12. 절대 참조와 상대 참조
절대참조 : strName = Cells(2,3)
상대참조 : strName = R[2]C[3]
• For문-1. 기본 순환문. 증가 단위를 조정(Step)
k = Range("A65536").End(xlUp).Row
For i = 0 To 2 Step 1
For j = 1 To k Step 2 '2단위로 증가시킴
Next j
Next i
• For문-2. 특정 셀 영역을 순환시키기. For Each X In Total.. Next X
Dim rngCell As Range
Dim rngList As Range
Dim shtSheetAs Worksheet
For Each shtSheet In Sheets
If shtSheet.Name = "Cost" Then shtSheet.Delete
Next shtSheet
Set rngList = [영역이름]
For Each rngCell In rngList
어떤 기능..
Next rngCell
• 엑셀 내부 함수를 Macro에서 사용하는 방법. Application.함수()
• 엑셀의 영역 이름을 Macro에서 사용하기. [영역이름]
rngBasic = Application.VLookup(rngCell, [Source], 5, False)
• 현재 셀이 포함된 연속된 영역의 선택. Selection.CurrentRegion
Set rngCell = Selection.CurrentRegion
numField = Selection.Column - rngCell.Column + 1
• 매크로를 이용하여 단축키를 지정하는 방법
Application.MacroOptions Macro:="Macro1", ShortcutKey:="a"
• VBA창에서 직접실행창으로 변수명등 확인할 때..
Ctrl+G를 누르고, "debug.print 변수명등"을 입력하고 엔터를 치면 바로 아랫줄에 결과가 나온다.
debug.print activecell.currentregion.address
단순하게 ? 변수명이라고 입력해도 된다.
? Selection.Value
• 현재 선택된 셀 영역을 수정하고 싶을때..
' 선택영역을 수정할때.. 첫번째행만 선택할때..
selection.CurrentRegion.resize(1).address
' 선택영역을 수정할때.. 첫번째열만 선택할때..
selection.CurrentRegion.resize(,1).address
' 선택영역을 수정할때.. 첫번째셀만 선택할때..
selection.CurrentRegion.resize(1,1).address
• 현재 선택된 셀 영역을 확장하고 싶을때..
'현재 선택영역을 오른쪽 4번째로 이동시키기
Selection.Offset(0, 4).Select
'현재 선택셀에서 오른쪽 4번째 셀 선택하기
ActiveCell.Offset(0, 3).Range("A1").Select
'현재 선택셀부터 오른쪽 11번째 셀까지 선택하기
Range(Selection, Selection.Offset(0, 11)).Select
'현재 선택셀부터 오른쪽 끝셀까지 선택하기
Range(Selection, Selection.End(xlToRight)).Select
'왼쪽 시작셀만 선택하기
Selection.End(xlToLeft).Select
'맨 아래에서 마지막행 추적해서 선택하기
Range("A65536").Select
Selection.End(xlUp).Select
• 이름 정의로 동적 영역 설정하기
=OFFSET(DB!$B$3,0,0,1,COUNTA(DB!$3:$3))
=INDIRECT("업체DB!G2:I"&COUNTA(DB$G$2:$G$65536)+1)
• 사용언어 유추하기
'자동고침 옵션의 설정 언어를 참조한다.
? Application.SpellingOptions.DictLang
4105 : 영어(캐나다)
3081 : 영어(오스트레일리아)
2057 : 영어(영국)
1042 : 한국어
1033 : 영어(미국)
--------------------------------------------------------------------------------------------------------------------------------------------------------
2010.12.08 내용 추가.
VBA에서 웍북에 정의된 이름을 사용하려면 아래처럼 사용하면 됩니다.
[CellStyle_abyul].cells.count
하지만 현재 문서가 아닌, 다른 문서의 이름을 참조하려면 아래처럼 접근해야합니다.
workbooks("abyul_RibbonX_Tab.xlam").Names("CellStyle_abyul").RefersToRange.Address
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■ 1) Visual Basic에서의 문자 결합 ■
■ 2) 순환문 ■
■ 3) Sheet Name 가져오기 ■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Sub 시트별로특정셀의값을갖고와총괄표작성하기()
j = 0
For i = 3 To 19
j = 3 - i
ActiveSheet.Next.Activate ' 이전 시트의 경우는 ActiveSheet.Previous.Activate
Sheets("총괄표").Range("B" & i).FormulaR1C1 = "='" + ActiveSheet.Name + "'!R[" & j & "]C[19]"
' 원래 "'!U3"해주면 될 것 같은데.. 자꾸 에러가 나서 상대 참조로 바꿔 버렸다.. =_=;; "'!R[" & j & "]C[19]"
Next
Sheets("총괄표").Activate
End Sub
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■ 1) 변수(상수) 문자열 설정 ■
■ 2) Visual Basic에서의 문자 결합 ■
■ 3) 에러(Error) 처리 ■
■ 4) 메시지 박스 (Message Box) ■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Const basicPath$ = "\dataCFO Group재무팀환율관리"
Const rateFileName$ = "환율관리_2006.xls"
Sub 환율관리열기()
Workbooks.Open Filename:=basicPath + rateFileName
End Sub
Sub 일일환율업데이트()
On Error GoTo a:
ActiveWorkbook.UpdateLink Name:= _
basicPath + rateFileName, Type:= _
xlExcelLinks
If (0) Then
a: MsgBox "일일 환율 데이터 불러오다가 에러 남!! =_+"
End If
End Sub
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■ 1) 상대 위치 이동 ■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
ActiveCell.offset(1, 0).Range("A1").Select
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■ 1) 특정 시트의 특정행의 마지막 입력 포인트로 이동하기 ■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Application.Goto Sheets("환율표").Range("C" & Sheets("환율표").Range("C65536").End(xlUp).Row + 1)
Case문..
출처 : http://blog.empas.com/updata/10656357
Function 성별(주민번호) - 함수이름은 성별, 입력 인수는 주민번호
Select Case Mid(주민번호, 8, 1) - Mid 함수로 입력되는 주민번호의 8번째 자리의 1글자를 추출한다.
Case 1, 3 - 추출된 글자가 1이거나 3이면
성별 = "남자" - 성별함수는 “남자”를 구하고
Case 2, 4 - 추출된 글자가 2이거나 4이면
성별 = "여자" - 성별함수는 “여자”를 구하고
Case Else 추출된 글자가 1, 2, 3, 4가 아니면
성별 = "오류" - 성별함수는 “오류”를 구한다.
End Select
End Function