지난번 주신 자료를 응용하려고 수정한 코드입니다.
아래에서 처리할 파일이름에 따라
Select Case 문을 사용하여 Do ~ Loop 의 내용만 수정하여 사용하면 어떨까요?
파일명은 코드중 빨간색 부분에 사용한 이름과 같습니다.(150거래처 각기 다름)
감사합니다.
Sub 도매자료취합()
Dim i As Long
Dim k As Long
Dim strFile As String, PS As String
Dim VarData() As Variant
Dim strPath As String
PS = Application.PathSeparator
strPath = ThisWorkbook.Path & PS & "자료" & PS
strFile = Dir(strPath & "*.xls*")
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Do While strFile <> ""
Workbooks.Open strPath & strFile
With ActiveWorkbook.ActiveSheet
k = Application.WorksheetFunction.CountA(.Range("a4:a9999"))
ReDim Preserve VarData(k, 9)
For i = 0 To k - 1
VarData(i, 0) = ("지오영")
VarData(i, 1) = .Range("a4").Offset(i)
VarData(i, 2) = .Range("d4").Offset(i)
VarData(i, 3) = .Range("d4").Offset(i)
VarData(i, 4) = .Range("e4").Offset(i)
VarData(i, 5) = .Range("c4").Offset(i)
VarData(i, 6) = .Range("g4").Offset(i)
VarData(i, 7) = .Range("h4").Offset(i)
VarData(i, 8) = .Range("f4").Offset(i)
Next i
End With
ActiveWorkbook.Close
Sheet1.Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(k, 9).Value = VarData
k = 0
Erase VarData
strFile = Dir
Loop
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
첫댓글 안녕하세요? [ITX청춘]님...
데이터를 모으면서 첫번째 담당자 이름을 나타내고 싶으신건가요?
그리고 그 담당자 이름은 파일명이 그렇게 되어 있는듯 한데 맞나요?
만약 제 생각이 맞다면
VarData(i, 0) = ("지오영") 부분을
VarData(i, 0) = Left(strFile, Len(strFile) - 5)
로 수정해 보세요...
파일명 확장자가 4자(xlsx 또는 xlsm) 라고 가정한 코드입니다.
그럼 잘 해결되시길... ^^*
지오영은 담당자명이 아니고 처리할 파일명과 동일한 거래처명입니다.
150개 거래처의 data를 수집하면서 자료형식이 모두 제각각이기 때문에
거래처마다 취합하는 필드위치가 달라서요.
처리할 거래처마다 읽은 거래처명과 비교하여 각각 실행하는 부분을 달리하고 싶습니다.
참으로 골치아픈일을 하시는군요... ^^
가장 좋은 방법은 거래처에 내가 만든 정형화된 양식을 주고 거기에 데이터를 입력하도록 하는 것입니다.
자료 형식이 모두 제각각이라면 하드코딩을 해야 할듯 한데...
이는 자료를 좀 보고 말씀드려야 할듯 합니다.
하지만 150개 모두 다르거나 문제가 심각(?) 하다면 무식(?)한 코딩밖엔 답이 없을듯 합니다... ㅡ.ㅜ
무식한 코딩은 제가 하려구요.
매월 더 무식한 방법으로 했었거든요.
정형화된 형식의 파일을 제공하지 않는 거래처를 설득할 수가 없어요.
처리할 파일명, 그리고 그 파일명에 따라 처리를 분기할 위치만 가르쳐주세요. 죄송 ㅠㅠ
나머지 코딩은 무식하게 해야할것 같아요.
이미 답을 알고 계신듯 한데...
Select case 문을 이용하시면 될듯 합니다.
암튼 자료를 보고 좀더 효율적인 방법을 찾아야 할듯 합니다... ^^
바쁘신데 죄송하기도 하고 감사합니다.
계속 고민하고 여러가지 방법으로 테스트 하고 있습니다.
오늘도 즐거운 하루 보내세요.