엑셀 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
카테고리 없음
댓글