๐ ํ์ ๋งคํฌ๋ก๋ก ์ผํ๊ธฐ (2)
ํ์ ์ด๋ ์์ ์ ๋งคํฌ๋ก๋ ๊ฑฐ์ ์ฐจ์ด๊ฐ ์๋ค. ์ ์ผํ ํฐ ์ฐจ์ด๋ ๋๋ฒ๊น ์ด ์ด๋ ต๋ค๋ ๊ฒ์ด๋ค. ํ์ ์ ์๋ฌ ๋ฌธ๊ตฌ๊ฐ ๋ชจํธํ๊ณ , ๊ตฐ๋ ํน์ฑ์ ๊ฒ์๋ ํ๋ค๋ค. ๋คํ์ธ ์ ์ ์คํฌ๋ฆฝํธ ํธ์ง๊ธฐ๋ฅผ ์ผ ์ํ์์ ์ค๋ฅ๊ฐ ๋๋ฉด ์ค๋ฅ๊ฐ ๋ ๋ผ์ธ์ ํ์ํด์ค๋ค๋ ์ ์ด๋ค. ์คํฌ๋ฆฝํธ ํธ์ง๊ธฐ๋ฅผ ์ผ๋ฉด ์คํฌ๋ฆฝํธ ์คํ์๋๊ฐ ์ฒ์ ํ๊ฒ ๋๋ ค์ง์ง๋ง, ๊ฐ์ฅ ์ข์ ๋๋ฒ๊น ๋ฐฉ๋ฒ์ด๋ค.
Sub main()
VBA๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ด์ Sub๋ก ์์ํ๊ฒ๋๋ค. ์คํฌ๋ฆฝํธ ํธ์ง๊ธฐ์์ ์ข์ธก ์ฌ์ด๋๋ฐ ์ค ์ถ๊ฐํ๊ณ ์ถ์ ๋ฌธ์์ ์ค๋ฅธ์ชฝ ํด๋ฆญ์ ํ๋ฉด ๋ชจ๋ ์ถ๊ฐ๋ฅผ ํ ์ ์๋ค. ๋ชจ๋ ๋ด์๋ ๋ค์์ฒ๋ผ Sub ํ๋ก์์ ธ๋ฅผ ๋ง๋ค ์ ์๋ค.
1Sub main()
2 'Your code here
3End SubSub ์์ Private๊ณผ Public์ ๋ถ์ฌ ๋ค๋ฅธ ๋ชจ๋์์๋ ํธ์ถ ๊ฐ๋ฅํ ์ง ์๋์ง๋ฅผ ์ ํ ์ ์๋ค. ์ค์ง์ ์ผ๋ก๋ Private์ ์ฌ์ฉํ ์ผ์ด ์์๊ณ , ์ถ๊ฐ๋ก ๋ถ์ฌ์ฃผ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Public์ด ๋๊ธฐ๋๋ฌธ์ ์๋ตํ์๋ค. Sub์ ๋์๋ ๊ผญ End Sub๊ฐ ๋ถ์ด์ค์ผํ๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ํ๋์ Sub๋ฅผ Sub ํ๋ก์์ ธ๋ผ๊ณ ํ๊ณ ,
1Sub main2()
2 Call main
3End Sub๋ค๋ฅธ ๋ชจ๋์์๋ ๋ง๋ค์ด์ง Sub ํ๋ก์์ ธ๋ฅผ ์์๊ฐ์ด ์คํ์ํฌ ์ ์๋ค.

Sub ํ๋ก์์ ธ๋ฅผ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ, ์ ๋ ฅ - ์์๊ฐ์ฒด - ๋ช ๋ น๋จ์ถ๋ฅผ ํตํด VB์คํ์ผ์ ๋ฒํผ์ ์ฝ์ ํ ์๋ ์๊ณ , ์ผ๋ฐ ๋ํ์ ๋งคํฌ๋ก๋ฅผ ์ง์ ํด์(๋ํ์ ์ฐ์ธกํด๋ฆญํ๋ฉด ๋งคํฌ๋ก๋ฅผ ์ง์ ํ ์ ์๋ค.) ์คํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๋ฏธ๊ด์ ๋ํ์ด ํจ์ฌ ๋ซ๊ธฐ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ํ์ ์ง์ ํด์ ์ฌ์ฉํ์๋ค.
๋๋ฒ๊ทธ์ค์ด ์๋๊ฑฐ๋ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด ํ์ ์์๋ ์คํฌ๋ฆฝํธ ํธ์ง๊ธฐ๋ฅผ ๊ผญ ์ข ๋ฃํ ํ ์คํํด์ผํ๋ค. ํนํ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด ํ ๊ฒจ๋ฒ๋ฆฌ๋ ์ผ์ด ๋ง๋ค. ์คํฌ๋ฆฝํธ ํธ์ง๊ธฐ์์๋ ์ผ๋ฐ IDE์ฒ๋ผ F5๋ก ์คํํ ์ ์๋ค. Sub ๋จ์๋ก ์คํํ๊ธฐ๋๋ฌธ์ ์ด๋ค ๋ชจ๋์์ ์ด๋ค Sub ํ๋ก์์ ธ๋ฅผ ์คํ ํ ๊ฒ์ธ์ง ์ ํํด์ฃผ์ด์ผํ๋ค.
MsgBox()
Python์ print()์ฒ๋ผ, ์ด๋๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๋ ๊ฐ์ฅ ํธํ ๋ฐฉ๋ฒ์ MsgBox()์ด๋ค. ๊ดํธ์์ ๋ด์ฉ์ ์๋ฆผ์ฐฝ์ผ๋ก ๋์์ค๋ค.
1Sub main()
2 MsgBox("Hello, World!")
3End Sub
์ด๋ ๊ฒ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์์ง ๋ฐ์ค๊ฐ ๋ฌ๋ค. ์ด MsgBox()์๋ ์ฌ๋ฌ ์ฌ์ฉ๋ฒ์ด ์์ง๋ง, ์ง๊ธ์ ๋์ด๊ฐ ๊ฒ์ด๋ค.
๋ณ์ ์ ์ธ๊ณผ Range ๊ฐ์ฒด
์ฌํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฒ๋ผ, VBA์๋ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ ๋ณ์๊ฐ ์๋ค. ์ญ์ ๋ค๋ฅธ ์ธ์ด๋ค์ฒ๋ผ ๋ณ์์๋ integer, long, boolean, string ๋ฑ์ ๋ด์ ์๋ ์๊ณ , ๊ฐ์ฒด(object)๋ฅผ ๋ด์ ์๋ ์๋ค. VBA๋ ๊ฐ์ฒด์งํฅํ ์ธ์ด์ธ๋งํผ, ๊ฐ์ฒด์ ๊ฐ๋ ์ด ์ค์ํ๋ค. ๊ฐ์ฒด์ ๋ํด์๋ ์ด ๋ธ๋ก๊ทธ์ ์ ์ค๋ช ๋์ด์๋ค.
ํ์ ๋ฌธ์๋ ๊ฐ๋จํ๊ฒ ์ํฌ๋ถ(ํ์ผ) - (์ํฌ)์ํธ - ๋ฒ์ - ์ ๋ก ๋๋ ์ ์๋ค(๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฒ์์ ์ ์ ํฌ๊ฒ ๊ตฌ๋ถ์ ํ ํ์๊ฐ ์๋ค). ์ด๋ค์ ๋ชจ๋ ๊ฐ์ฒด(object)์ด๋ค. Range๋ ๊ทธ์ค ๋ฒ์์ ๊ฐ์ฒด์ธ๋ฐ, ๋ค๋ฅธ ์ํฌ๋ถ์, ๋ค๋ฅธ ์ํธ์ ์ ๋ฒ์๊น์ง๋ ๋ถ๋ฌ์ฌ ์ ์์ด ๋ฒ์ฉ์ฑ์ด ๋งค์ฐ ๋ฐ์ด๋๋ค. ๊ธฐ๋ณธ์ ์ธ Range์ ๊ตฌ์ฑ์ ๋ค์๊ณผ๊ฐ๋ค:
1Sub main()
2 Dim example as Range
3 Dim exampleNum
4
5 exampleNum = 0
6 Set example = Range("[filename.xlsx]Sheet1!A1")
7End SubDim์ ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ฐ์ด๋๋ฐ, as Range๋ฅผ ๋ถ์ฌ์ค์ผ๋ก์ ์์ ๋ณ์๊ฐ Range ๊ฐ์ฒด์์ ๋ช ์ํ๋ค. Set์ ๊ฐ์ฒด(object)๋ฅผ ๋ณ์์ ๋ถ์ฌํ ๋๋ง ์ฌ์ฉ๋๋ค. ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, Set์ ๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ๋๋ค๋ ์๋ฏธ์ด๋ค.
example ๋ณ์๋ ์ด์ filename.xlsx์ Sheet1 ์ํธ์ A1์ ์ ๊ฐ๋ฅดํค๊ณ ์๋ค. ๋ณ์์ ์ง์ ํ์ง ์๊ณ ์ง์ Range()๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
1Sub main()
2 Dim example as Range
3 Dim exampleNum
4
5 exampleNum = 0
6 Set example = Range("[filename.xlsx]Sheet1!A1")
7
8 MsgBox(example.Value) 'A1 ์
์ ๊ฐ์ MsgBox๋ก ์ถ๋ ฅ
9
10 MsgBox(Range("[filename.xlsx]Sheet1!A1")) '์ถ๋ ฅ๊ฐ์ด ๊ฐ๋ค.
11End SubMethod์ Properties
์ด์ฒ๋ผ Range ๊ฐ์ฒด๋ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ/์์ ํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ด๋ค. Range์๋ ๋ง์ Method๋ค๊ณผ Properties๋ค์ด ์๋๋ฐ, Method๋ Range์ ๋ํ ํ๋(Behavior)๊ฐ์ ๊ฐ๋ ์ผ๋ก, Range์ ๋ณํ๋ฅผ ์ค๋ ์ฌ์ฉ๋๊ณ , Property๋ ํด๋น Range ๊ฐ์ฒด์ ํน์ฑ์ ๋ถ๋ฌ์ฌ๋ ์ฌ์ฉ๋๋ค. ์ผ๋ก๋ก Properties์ค ํ๋์ธ .Value๋ ํด๋น Range์ ํน์ฑ์ธ ๊ฐ์ ๋ถ๋ฌ์ค๊ฒ๋๋ค. Method์ค ํ๋์ธ .Select๋ ํด๋น Range๋ฅผ ์ ํํ ์ ์๊ฒ ํด์ค๋ค. ์ฌํ ๊ฐ์ฒด์งํฅํ ์ธ์ด์ฒ๋ผ, Method๋ ๋ค์ ๊ดํธ๋ฅผ ๋ถ์ด๊ฒ๋๊ณ , Properties๋ ๋ถ์ด์ง ์๋๋ค.
1Sub main()
2 Dim example as Range
3 Dim exampleNum
4
5 exampleNum = 0
6 Set example = Range("[filename.xlsx]Sheet1!A1")
7
8 MsgBox(example.Row) 'Properties์ค ํ๋์ธ Row(ํ ๋ฒํธ)๋ฅผ ๋ถ๋ฌ์จ๋ค.
9
10 example.Select() 'A1์
์ ์ ํํ๋ค. ๊ดํธ๊ฐ ๋ถ๋๋ค.
11End Sub