毎日レポートを取得して約8500行になります。手動でやっていることを行うマクロを作成しようとしています。レポートの問題は、すべての行が同じ形式ではないことです(行1:数値、テキスト、テキスト、数値、行2:テキスト、数値、数値、テキスト)。2つのファイルを比較して異なる行を出力します
新しいファイルと古いファイルを比較し、新しい違いを出力したいと考えています。私は2つのファイルを実行するマクロを取得することができますが、それは異なるとして任意の行のフラグを立てていませんが、私は彼らが知っている。より高速なテストを実行するために使用されている
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
テストファイル:
昨日のファイル:
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
注:実際のデータではありませんがあります「一意のIDフィールド」
カウンタが正しい番号で終了するので、再帰を実行することがわかります
EDIT:これは他の言語でも簡単に行うことができますが、私のワークターミナルからExcel vbaにしかアクセスできず、ネットワークからファイルを取得できません。
正確なセルは異なる必要がありますか?または、行の順序が異なるが、値が同じであればOKですか? – danieltakeshi
入力行を直接セルではなくファイルからテストしています。CSVファイルなので、行全体が「テキスト」としてリストされます。 "number" | "number" | "テキスト"。デリミタリングは、私が実際に出力するラインを得ることができるときに取り組むべき問題です。 – Nealin
私はあなたが[配列](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