ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Excel.Application] #1 기초적이지만 가장 중요한 명령어
    오토핫키/Excel.Application 2023. 6. 2. 00:19

    시작에 앞서

    vba 가 있는데 왜 굳이 오토핫키를 사용해야 하지?

    vba 보다 쉽습니다. 그리고 xls xlsm xlsb xlam 과 같은 특정 형식 실행을 막는 보안을 가진 환경에서도 vba 를 사용할 수 있습니다.

    또한 vba 에서 지원하지 않거나 사용하는 것이 번거로운 동작들도 오토핫키에서는 손쉽게 구현할 수 있기 때문에 엑셀 제어 외에 추가적인 기능들을 같이 구현하기에 용이하죠.

     


    기초 그러나 필수 명령어

     

    엑셀에 연동

    xl := ComObjCreate("Excel.Application")

    엑셀과 통신하기 위해서는 Object 를 호출해야 합니다.

    이것으로 'xl' 이라는 변수에 개체를 지정합니다.

    그대로 읽으면 "엑스엘" 이기 때문에 보기좋군요.

     

     

    새 통합 문서 만들기

    xl.WorkBooks.Add

    이걸로 새로운 통합 문서를 만들 수 있습니다.

     

     

    파일 실행하기

    Directory := "C:\My_Data.xlsx"
    xl.WorkBooks.Open(Directory, 3, 0)

    실행을 위해서는 경로를 설정해줘야겠죠.

    경로를 Open 에 파라미터 값에 직접 넣어도 좋고 변수에 담은 후 넣어도 좋습니다.

    3, 0 을 통해 값 업데이트, 읽기 전용 과 같은 알림창이 뜨지 않도록 합니다.

     

     

    파일 종료하기

    Save := 1
    xl.ActiveWorkBook.Close(Save)

    1일 경우 저장 후 종료

    0일 경우 저장하지 않고 종료합니다.

     

     

    Object 통신 완전한 종료

    xl.Quit

    해당 작업을 하지 않을 경우 EXCEL.EXE 가 20MB 정도의 메모리를 계속 잡아먹으므로 다 사용한 후에는 반드시 종료를 해줘야 합니다.

     

     

    실행되어 가장 상단에 위치한 엑셀 파일 통신

    xl := ComObjActive("Excel.Application")

    Create 와 Active 의 차이입니다. 활성화 되어있는 것을 사용하느냐 혹은 새로 만드느냐 겠죠.

    이미 활성화 되어있으니 실행 명령어를 사용하면 오류를 뱉겠죠

     

     

    특정 시트 선택

    xl.Sheets("Table").Select ; "Table" Sheet 선택하기
    xl.Sheets(1).Select ; 해당 엑셀파일의 첫번째 시트 선택

    뭐 굳이 선택을 안해도 되긴 합니다. Select 없이 그냥 xl.Sheets("Table").어쩌구... 같이 사용해도 되죠 혹은

    t := xl.Sheets("Table")
    Data := t.Range("A1").Value

    와 같이 Table 시트에서 계속적인 통신을 할 거라면 이렇게 특정 변수에 지정을 해준 후 사용해도 됩니다.

    이해가 안된다면 그냥 Sheets("Table") 을 계속 붙여서 사용합시다.

     

     

    활성화 된 시트에서 셀 선택

    xl.ActiveSheet.Range("A1").Select ;활성화된 시트의 A1 선택하기
    xl.ActiveSheet.Range("A1:C5").Select ; A1:C5 범위 선택하기

    앞에서 Sheet 를 Select 해줬다면 ActiveSheet 를 사용해도 됩니다.

    동시에 Range 를 통해 특정 주소의 셀을 선택할 수도 있습니다. 물론 범위도 가능합니다.

     

     

    셀 선택

    xl.Cells(3, 1).Select ; A3셀 선택하기

    Cells 에 들어가는 숫자는

    이런식으로 Row 를 먼저 지정 후 Column 을 지정합니다.

    Cells(3, 1) 은 Range("A3") 과 같습니다.

     

    Cells 를 사용하는 이유는 Column 의 위치를 특정하기 위해서입니다. 알파벳으로 지정하면 나중에 AA BZT 에 위치한 셀들을 계산으로 특정해내기가 어렵겠죠.

     

    물론! Range 와 Cells 의 조합으로 Cells 로도 범위를 잡을 수 있긴 합니다.

    r1 := xl.Cells(1,1).Address
    r2 := xl.Cells(5,5).Address
    xl.Range(r1 ":" r2).Select

    여기서 Address 는 해당 셀 혹은 범위의 주소를 알려줍니다. $A$1 같이요.

    그래서 Range 쪽을 계산해서 보면 xl.Range(A1:E5) 가 됩니다.

     

    한줄로 쓰고 싶다면

    xl.Range(xl.Cells(1,1).Address ":" xl.Cells(5,5).Address).Select

    가독성이 떨어지기 때문에 추천하지는 않습니다.

     

     

    셀에 값 입력

    xl.Cells(3, 1).Formula := 123 ; A3셀 에 123 값 입력
    xl.Cells(3, 1).Value := 123 ; A3셀 에 123 값 입력 (빠른 자료처리 시 오류 뱉음)

    Formula 와 Value 두 가지 방식으로 값을 입력할 수 있습니다.

    Formula 는 주변서식에 맞춰 값을 넣고 Value 는 그냥 넣습니다.

     

     

    복사/붙여넣기

    xl.Cells(3, 1).Copy ; A3셀 복사
    xl.Cells(5, 1).PasteSpecial ; A5셀에 붙여넣기
    xl.Application.CutCopyMode := 0 ; 복사 상태를 off 함 / 1이거나 쓰지않으면 복사 상태를 on 으로 유지함

    CutCopyMode 는

    복사를 할 경우 생기는 해당 테두리에 대한 내용입니다.

     

     

    값 읽기

    Var := xl.Range("A3").Value

    Var 변수에 A3 셀 값을 변수로 저장합니다. 가장 많이 쓰는 명령어 중에 하나입니다.

    개인적으로는 지속적으로 관리가 되는 엑셀 파일에서 원하는 데이터만 추출할 때 자주 사용합니다.

    댓글