본문 바로가기

닥치고 공부/공돌이

VBA 공부 ①

1. 원하는 시트로 이동하기

Sub NAME()


Sheets("Sheet1").Activate

'"Sheet1"의 시트를 활성화 시킨다.

'또는 Sheets(1).Activate 을 입력하면 첫 번째 시트를 활성화 시킨다.


End Sub



2. 원하는 시트로 이동하고 원하는 열에서 Null값 찾기(다음 입력 순번 찾기) 두 가지 방법

Sub NAME()


' 아래와 같이 순환문 구조로 해당 열의 공백 란을 찾을 수 있음


Dim i As Integer

Dim list As Integer

Dim x As Integer

i = 0

x = WorksheetFunction.CountA(Columns(1))

'변수 x에 첫 번째 열의 셀 값이 있는 셀 개수를 저장함


Sheets("data").Activate

'"data" 라는 시트를 활성화 시킴


    For list = i To x

    '0부터 x 까지 순환 시킴


    If Cells(3 + i, 1).Value = "" Then

    Cells(3 + i, 1).Activate

    Exit For

    End If

    '해당 Cell 값이 Null이면 해당 Cell을 활성화 시키고 순환문을 종료함


    i = i + 1

    Next list

    '해당 Cell 값이 Null이 아니면 해당 Cell아래로 반복 순환


End Sub

또는 아래와 같이 단순한 방법도 있음

Sub NAME()


Dim x As Integer


Sheets("data").Activate 

'"data" 라는 시트를 활성화 시킴


x = WorksheetFunction.CountA(Columns(1))

'변수 x에 첫 번째 열의 셀 값이 있는 셀 개수를 저장함


Cells(x + 1, 1).Activate

'해당 Cell을 활성화


End Sub



3. 수식이 들어 있는 행을 아래에 추가(insert)하는 방법

Sub NAME()


Dim x As Integer

Dim y As Variant

Dim y1 As Variant

Dim y2 As Variant

Dim y3 As Variant

Dim y4 As Variant

Dim y5 As Variant


x = WorksheetFunction.CountA(Columns(7))

'변수 x에 일곱번째 열의 셀 값이 있는 셀 개수를 저장함


y = x + 1

'변수 y에 x변수 + 1을 함


Cells(y, 4).Activate

'추가 하고 싶은 행(마지막행)을 활성화 시키고


y1 = Cells(y, 4).Formula

y2 = Cells(y, 7).Formula

y3 = Cells(y, 8).Formula

y4 = Cells(y, 9).Formula

y5 = Cells(y, 10).Formula

'각 변수에(v1 ~ v5) 해당 셀 값의 속성(Formula)을 저장


ActiveCell.EntireRow.Insert

'활성화 된 행에서 행 추가하기


Cells(y, 4).Formula = y1

Cells(y, 7).Formula = y2

Cells(y, 8).Formula = y3

Cells(y, 9).Formula = y4

Cells(y, 10).Formula = y5

'해당 셀 값에 변수 각 변수(v1 ~ v5)의 속성(Formula)을 저장


End Sub



4. 선택한 행 내의 원하는 행 값을 원하는 시트, 셀에 저장하기

Sub NAME()


Dim x As Integer 'x = 열번호

Dim y As Integer 'y = 행번호

Dim z As Long


x = ActiveCell.Column

y = ActiveCell.Row

z = Cells(y, 2)


'ActiveCell.Address / 현재 활성화 된 셀의 주소

'Activecell.column / 활성셀의 열번호

'Activecell.row / 활성셀의 행번호

'z 변수에 선택된 Cell의 값을 저장


Sheets(1).Activate

'첫 번째 시트 활성화


Cells(4, 35) = z

'해당 Cell 값에 z변수의 값을 저장


End Sub



5. 선택 영역 인쇄 미리보기

Sub NAME()


    ActiveSheet.PageSetup.PrintArea = "$A$1:$AF$48"

   '인쇄할 범위 지정


    Call 프린트_환경_설정

   '"프린트_환경_설정"이라는 프로시저 호출


    Worksheets(1).PrintPreview

   '해당 영역을 인쇄 미리보기함


End Sub


Sub 프린트_환경_설정()


' 해당 시스템의 OS및 프린트에 따라 다르므로 재설정 필요


    'Application.PrintCommunication = False

    With ActiveSheet.PageSetup

        .PrintTitleRows = ""

        .PrintTitleColumns = ""

    End With

    With ActiveSheet.PageSetup

        .LeftHeader = ""

        .CenterHeader = ""

        .RightHeader = ""

        .LeftFooter = ""

        .CenterFooter = ""

        .RightFooter = ""

        .LeftMargin = Application.InchesToPoints(0)

        .RightMargin = Application.InchesToPoints(0)

        .TopMargin = Application.InchesToPoints(0)

        .BottomMargin = Application.InchesToPoints(0)

        .HeaderMargin = Application.InchesToPoints(0)

        .FooterMargin = Application.InchesToPoints(0)

        .PrintHeadings = False

        .PrintGridlines = False

        .PrintComments = xlPrintSheetEnd

        .PrintQuality = 600

        .CenterHorizontally = True

        .CenterVertically = True

        .Orientation = xlPortrait

        .Draft = False

        .PaperSize = xlPaperA4

        .FirstPageNumber = xlAutomatic

        .Order = xlDownThenOver

        .BlackAndWhite = False

        .Zoom = False

        .FitToPagesWide = 1

        .FitToPagesTall = 1

        .PrintErrors = xlPrintErrorsDisplayed

        .OddAndEvenPagesHeaderFooter = False

        .DifferentFirstPageHeaderFooter = False

        .ScaleWithDocHeaderFooter = True

        .AlignMarginsHeaderFooter = True

        .EvenPage.LeftHeader.Text = ""

        .EvenPage.CenterHeader.Text = ""

        .EvenPage.RightHeader.Text = ""

        .EvenPage.LeftFooter.Text = ""

        .EvenPage.CenterFooter.Text = ""

        .EvenPage.RightFooter.Text = ""

        .FirstPage.LeftHeader.Text = ""

        .FirstPage.CenterHeader.Text = ""

        .FirstPage.RightHeader.Text = ""

        .FirstPage.LeftFooter.Text = ""

        .FirstPage.CenterFooter.Text = ""

        .FirstPage.RightFooter.Text = ""

    End With

    'Application.PrintCommunication = True


End Sub