본문 바로가기
카테고리 없음

vb2

by 팁텍북 2024. 7. 5.

엑셀 VBA로 파일을 열지 않고 데이터를 처리
Sub CombineExcelFiles()
    Dim folderPath As String
    Dim fileName As String
    Dim newWorkbook As Workbook
    Dim newWorksheet As Worksheet
    Dim lastRow As Long
    Dim dataRange As Range
    Dim dataArray() As Variant
    Dim conn As Object
    Dim rs As Object
    Dim sql As String

    ' 폴더 경로 설정
    folderPath = "c:/abc/"

    ' 새 워크북 생성
    Set newWorkbook = Workbooks.Add
    Set newWorksheet = newWorkbook.Sheets(1)
    newWorksheet.Name = "탬플릿"

    ' ADO 객체 생성
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    ' 폴더 내의 모든 파일을 처리
    fileName = Dir(folderPath & "*.xlsx")
    Do While fileName <> ""
        ' 파일 경로
        Dim filePath As String
        filePath = folderPath & fileName

        ' SQL 쿼리 작성 (3행부터 마지막 행까지)
        sql = "SELECT * FROM [탬플릿$A3:Z10000]" ' 필요한 범위로 조정

        ' ADO 연결 설정
        conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, conn

        ' 데이터가 있을 때만 처리
        If Not rs.EOF Then
            dataArray = rs.GetRows ' 데이터를 배열에 저장
            lastRow = newWorksheet.Cells(newWorksheet.Rows.Count, "A").End(xlUp).Row + 1
            newWorksheet.Cells(lastRow, 1).Resize(UBound(dataArray, 2) + 1, UBound(dataArray, 1) + 1).Value = WorksheetFunction.Transpose(dataArray)
        End If

        ' 연결 닫기
        rs.Close
        conn.Close

        ' 다음 파일로 이동
        fileName = Dir
    Loop

    ' ADO 객체 해제
    Set rs = Nothing
    Set conn = Nothing

    ' 새 파일 저장
    newWorkbook.SaveAs folderPath & "CombinedData.xlsx"
    newWorkbook.Close
End Sub

댓글