728x90
반응형
변수
Dim (변수명/(배열명(크기)) [As 데이터형]
데이터 형
정수 Byte, Integer, Long
실수 Single, Double
문자 String
날짜 Date
논리 Boolean
모든데이터 Variant(Default)
워크북 Workbook
워크시트 WorkSheet
셀 범위 Range
Dim Arr1(10) As Double ; (주의)인덱스의 시작0, 끝10, 원소의 개수 11
ReDim 변수재정의
ReDim yld(2 To 11) 인덱스의 시작 2~ 끝11 (default : 0에서 시작)
연산자
+, -, *, /
\ 정수나누기 11\5 --> 2
Mod 나머지
-(수) 부호바꿈
& 문자열 연결 "AB" & "CD" --> "ABCD"
>,<,>=,<=,<>
= (주의)같다
Like 비슷하다 "VBA" Like "V?A" --> TRUE
(주의) 영문대문자는 영문소문자보다 작다
And,Or,Not,Xor
Eqv 동일값
Imp A가 TRUE, B가 FALSE일때만 False, 나머지 TRUE, (A imply B;A이면 B이다)
If 문
If 조건1 Then
(실행1)
[ElseIf 조건2 Then]
(실행2)
[Else]
(나머지 실행)
End If
Select Case (조건식 / 변수)
Case 조건1
(실행1)
Case 조건2
(실행2)
...
Case Else
(나머지 실행)
End Select
For 문
For (카운터 변수 = 시작값) To (끝 값)
(실행)
Next [카운터 변수]
For each sht In ThisWorkBook.Sheets
(실행)
Next
Do While(조건이 TRUE인 동안)/Until(조건이 TRUE가 될때까지)
(실행)
Loop
Do
~
Loop While/Until (조건)
문자열 함수
StrComp(비교대상1,비교대상2,[비교방식]) ; 문자열 (크기)비교
비교방식 값 방식
vbBinaryCompar 0 이진비교
vbTextCompare 1 Text비교
결과값 설명
-1 비교대상1 < 2
0 1 = 2
1 1 > 2
StrConv(입력문자열, 변환옵션) ; 문자열을 대소문자나 유니코드 등으로 변환
변환옵션 값 설명
vbUpperCase 1 대문자로
vbLowerCase 2 소문자로
vbProperCase 3 첫글자만 대문자로
vbWide 4 1byte 문자를 2byte로
vbNarrow 8 2byte -> 1byte
vbKatakana 16 히라가나->가타가나 (only 일본어버전)
vbHiragana 32 가타가나->히라가나 (only 일본어버전)
vbUnicode 64 ANSI->Unicode
vbFromUnicode 128 Unicode->ANSI
Len(문자열) ; 문자열의 길이를 구함
Format()
플레이스홀더(placeholde ; 포맷을 지시하는 단일문자)
@ 해당위치에 문자가 있으면 표시, 없으면 공백표시
& 해당위치에 문자가 있으면 표시, 없으면 표시 않음
> 모든 문자를 대문자로 표시
< 모든 문자를 소문자로 표시
! 플레이스홀더를 왼쪽에서 오른쪽으로 채움, (default 오른쪽에서 왼쪽)
ex
MsgBox Format("5643300","(@@@)@@@-@@@@") ; ()안의 @@@는 공백으로 채워진다
MsgBox Format("025653300","(@@@)@@@-@@@") ; 맨앞의 @만 공백
MsgBox Format("5643300","(&&&&)&&&-&&&&") ; ()564-3300
MsgBox Format("025653300","(&&&)&&&-&&&&") ; (02)565-3300
MsgBox Format("5653300","!(@@@)@@@-@@@@") ; (565)330-0
InStr([시작위치],string1,string2, 찾는방식) ; 대소문자를 구별하여 어떤 문자를 포함하는지의 여부를 판단하는 함수, 지정된 위치에서 시작(default 첫문자)
(주의)찾는 방식이 지정되면 반드시 시작위치를 지정해 주어야 한다.
조건 결과
Len(string1) --> 0 0
string1=Null Null
Len(string2) --> 0 start
string2=Null Null
not exist string2 0
string2가 string1 내에서 발견 일치된 지점의 위치
start > string2 0
ex
InStr( 1, "Tech on the Net", "the") --> 9
InStr( "Tech on the Net", "the") --> 9
Instr( 10, "Tech on the Net", "t" ) --> 15
Left(문자열, 추출문자수) ; 문자열로부터 왼쪽에서 문자수만큼의 문자를 반환
MsgBox Left( "This is a Test", 2) --> "Th"
Mid(문자열, 시작위치, 추출문자수) ; 문자열 시작위치에서 추출문자수만큼의 문자를 뽑아 반환
MsgBox Mid("This is a Test", 6, 2) --> "is"
Right(문자열, 추출문자수) ; 문자열의 오른쪽에서 추출문자수만큼 문자를 뽑아 반환
MsgBox Right("This is a Test", 2) --> "st"
LTrim, Trim, RTrim ; 문자내의 공백제거
LTrim ; 문자가 시작되기 전의 왼쪽 공백제거
RTrim ; 문자열의 오른쪽 공백제거
Trim ; 문자열의 양쪽 공백 제거
(주의)문자열 내의 공백은 제거하지 않음
InStrRev() ; 문자열 내에서 지정한 문자열의 위치를 오른쪽에서 지정한 위치부터 찾는다
Split() ; 지정된 문자열을 기준으로 문자열을 나누어 배열을 반환
Join() ; 문자열 변수의 배열을 연결한 문자열을 반환
Replace() ; 문자열 내의 문자를 지정한 문자로 바꿈
Space() ; 지정한 수 만큼의 공백 문자열을 반환
StrReverse() ; 문자열의 순서를 거꾸로 만들어서 반환
MonthName() ; 해당 숫자를 월로 표기 1~12
WeekDayName() ; 해당 숫자를 요일로 반환 1~7/월~토
UCase() ; 문자를 모두 대문자로 반환
LCase() ; 문자를 모두 소문자로 반환
날짜
1998년 8월 22일 오후3시 --> 36029.625
36029 ; 1899년 12월 30일 이후부터 1998년 8월 22일은 36029번째 날
.625 ; 15시 / 24시, 24시를 100으로 보고 소수로 표시한다
날짜 literal
VBA에서는 날짜표시를 # #로 묶어 표현한다
ex
#8/22/1998#
#03:00 PM#
#8/22/98 3:00:00 PM#
Now 현재의 날짜와 시간
Date 현재 날짜
Time 현재시간
ex
Msg Now & Chr(13) & Date & Chr(13) & Time ; VBA에서 개행은 Chr(13) -->
위의 함수를 이용해서 현재의 날짜와 시간을 바꿀 수도 있다.
날짜 추출함수
DatePart(날짜값) ; 모두
Year(날짜값) ; 년도
Month(날짜값) ; 월
Day(날짜값) ; 날
WeekDay(날짜값) ; 요일
Hour(날짜값) ; 시간
Minute(날짜값) ; 분
Second(날짜값) ; 초
WeekDay( 날짜, 옵션)
옵션 ; 주의 시작 요일을 결정
vbUseSystem 0 NLS API 설정 사용
vbSunday 1 일요일 ; default
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesDay 4 수요일
vbThursDay 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
DatePart(옵션, 날짜값)
옵션 설명
yyyy 년도
q 분기
m 달
y 년중 몇번째 날인지
d 날짜
w 요일
ww 년중 몇번째 주인지
h 시
n 분
s 초
날짜와 시간 연결 함수
DateSerial( 년도, 월, 일)
TimeSerial( 시, 분, 초)
날짜 연산
DateAdd(Interaval 옵션, 더할 값, 날짜값) ;
Interaval 옵션 ; 연산할 시간의 단위 지정 -> DatePart와 같음
ex
DateAdd("yyyy", 1, Now) --> 내년
DateDiff(Interval 옵션, 날짜값1, 날짜값2 [, FirstDayOfWeek][, FirstWeekOfYear]) ; 날짜값1 -> 날짜값2이 과거이면 음수, 미래이면 양수
FirstDayOfWeek ; 한주를 시작하는 요일
FirstWeekOfYear ; 일년을 시작하는 주
ex
Dim TheDate As Date
TheDate = InputBox("Enter a date")
MsgBox "Days from today : " & DateDiff("d", Now, TheDate)
(주의)Interval 옵션보다 작은 시간단위에 대해서는 고려하지 않음
수학함수
Exp() ; E(== ~2.718282....)^2, Exp함수는 Log 함수의 여함수이며 역로그함수이다. 입력값이 709.782712893보다 크면 에러를 일으킨다.
Log() ; 자연로그값, 입력값 > 0 이어야 한다.
Sqr() ; 제곱근 값, 입력값 > 0 이어야 한다.
Sgn() ; 부호(-1 | 1), 0이면 0
삼각함수 ; 각의 단위로 라디안(=각 x Pi / 180)을 사용한다.
Sin()
Cos()
Tan()
Atn() ; 아크탄젠트
이외의 것은 유도해서 사용한다.
Secant Sec(X) = 1 / Cos(X)
Cosecant Cosec(X) = 1 /Sin(X)
Cotangent Cotan(X) = 1 /Tan(X)
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant Arcsec(X) = Atn(X / Sqr(X * X ?1)) + Sgn((X) ?1) * (2 * Atn(1))
Inverse Cosecant Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) ?1) * (2 * Atn(1))
Inverse Cotangent Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine HSin(X) = (Exp(X) ?Exp(-X)) / 2
Hyperbolic Cosine HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent HTan(X) = (Exp(X) ?Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant HCosec(X) = 2 / (Exp(X) ?Exp(-X))
Hyperbolic Cotangent HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) ?Exp(-X))
Inverse Hyperbolic Sine HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine HArccos(X) = Log(X + Sqr(X * X ?1))
Inverse Hyperbolic Tangent HArctan(X) = Log((1 + X) / (1 ?X)) / 2
Inverse Hyperbolic Secant HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent HArccotan(X) = Log((X + 1) / (X ?1)) / 2
Logarithm to base N LogN(X) = Log(X) / Log(N)
진법변환 ; 2진변환을 위한 함수는 없다
Hex
Oct
Val ; &H, &O로 시작하는 16진수, 8진수 값을 Double형 10진수로 변환
텍스트 파일 핸들링
FreeFile([rangenumber])
rangenumber, default 0 --> 1~255범위의 파일 번호를 반환, 1--> 256~ 511
ex
Dim hFile As Long ; hFile이라는 정수형 변수를 선언
hFile=FreeFile ; FreeFile함수를 사용하여 파일 번호를 얻음
파일 열기/닫기
Open pathname For mode [Access access] [lock] As [#] filenumber [Len=reclength]
pathname ; 파일의 전체 경로 및 이름을 지정하는 문자열
mode ; Appen, Binary, Input(읽기), Output(새로쓰기), Randim(default. 램덤 액세스파일)
access ; 열려있는 파일에서 허용하는 작업을 지정 Read, Write, Read Write, 네트워크나 OS의 보안설정과 관련하여 설정
lock ; 다른 프로세스에 의해 열려 있는 파일에 허용하는 작업 Shared, Lock Read, Lock Write, Lock Read Write
filenumber ; 1~511의 유효한 파일 번호 FreeFile함수로 사용가능한 파일 번호를 얻는다
reclength ; -32767 보다 작은 수, 랜덤 액세스파일의 경우 이 값은 레코드 길이가 되며 순차 파일의 경우 이 값은 버퍼에 있는 문자의 수
ex
Open "TESTFILE" For Input As #1 ; 순차파일, 읽기용
` 파일의 다른 모드로 다시 열기 전에 닫습니다..
Close #1
Open "TESTFILE" For Output Shared As #1 ; 순차파일 출력용, 어떤 프로세스에서도 읽기나 쓰기가 가능
' 파일을 다른 모드로 다시 열기 전에 닫습니다.
Close #1
Open "TESTFILE" For Binary Access Write As #1 ; 쓰기 작업만을 위해 이진 모드로 파일을 연다
' 파일을 다른 모드로 다시 열기 전에 닫습니다.
Close #1
Open "TESTFILE" For Binary Access Read Lock Read As #1
파일의 읽기와 쓰기 ; 파일의 오픈 모드에 따라 사용하는 읽기/쓰기 구문이 다르다
Open모드 Read작업 Write작업
Input,Output,Appen Input.Input #, Line Input # Print #, Write #
Random Get Put
Binary Input,Get Put
Input(number,[#]filenumber) ; 한 개의 문자를 읽음
number ; 읽을 문자의 갯수를 지정
Input #filenumber(seperator) varname1(seperator) varname2(seperator) ... ; 한 줄을 읽어들인 후 분리하여 각각의 변수에 저장
ex
' 사용가능한 파일번호 얻기
iFileNum = FreeFile
' 현재 디렉토리에 있는 person.txt파일 열기
Open "person.txt" For Input As iFileNum
' 데이터 읽기
Iput #iFileNum, strNume,strNumber,strDepart
' 데이터 출력
txtName.Text = strName : txtNumber.Text = strNumber : txtDepart.Text = strDepart
Line Input # 문
Line Input#문은 열려 있는 순차 파일에서 하나의 행을 읽어서 String 변수에 저장한다.
Line Input #filenumber, varname
ex
fn = FreeFile
' 파일 읽을 수 있도록 열어준다.
Open "test.txt" For Input As #fn
' 파일의 내용을 읽어 온다.
Do While Not EOF(fn)
Line Input #fn, File_Line
File_Line = File_Line & vbCrLf
File_Data = File_Data & File_Line
Loop
' 파일을 닫아 준다.
Close #fn
' 읽어온 내용을 직접실행창에 출력한다.
Debug.Print File_Data
Print # 문
Print #filenumber, output ; 파일에 데이터를 쓰기 위해서는 Print # 문을 사용한다.
여러 개의 output을 사용하는 경우 컴마(,) 또는 세미콜론(;)으로 구분한다. 컴마를 사용하면 출력하는 데이터 사이에 탭 (Tab)을 두는 것이고 세미콜론(;)을 사용하면 바로 붙여서 출력한다. 출력시 형식을 지정하려면 Spc(), Tab()함수등을 같이 사용한다.
Sub demo_Print()
Open "TESTFILE.txt" For Output As #1 ' 출력을 위해 파일을 엽니다.
Print #1, "This is a test" ' 텍스트를 파일에 출력합니다.
Print #1, ' 파일에 공란을 출력합니다.
Print #1, "Zone 1"; Tab; "Zone 2" ' 두 인쇄 영역에 출력합니다.
Print #1, "Hello"; " "; "World" ' 문자열을 공백으로 구분합니다.
Print #1, Spc(5); "5 leading spaces " ' 5개의 공백으로 문자열을 구분합니다.
Print #1, Tab(10); "Hello" ' 10열에 단어를 인쇄합니다.
' Boolean, Date, Null과 Error 값을 할당합니다.
Dim MyBool, MyDate, MyNull, MyError
MyBool = False
MyDate = #2/12/1969#
MyNull = Null
MyError = CVErr(32767)
' True, False, Null과 Error 시스템 설정에 따라 번역합니다
' 날짜 문자열은 표준 약식 날짜 형식을 사용하여 적습니다.
Print #1, MyBool; " is a Boolean value"
Print #1, MyDate; " is a date"
Print #1, MyNull; " is a null value"
Print #1, MyError; " is an error value"
Close #1 ' 파일을 닫습니다
End Sub
Write # 문
데이터를 순차 파일에 기록한다.
Write #filenumber, outputlist
Write # 문으로 기록된 데이터는 일반적으로 Input #을 사용하여 읽는다. 이것은 Print#과 달리 출력하는 데이터의 형식에 맞추어 파일에 기록한다. 가령 문자열 데이터를 출력하면 쌍따옴표안에 데이터를 입력한다. 숫자 데이터는 항상 마침표를 소수 구분 기호로 사용하여 파일에 기록된다. Boolean 데이터의 경우 #TRUE# 또는 #FALSE#가 파일에 기록되고. Date 데이터는 일반적인 날짜 형식을 사용하여 파일에 기록된다.
Sub demo_Write()
Open "TESTFILE.txt" For Output As #1 ' 출력을 위해 파일을 엽니다.
Write #1, "Hello World", 234 ' 쉼표로 구분된 데이터를 작성합니다.
Write #1, ' 비어있는 행을 작성합니다.
Dim MyBool, MyDate, MyNull, MyError
' Boolean, Date, Null과 Error 값을 할당합니다.
MyBool = False
MyDate = #2/12/1969#
MyNull = Null
MyError = CVErr(32767)
' Boolean 데이터는 #TRUE#나 #FALSE#로 작성됩니다. 날짜 문자열은
' 일반적인 날짜 형식으로 작성됩니다. 예를 들면 #1994-07-13#
' 1994년 7월 13일을 나타냅니다. Null 데이터는 #NULL#로 작성됩니다.
' Error 데이터는 #ERROR errorcode#로 작성됩니다.
Write #1, MyBool; " is a Boolean value"
Write #1, MyDate; " is a date"
Write #1, MyNull; " is a null value"
Write #1, MyError; " is an error value"
Close #1 ' 파일을 닫습니다.
End Sub
기타 순차파일 관련 구문
LOF(filenumber) ; 파일의 크기를 바이트단위로 알려줌
ex
Dim FileLength
Open "TESTFILE" For Input As #1 ' 파일을 엽니다.
FileLength = LOF(1) ' 파일의 길이를 구합니다.
Close #1 ' 파일을 닫습니다.
FileLen(파일명) ; 파일의 길이(바이트)를 알아냄
ex
MySize = FileLen("TESTFILE") ' 파일길이(바이트)를 반환
EOF(filenumber) ; 파일의 끝인가를 Boolean 값으로 반환
ex
Dim InputData
Open "MYFILE" For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
Debug.Print InputData
Loop
Close #1
파일열기 대화상자
GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText,MultiSelect)
FileFilter
열려는 파일의 종류를 지정하는 요소 (default : "모든 파일(*.*),*.*")
ex
"텍스트(*.txt),*,txt,추가 기능(*.xla),*,xla" --> 두 종류의 파일에 대한 필터를 지정,
FilterIndex
위의 파일필터에서 가장 먼저 보일 필터의 번호를 지정, 1부터 지정한 개수까지 기본 파일 필터링 조건의 인덱스 번호를 지정
생략(default)나 현재 파일 필터 수보다 크면 첫 번째 필터가 사용됨(1)
Title
대화 상자 제목을 지정, (default : 열기)
MultiSelect
default : FALSE ; 하나의 파일 이름만 선택할 수 있다.
TRUE이면 여러개의 파일 이름을 사용할 수 있다.
ex
fileToOpen = Application.GetOpenFilename("Text Files (*.txt),*.txt")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen ' 연 파일의 이름을 출력
End If
파일저장 대화상자
GetSaveAsFilename(FileFilter, FilterIndex, Title, ButtonText,MultiSelect)
Example 1
Sheet1에 $B$16:$C$20 셀 영역에 콜 옵션 이론가격 계산(블랙숄즈 방정식)에 필요한 데이터가 s, k, r, T,v의 순서로 입력되어있고 "계산" 버튼을 클릭하면 방정식을 계산하여 $C$22에 콜옵션 이론가격을 출력한다.
Sub black_scholes()
Dim Sht As Worksheet 'Object형 변수
Dim col As Long
Dim s, k, T, r, v As Double
Dim d1, d2, c As Double
col = 3
' Object형 변수 Worksheet의 입력 방식 ; Set 변수명 = 값
' Sheet1의 이름이 연습1이라면 Set sht = Worksheets("연습1")로 사용할 수도 있다
Set sht = Sheet1
Sheet1.Cells(row,columns)
s = Sheet1.Cells(16, col).Value
k = Sheet1.Cells(17, col).Value
r = Sheet1.Cells(18, col).Value
T = Sheet1.Cells(19, col).Value
v = Sheet1.Cells(20, col).Value
d1 = Log(s / k) + (r + Application.WorkSheetFunction.Power(v, 2) * 0.5 ) * T
d1 = d1 / (v * Sqr(T))
d2 = d1 - v * Sqr(T)
With Application.WorksheetFunction
c = s * .NormSDist(d1) - k * Exp(-r * T) * .NormSDist(d2)
End With
' 셀에 결과를 입력
Sheet1.Cells(22, col) = c
End Sub
????
response
With Application.WorksheetFunction ~ End With
+ 엑셀에 범위 지정을 잘못하면 10만줄까지 쓴다.
Dim (변수명/(배열명(크기)) [As 데이터형]
데이터 형
정수 Byte, Integer, Long
실수 Single, Double
문자 String
날짜 Date
논리 Boolean
모든데이터 Variant(Default)
워크북 Workbook
워크시트 WorkSheet
셀 범위 Range
Dim Arr1(10) As Double ; (주의)인덱스의 시작0, 끝10, 원소의 개수 11
ReDim 변수재정의
ReDim yld(2 To 11) 인덱스의 시작 2~ 끝11 (default : 0에서 시작)
연산자
+, -, *, /
\ 정수나누기 11\5 --> 2
Mod 나머지
-(수) 부호바꿈
& 문자열 연결 "AB" & "CD" --> "ABCD"
>,<,>=,<=,<>
= (주의)같다
Like 비슷하다 "VBA" Like "V?A" --> TRUE
(주의) 영문대문자는 영문소문자보다 작다
And,Or,Not,Xor
Eqv 동일값
Imp A가 TRUE, B가 FALSE일때만 False, 나머지 TRUE, (A imply B;A이면 B이다)
If 문
If 조건1 Then
(실행1)
[ElseIf 조건2 Then]
(실행2)
[Else]
(나머지 실행)
End If
Select Case (조건식 / 변수)
Case 조건1
(실행1)
Case 조건2
(실행2)
...
Case Else
(나머지 실행)
End Select
For 문
For (카운터 변수 = 시작값) To (끝 값)
(실행)
Next [카운터 변수]
For each sht In ThisWorkBook.Sheets
(실행)
Next
Do While(조건이 TRUE인 동안)/Until(조건이 TRUE가 될때까지)
(실행)
Loop
Do
~
Loop While/Until (조건)
문자열 함수
StrComp(비교대상1,비교대상2,[비교방식]) ; 문자열 (크기)비교
비교방식 값 방식
vbBinaryCompar 0 이진비교
vbTextCompare 1 Text비교
결과값 설명
-1 비교대상1 < 2
0 1 = 2
1 1 > 2
StrConv(입력문자열, 변환옵션) ; 문자열을 대소문자나 유니코드 등으로 변환
변환옵션 값 설명
vbUpperCase 1 대문자로
vbLowerCase 2 소문자로
vbProperCase 3 첫글자만 대문자로
vbWide 4 1byte 문자를 2byte로
vbNarrow 8 2byte -> 1byte
vbKatakana 16 히라가나->가타가나 (only 일본어버전)
vbHiragana 32 가타가나->히라가나 (only 일본어버전)
vbUnicode 64 ANSI->Unicode
vbFromUnicode 128 Unicode->ANSI
Len(문자열) ; 문자열의 길이를 구함
Format()
플레이스홀더(placeholde ; 포맷을 지시하는 단일문자)
@ 해당위치에 문자가 있으면 표시, 없으면 공백표시
& 해당위치에 문자가 있으면 표시, 없으면 표시 않음
> 모든 문자를 대문자로 표시
< 모든 문자를 소문자로 표시
! 플레이스홀더를 왼쪽에서 오른쪽으로 채움, (default 오른쪽에서 왼쪽)
ex
MsgBox Format("5643300","(@@@)@@@-@@@@") ; ()안의 @@@는 공백으로 채워진다
MsgBox Format("025653300","(@@@)@@@-@@@") ; 맨앞의 @만 공백
MsgBox Format("5643300","(&&&&)&&&-&&&&") ; ()564-3300
MsgBox Format("025653300","(&&&)&&&-&&&&") ; (02)565-3300
MsgBox Format("5653300","!(@@@)@@@-@@@@") ; (565)330-0
InStr([시작위치],string1,string2, 찾는방식) ; 대소문자를 구별하여 어떤 문자를 포함하는지의 여부를 판단하는 함수, 지정된 위치에서 시작(default 첫문자)
(주의)찾는 방식이 지정되면 반드시 시작위치를 지정해 주어야 한다.
조건 결과
Len(string1) --> 0 0
string1=Null Null
Len(string2) --> 0 start
string2=Null Null
not exist string2 0
string2가 string1 내에서 발견 일치된 지점의 위치
start > string2 0
ex
InStr( 1, "Tech on the Net", "the") --> 9
InStr( "Tech on the Net", "the") --> 9
Instr( 10, "Tech on the Net", "t" ) --> 15
Left(문자열, 추출문자수) ; 문자열로부터 왼쪽에서 문자수만큼의 문자를 반환
MsgBox Left( "This is a Test", 2) --> "Th"
Mid(문자열, 시작위치, 추출문자수) ; 문자열 시작위치에서 추출문자수만큼의 문자를 뽑아 반환
MsgBox Mid("This is a Test", 6, 2) --> "is"
Right(문자열, 추출문자수) ; 문자열의 오른쪽에서 추출문자수만큼 문자를 뽑아 반환
MsgBox Right("This is a Test", 2) --> "st"
LTrim, Trim, RTrim ; 문자내의 공백제거
LTrim ; 문자가 시작되기 전의 왼쪽 공백제거
RTrim ; 문자열의 오른쪽 공백제거
Trim ; 문자열의 양쪽 공백 제거
(주의)문자열 내의 공백은 제거하지 않음
InStrRev() ; 문자열 내에서 지정한 문자열의 위치를 오른쪽에서 지정한 위치부터 찾는다
Split() ; 지정된 문자열을 기준으로 문자열을 나누어 배열을 반환
Join() ; 문자열 변수의 배열을 연결한 문자열을 반환
Replace() ; 문자열 내의 문자를 지정한 문자로 바꿈
Space() ; 지정한 수 만큼의 공백 문자열을 반환
StrReverse() ; 문자열의 순서를 거꾸로 만들어서 반환
MonthName() ; 해당 숫자를 월로 표기 1~12
WeekDayName() ; 해당 숫자를 요일로 반환 1~7/월~토
UCase() ; 문자를 모두 대문자로 반환
LCase() ; 문자를 모두 소문자로 반환
날짜
1998년 8월 22일 오후3시 --> 36029.625
36029 ; 1899년 12월 30일 이후부터 1998년 8월 22일은 36029번째 날
.625 ; 15시 / 24시, 24시를 100으로 보고 소수로 표시한다
날짜 literal
VBA에서는 날짜표시를 # #로 묶어 표현한다
ex
#8/22/1998#
#03:00 PM#
#8/22/98 3:00:00 PM#
Now 현재의 날짜와 시간
Date 현재 날짜
Time 현재시간
ex
Msg Now & Chr(13) & Date & Chr(13) & Time ; VBA에서 개행은 Chr(13) -->
위의 함수를 이용해서 현재의 날짜와 시간을 바꿀 수도 있다.
날짜 추출함수
DatePart(날짜값) ; 모두
Year(날짜값) ; 년도
Month(날짜값) ; 월
Day(날짜값) ; 날
WeekDay(날짜값) ; 요일
Hour(날짜값) ; 시간
Minute(날짜값) ; 분
Second(날짜값) ; 초
WeekDay( 날짜, 옵션)
옵션 ; 주의 시작 요일을 결정
vbUseSystem 0 NLS API 설정 사용
vbSunday 1 일요일 ; default
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesDay 4 수요일
vbThursDay 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
DatePart(옵션, 날짜값)
옵션 설명
yyyy 년도
q 분기
m 달
y 년중 몇번째 날인지
d 날짜
w 요일
ww 년중 몇번째 주인지
h 시
n 분
s 초
날짜와 시간 연결 함수
DateSerial( 년도, 월, 일)
TimeSerial( 시, 분, 초)
날짜 연산
DateAdd(Interaval 옵션, 더할 값, 날짜값) ;
Interaval 옵션 ; 연산할 시간의 단위 지정 -> DatePart와 같음
ex
DateAdd("yyyy", 1, Now) --> 내년
DateDiff(Interval 옵션, 날짜값1, 날짜값2 [, FirstDayOfWeek][, FirstWeekOfYear]) ; 날짜값1 -> 날짜값2이 과거이면 음수, 미래이면 양수
FirstDayOfWeek ; 한주를 시작하는 요일
FirstWeekOfYear ; 일년을 시작하는 주
ex
Dim TheDate As Date
TheDate = InputBox("Enter a date")
MsgBox "Days from today : " & DateDiff("d", Now, TheDate)
(주의)Interval 옵션보다 작은 시간단위에 대해서는 고려하지 않음
수학함수
Exp() ; E(== ~2.718282....)^2, Exp함수는 Log 함수의 여함수이며 역로그함수이다. 입력값이 709.782712893보다 크면 에러를 일으킨다.
Log() ; 자연로그값, 입력값 > 0 이어야 한다.
Sqr() ; 제곱근 값, 입력값 > 0 이어야 한다.
Sgn() ; 부호(-1 | 1), 0이면 0
삼각함수 ; 각의 단위로 라디안(=각 x Pi / 180)을 사용한다.
Sin()
Cos()
Tan()
Atn() ; 아크탄젠트
이외의 것은 유도해서 사용한다.
Secant Sec(X) = 1 / Cos(X)
Cosecant Cosec(X) = 1 /Sin(X)
Cotangent Cotan(X) = 1 /Tan(X)
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant Arcsec(X) = Atn(X / Sqr(X * X ?1)) + Sgn((X) ?1) * (2 * Atn(1))
Inverse Cosecant Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) ?1) * (2 * Atn(1))
Inverse Cotangent Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine HSin(X) = (Exp(X) ?Exp(-X)) / 2
Hyperbolic Cosine HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent HTan(X) = (Exp(X) ?Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant HCosec(X) = 2 / (Exp(X) ?Exp(-X))
Hyperbolic Cotangent HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) ?Exp(-X))
Inverse Hyperbolic Sine HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine HArccos(X) = Log(X + Sqr(X * X ?1))
Inverse Hyperbolic Tangent HArctan(X) = Log((1 + X) / (1 ?X)) / 2
Inverse Hyperbolic Secant HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent HArccotan(X) = Log((X + 1) / (X ?1)) / 2
Logarithm to base N LogN(X) = Log(X) / Log(N)
진법변환 ; 2진변환을 위한 함수는 없다
Hex
Oct
Val ; &H, &O로 시작하는 16진수, 8진수 값을 Double형 10진수로 변환
텍스트 파일 핸들링
FreeFile([rangenumber])
rangenumber, default 0 --> 1~255범위의 파일 번호를 반환, 1--> 256~ 511
ex
Dim hFile As Long ; hFile이라는 정수형 변수를 선언
hFile=FreeFile ; FreeFile함수를 사용하여 파일 번호를 얻음
파일 열기/닫기
Open pathname For mode [Access access] [lock] As [#] filenumber [Len=reclength]
pathname ; 파일의 전체 경로 및 이름을 지정하는 문자열
mode ; Appen, Binary, Input(읽기), Output(새로쓰기), Randim(default. 램덤 액세스파일)
access ; 열려있는 파일에서 허용하는 작업을 지정 Read, Write, Read Write, 네트워크나 OS의 보안설정과 관련하여 설정
lock ; 다른 프로세스에 의해 열려 있는 파일에 허용하는 작업 Shared, Lock Read, Lock Write, Lock Read Write
filenumber ; 1~511의 유효한 파일 번호 FreeFile함수로 사용가능한 파일 번호를 얻는다
reclength ; -32767 보다 작은 수, 랜덤 액세스파일의 경우 이 값은 레코드 길이가 되며 순차 파일의 경우 이 값은 버퍼에 있는 문자의 수
ex
Open "TESTFILE" For Input As #1 ; 순차파일, 읽기용
` 파일의 다른 모드로 다시 열기 전에 닫습니다..
Close #1
Open "TESTFILE" For Output Shared As #1 ; 순차파일 출력용, 어떤 프로세스에서도 읽기나 쓰기가 가능
' 파일을 다른 모드로 다시 열기 전에 닫습니다.
Close #1
Open "TESTFILE" For Binary Access Write As #1 ; 쓰기 작업만을 위해 이진 모드로 파일을 연다
' 파일을 다른 모드로 다시 열기 전에 닫습니다.
Close #1
Open "TESTFILE" For Binary Access Read Lock Read As #1
파일의 읽기와 쓰기 ; 파일의 오픈 모드에 따라 사용하는 읽기/쓰기 구문이 다르다
Open모드 Read작업 Write작업
Input,Output,Appen Input.Input #, Line Input # Print #, Write #
Random Get Put
Binary Input,Get Put
Input(number,[#]filenumber) ; 한 개의 문자를 읽음
number ; 읽을 문자의 갯수를 지정
Input #filenumber(seperator) varname1(seperator) varname2(seperator) ... ; 한 줄을 읽어들인 후 분리하여 각각의 변수에 저장
ex
' 사용가능한 파일번호 얻기
iFileNum = FreeFile
' 현재 디렉토리에 있는 person.txt파일 열기
Open "person.txt" For Input As iFileNum
' 데이터 읽기
Iput #iFileNum, strNume,strNumber,strDepart
' 데이터 출력
txtName.Text = strName : txtNumber.Text = strNumber : txtDepart.Text = strDepart
Line Input # 문
Line Input#문은 열려 있는 순차 파일에서 하나의 행을 읽어서 String 변수에 저장한다.
Line Input #filenumber, varname
ex
fn = FreeFile
' 파일 읽을 수 있도록 열어준다.
Open "test.txt" For Input As #fn
' 파일의 내용을 읽어 온다.
Do While Not EOF(fn)
Line Input #fn, File_Line
File_Line = File_Line & vbCrLf
File_Data = File_Data & File_Line
Loop
' 파일을 닫아 준다.
Close #fn
' 읽어온 내용을 직접실행창에 출력한다.
Debug.Print File_Data
Print # 문
Print #filenumber, output ; 파일에 데이터를 쓰기 위해서는 Print # 문을 사용한다.
여러 개의 output을 사용하는 경우 컴마(,) 또는 세미콜론(;)으로 구분한다. 컴마를 사용하면 출력하는 데이터 사이에 탭 (Tab)을 두는 것이고 세미콜론(;)을 사용하면 바로 붙여서 출력한다. 출력시 형식을 지정하려면 Spc(), Tab()함수등을 같이 사용한다.
Sub demo_Print()
Open "TESTFILE.txt" For Output As #1 ' 출력을 위해 파일을 엽니다.
Print #1, "This is a test" ' 텍스트를 파일에 출력합니다.
Print #1, ' 파일에 공란을 출력합니다.
Print #1, "Zone 1"; Tab; "Zone 2" ' 두 인쇄 영역에 출력합니다.
Print #1, "Hello"; " "; "World" ' 문자열을 공백으로 구분합니다.
Print #1, Spc(5); "5 leading spaces " ' 5개의 공백으로 문자열을 구분합니다.
Print #1, Tab(10); "Hello" ' 10열에 단어를 인쇄합니다.
' Boolean, Date, Null과 Error 값을 할당합니다.
Dim MyBool, MyDate, MyNull, MyError
MyBool = False
MyDate = #2/12/1969#
MyNull = Null
MyError = CVErr(32767)
' True, False, Null과 Error 시스템 설정에 따라 번역합니다
' 날짜 문자열은 표준 약식 날짜 형식을 사용하여 적습니다.
Print #1, MyBool; " is a Boolean value"
Print #1, MyDate; " is a date"
Print #1, MyNull; " is a null value"
Print #1, MyError; " is an error value"
Close #1 ' 파일을 닫습니다
End Sub
Write # 문
데이터를 순차 파일에 기록한다.
Write #filenumber, outputlist
Write # 문으로 기록된 데이터는 일반적으로 Input #을 사용하여 읽는다. 이것은 Print#과 달리 출력하는 데이터의 형식에 맞추어 파일에 기록한다. 가령 문자열 데이터를 출력하면 쌍따옴표안에 데이터를 입력한다. 숫자 데이터는 항상 마침표를 소수 구분 기호로 사용하여 파일에 기록된다. Boolean 데이터의 경우 #TRUE# 또는 #FALSE#가 파일에 기록되고. Date 데이터는 일반적인 날짜 형식을 사용하여 파일에 기록된다.
Sub demo_Write()
Open "TESTFILE.txt" For Output As #1 ' 출력을 위해 파일을 엽니다.
Write #1, "Hello World", 234 ' 쉼표로 구분된 데이터를 작성합니다.
Write #1, ' 비어있는 행을 작성합니다.
Dim MyBool, MyDate, MyNull, MyError
' Boolean, Date, Null과 Error 값을 할당합니다.
MyBool = False
MyDate = #2/12/1969#
MyNull = Null
MyError = CVErr(32767)
' Boolean 데이터는 #TRUE#나 #FALSE#로 작성됩니다. 날짜 문자열은
' 일반적인 날짜 형식으로 작성됩니다. 예를 들면 #1994-07-13#
' 1994년 7월 13일을 나타냅니다. Null 데이터는 #NULL#로 작성됩니다.
' Error 데이터는 #ERROR errorcode#로 작성됩니다.
Write #1, MyBool; " is a Boolean value"
Write #1, MyDate; " is a date"
Write #1, MyNull; " is a null value"
Write #1, MyError; " is an error value"
Close #1 ' 파일을 닫습니다.
End Sub
기타 순차파일 관련 구문
LOF(filenumber) ; 파일의 크기를 바이트단위로 알려줌
ex
Dim FileLength
Open "TESTFILE" For Input As #1 ' 파일을 엽니다.
FileLength = LOF(1) ' 파일의 길이를 구합니다.
Close #1 ' 파일을 닫습니다.
FileLen(파일명) ; 파일의 길이(바이트)를 알아냄
ex
MySize = FileLen("TESTFILE") ' 파일길이(바이트)를 반환
EOF(filenumber) ; 파일의 끝인가를 Boolean 값으로 반환
ex
Dim InputData
Open "MYFILE" For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
Debug.Print InputData
Loop
Close #1
파일열기 대화상자
GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText,MultiSelect)
FileFilter
열려는 파일의 종류를 지정하는 요소 (default : "모든 파일(*.*),*.*")
ex
"텍스트(*.txt),*,txt,추가 기능(*.xla),*,xla" --> 두 종류의 파일에 대한 필터를 지정,
FilterIndex
위의 파일필터에서 가장 먼저 보일 필터의 번호를 지정, 1부터 지정한 개수까지 기본 파일 필터링 조건의 인덱스 번호를 지정
생략(default)나 현재 파일 필터 수보다 크면 첫 번째 필터가 사용됨(1)
Title
대화 상자 제목을 지정, (default : 열기)
MultiSelect
default : FALSE ; 하나의 파일 이름만 선택할 수 있다.
TRUE이면 여러개의 파일 이름을 사용할 수 있다.
ex
fileToOpen = Application.GetOpenFilename("Text Files (*.txt),*.txt")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen ' 연 파일의 이름을 출력
End If
파일저장 대화상자
GetSaveAsFilename(FileFilter, FilterIndex, Title, ButtonText,MultiSelect)
Example 1
Sheet1에 $B$16:$C$20 셀 영역에 콜 옵션 이론가격 계산(블랙숄즈 방정식)에 필요한 데이터가 s, k, r, T,v의 순서로 입력되어있고 "계산" 버튼을 클릭하면 방정식을 계산하여 $C$22에 콜옵션 이론가격을 출력한다.
Sub black_scholes()
Dim Sht As Worksheet 'Object형 변수
Dim col As Long
Dim s, k, T, r, v As Double
Dim d1, d2, c As Double
col = 3
' Object형 변수 Worksheet의 입력 방식 ; Set 변수명 = 값
' Sheet1의 이름이 연습1이라면 Set sht = Worksheets("연습1")로 사용할 수도 있다
Set sht = Sheet1
Sheet1.Cells(row,columns)
s = Sheet1.Cells(16, col).Value
k = Sheet1.Cells(17, col).Value
r = Sheet1.Cells(18, col).Value
T = Sheet1.Cells(19, col).Value
v = Sheet1.Cells(20, col).Value
d1 = Log(s / k) + (r + Application.WorkSheetFunction.Power(v, 2) * 0.5 ) * T
d1 = d1 / (v * Sqr(T))
d2 = d1 - v * Sqr(T)
With Application.WorksheetFunction
c = s * .NormSDist(d1) - k * Exp(-r * T) * .NormSDist(d2)
End With
' 셀에 결과를 입력
Sheet1.Cells(22, col) = c
End Sub
????
response
With Application.WorksheetFunction ~ End With
+ 엑셀에 범위 지정을 잘못하면 10만줄까지 쓴다.
반응형
'ITC' 카테고리의 다른 글
오라클 클라우드 항시 무료 인스턴스의 회수 (0) | 2023.10.15 |
---|---|
SSL 보안 서버 설치 방법 (0) | 2018.12.20 |
OS별 시리얼 확인 (0) | 2016.06.22 |
OneNote 2013 무료화 (0) | 2014.09.17 |
Chrome 클래스가 등록되지 않았습니다. (0) | 2014.06.18 |