質問: Z1 + 1 End If Loop 配列変数を組んで入れていけば何とかなるのではないかと思いながら、 組むことができず、取り急ぎで組んだものです。 比較データをどう使うか ----------- 差異のあるデータ・片方にしか存在しないデータを元に、ここには登場しない別のcsvファイルを点検修正する予定です。 教えていただきたい事 ---------- ・データの数的にマクロで比較する事が現実的かどうか。 (そもそも上記マクロがひどい内容だという事は重々承知しておりますが、書き直す時間なかなか取れず、件数の少ない別のcsvファイル間で処理ができ、最後に残ったこの大きなファイルに困っております。) ・Excel以外で同様の処理を行う方法はありますでしょうか? 以上となります。どなたかお知恵を拝借できないでしょうか?
回答: > > ・データの数的にマクロで比較する事が現実的かどうか。 > > (そもそも上記マクロがひどい内容だという事は重々承知しておりますが、書き直す時間なかなか取れず、件数の少ない別のcsvファイル間で処理ができ、最後に残ったこの大きなファイルに困っております。) > > > 難しくはないと思うのですが件数が多い&条件が複数ある(というか多すぎる)ので時間がかかるのは仕方ないように思えます。 条件はすべてAndのようですので条件部分を書き直すといくらか時間が短縮される&処理が軽くなるかもしれません。 ちなみに私なら比較元が空白である事を確認したら全処理を止める記述のあとに 以下のように先に全セルが一致するか判定し、その判定結果をさらに判定するようにします。 ``` Dim i As Long Dim j As Long i = 1 j = 110 Dim flg As Boolean flg = True ' すべて同じなのか先に判定してしまう。 Do While flg '比較元を左、比較先を右とする。 If Cells(X, Y + i) = Cells(Z1, Y + j) Then ' 比較元と比較先が同じ場合 ' 隣の列に移動 i = i + 1 j = j + 1 'iが109になった場合は処理を抜ける If i = 109 Then Exit Do End If Else ' 比較元と比較先が同じではない場合 flg = False End If Loop ``` flgがfalseになった場合は全セルが一致しなかった、ということになります。 たくさん書いたIf文の条件はこのflgに置き換えれば良いと思います。 > > ・Excel以外で同様の処理を行う方法はありますでしょうか? > > > 差分を比較するツール(例えばWinMergeとか)を使えば差分の確認だけならできます。