매일 보고서를 얻습니다.이 보고서에는 약 8500 개의 행이 있습니다. 수동으로 수행 한 작업을 수행하는 매크로를 만들려고했습니다. 보고서의 문제는 모든 행이 동일한 형식이 아니라는 것입니다 (즉, 행 1 : 숫자, 텍스트, 텍스트, 숫자 및 행 2 : 텍스트, 숫자, 숫자, 텍스트).두 파일을 비교하여 다른 행을 출력합니다.
새 파일을 이전 파일과 비교하여 새로운 차이점을 출력하고 싶습니다. 나는 2 개의 파일을 통해 실행하는 매크로를 얻을 수 있지만 그것은 다른 라인으로 플래그를 지정하지 않습니다.
어제 파일 :
10001,April,Apple
10002,Book,Bush
10004,Dog,Days
10006,Free,Food
10008,Happy,Help
10009,Ikky,Icing
10010,Jamming,Jupiter
오늘 파일 :
10001,April,Apple
10002,Book,Bush
10003,Cat,Cattle
10004,Dog,Days
10005,Echo,Eggg
10006,Free,Food
10007,Good,Game
10008,Happy,Help
10009,Ikky,Icing
10010,Jamming,Jupiter
참고 :
Sub test()
Dim yesterdayFile As String
Dim todayFile As String
yesterdayFile = Application.GetOpenFilename()
todayFile = Application.GetOpenFilename()
Dim yesterdayLine As String
Dim todayLine As String
Dim txt As String
Dim i, j, k, sameLine As Integer
Dim wkbTemp As Workbook
i = 1
j = 1
k = 1
sameLine = 0
Open yesterdayFile For Input As #1
Do Until EOF(1)
sameLine = 1 'reset write operator
Open todayFile For Input As #2
Line Input #1, yesterdayLine
Do Until EOF(2)
Line Input #2, todayLine
If StrComp(yesterdayLine, todayLine) = 0 Then 'compare lines in files if same then flag write operator to 1
sameLine = 1
End If
j = j + 1 'inner loop counter
Loop
If sameLine = 0 Then 'if write operator is not active then output line
Cells(i, 1) = yesterdayLine
i = i + 1 'counter for cells
End If
Close #2
k = k + 1 'outer loop counter
Loop
'test line to see if its eof
Cells(1, 10) = i
Cells(2, 10) = j
Cells(3, 10) = k
Close #1
End Sub
테스트 파일을 빠르게 테스트를 실행하기 위해 사용중인 실제 데이터에서 더이 '고유 ID 필드'
카운터가 올바른 숫자로 끝나기 때문에 재귀를 통해 실행되는 것으로 알고 있습니다.
EDIT : 다른 언어에서도 쉽게 수행 할 수 있지만 업무용 터미널에서 엑셀 vba에만 액세스 할 수 있으며 네트워크에서 파일을 가져올 수 없습니다. .
정확한 세포는 달라야합니까? 또는 한 줄의 순서가 다르지만 그 값이 같으면 괜찮습니까? – danieltakeshi
직접 셀이 아닌 파일에서 입력 행을 테스트하고 있습니다. CSV 파일이므로 전체 행이 "텍스트"로 나열됩니다. "숫자"| "숫자"| "본문". 구분은 실제로 출력 할 줄을 결정할 때 문제가됩니다. – Nealin
[array] (https://stackoverflow.com/questions/34563525/improving-the-performance-of-for-loop/34564306#34564306)로 작업하고 다차원 배열을 모두 일치시켜야한다고 생각합니다. 또는 셀에 csv 데이터를 입력하고 스프레드 시트에서 일치시킬 수 있습니다. [방법의 성능] (https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/) – danieltakeshi