質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

受付中

2つのデータ(csvファイル)を比較し差異がある行のみを確認するには

NextSt
NextSt

総合スコア13

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

5回答

1評価

3クリップ

17311閲覧

投稿2019/02/27 10:30

編集2022/01/12 10:55

##現状
2つのcsvファイルを比較し、差異のある行を確認したいと考えており、
excelのマクロで比較処理をかけてみましたが、
1時間たっても終わらず、今現在も処理中です。
※これを書いている間に、 応答なしでExcelがフリーズしておりました。

##ファイル内部の状態
・1列目から100列目まで比較元のデータが入っている。
・101列目から201列目まで比較先のデータが入っている。
・データは比較先・比較元各々で約170000行存在します。
・各セルのデータは日付・最大8桁の数値・任意の文字列、空のセルと複数存在する。

##マクロ内容
Option Explicit
Sub 2019_cros()

Dim X As Long
Dim Y As Long
Dim Z1 As Long

Application.ScreenUpdating = False

X = 2
Y = 1
Z1 = 2

Do Until Cells(X, Y) = "" '比較元が空白である事を確認したら全処理を止める
'比較元を左、比較先を右とする。
If Cells(X, Y + 1) = Cells(Z1, Y + 110) And Cells(X, Y + 2) = Cells(Z1, Y + 111) And Cells(X, Y + 3) = Cells(Z1, Y + 112) And Cells(X, Y + 4) = Cells(Z1, Y + 113) And Cells(X, Y + 5) = Cells(Z1, Y + 114) And Cells(X, Y + 6) = Cells(Z1, Y + 115) And _
Cells(X, Y + 7) = Cells(Z1, Y + 116) And Cells(X, Y + 8) = Cells(Z1, Y + 117) And Cells(X, Y + 9) = Cells(Z1, Y + 118) And Cells(X, Y + 10) = Cells(Z1, Y + 119) And Cells(X, Y + 11) = Cells(Z1, Y + 120) And Cells(X, Y + 12) = Cells(Z1, Y + 121) And _
Cells(X, Y + 13) = Cells(Z1, Y + 122) And Cells(X, Y + 14) = Cells(Z1, Y + 123) And Cells(X, Y + 15) = Cells(Z1, Y + 124) And Cells(X, Y + 16) = Cells(Z1, Y + 125) And Cells(X, Y + 17) = Cells(Z1, Y + 126) And Cells(X, Y + 18) = Cells(Z1, Y + 127) And _
Cells(X, Y + 19) = Cells(Z1, Y + 128) And Cells(X, Y + 20) = Cells(Z1, Y + 129) And Cells(X, Y + 21) = Cells(Z1, Y + 130) And Cells(X, Y + 22) = Cells(Z1, Y + 131) And Cells(X, Y + 23) = Cells(Z1, Y + 132) And Cells(X, Y + 24) = Cells(Z1, Y + 133) And _
Cells(X, Y + 25) = Cells(Z1, Y + 134) And Cells(X, Y + 26) = Cells(Z1, Y + 135) And Cells(X, Y + 27) = Cells(Z1, Y + 136) And Cells(X, Y + 28) = Cells(Z1, Y + 137) And Cells(X, Y + 29) = Cells(Z1, Y + 138) And Cells(X, Y + 30) = Cells(Z1, Y + 139) And _
Cells(X, Y + 31) = Cells(Z1, Y + 140) And Cells(X, Y + 32) = Cells(Z1, Y + 141) And Cells(X, Y + 33) = Cells(Z1, Y + 142) And Cells(X, Y + 34) = Cells(Z1, Y + 143) And Cells(X, Y + 35) = Cells(Z1, Y + 144) And Cells(X, Y + 36) = Cells(Z1, Y + 145) And _
Cells(X, Y + 37) = Cells(Z1, Y + 146) And Cells(X, Y + 38) = Cells(Z1, Y + 147) And Cells(X, Y + 39) = Cells(Z1, Y + 148) And Cells(X, Y + 40) = Cells(Z1, Y + 149) And Cells(X, Y + 41) = Cells(Z1, Y + 150) And Cells(X, Y + 42) = Cells(Z1, Y + 151) And _
Cells(X, Y + 43) = Cells(Z1, Y + 152) And Cells(X, Y + 44) = Cells(Z1, Y + 153) And Cells(X, Y + 45) = Cells(Z1, Y + 154) And Cells(X, Y + 46) = Cells(Z1, Y + 155) And Cells(X, Y + 47) = Cells(Z1, Y + 156) And Cells(X, Y + 48) = Cells(Z1, Y + 157) And _
Cells(X, Y + 49) = Cells(Z1, Y + 158) And Cells(X, Y + 50) = Cells(Z1, Y + 159) And Cells(X, Y + 51) = Cells(Z1, Y + 160) And Cells(X, Y + 52) = Cells(Z1, Y + 161) And Cells(X, Y + 53) = Cells(Z1, Y + 162) And Cells(X, Y + 54) = Cells(Z1, Y + 163) And _
Cells(X, Y + 55) = Cells(Z1, Y + 164) And Cells(X, Y + 56) = Cells(Z1, Y + 165) And Cells(X, Y + 57) = Cells(Z1, Y + 166) And Cells(X, Y + 58) = Cells(Z1, Y + 167) And Cells(X, Y + 59) = Cells(Z1, Y + 168) And Cells(X, Y + 60) = Cells(Z1, Y + 169) And _
Cells(X, Y + 61) = Cells(Z1, Y + 170) And Cells(X, Y + 62) = Cells(Z1, Y + 171) And Cells(X, Y + 63) = Cells(Z1, Y + 172) And Cells(X, Y + 64) = Cells(Z1, Y + 173) And Cells(X, Y + 65) = Cells(Z1, Y + 174) And Cells(X, Y + 66) = Cells(Z1, Y + 175) And _
Cells(X, Y + 67) = Cells(Z1, Y + 176) And Cells(X, Y + 68) = Cells(Z1, Y + 177) And Cells(X, Y + 69) = Cells(Z1, Y + 178) And Cells(X, Y + 70) = Cells(Z1, Y + 179) And Cells(X, Y + 71) = Cells(Z1, Y + 180) And Cells(X, Y + 72) = Cells(Z1, Y + 181) And _
Cells(X, Y + 73) = Cells(Z1, Y + 182) And Cells(X, Y + 74) = Cells(Z1, Y + 183) And Cells(X, Y + 75) = Cells(Z1, Y + 184) And Cells(X, Y + 76) = Cells(Z1, Y + 185) And Cells(X, Y + 77) = Cells(Z1, Y + 186) And Cells(X, Y + 78) = Cells(Z1, Y + 187) And _
Cells(X, Y + 79) = Cells(Z1, Y + 188) And Cells(X, Y + 80) = Cells(Z1, Y + 189) And Cells(X, Y + 81) = Cells(Z1, Y + 190) And Cells(X, Y + 82) = Cells(Z1, Y + 191) And Cells(X, Y + 83) = Cells(Z1, Y + 192) And Cells(X, Y + 84) = Cells(Z1, Y + 193) And _
Cells(X, Y + 85) = Cells(Z1, Y + 194) And Cells(X, Y + 86) = Cells(Z1, Y + 195) And Cells(X, Y + 87) = Cells(Z1, Y + 196) And Cells(X, Y + 88) = Cells(Z1, Y + 197) And Cells(X, Y + 89) = Cells(Z1, Y + 198) And Cells(X, Y + 90) = Cells(Z1, Y + 199) And _
Cells(X, Y + 91) = Cells(Z1, Y + 200) And Cells(X, Y + 92) = Cells(Z1, Y + 201) And Cells(X, Y + 93) = Cells(Z1, Y + 202) And Cells(X, Y + 94) = Cells(Z1, Y + 203) And Cells(X, Y + 95) = Cells(Z1, Y + 204) And Cells(X, Y + 96) = Cells(Z1, Y + 205) And _
Cells(X, Y + 97) = Cells(Z1, Y + 206) And Cells(X, Y + 98) = Cells(Z1, Y + 207) And Cells(X, Y + 99) = Cells(Z1, Y + 208) And Cells(X, Y + 100) = Cells(Z1, Y + 209) And Cells(X, Y + 101) = Cells(Z1, Y + 210) And Cells(X, Y + 102) = Cells(Z1, Y + 211) And _
Cells(X, Y + 103) = Cells(Z1, Y + 212) And Cells(X, Y + 104) = Cells(Z1, Y + 213) And Cells(X, Y + 105) = Cells(Z1, Y + 214) And Cells(X, Y + 106) = Cells(Z1, Y + 215) And Cells(X, Y + 107) = Cells(Z1, Y + 216) And Cells(X, Y + 108) = Cells(Z1, Y + 217) Then

Range(Cells(X, Y), Cells(X, Y + 108)).Interior.ColorIndex = 45 Range(Cells(Z1, Y + 110), Cells(Z1, Y + 217)).Interior.ColorIndex = 42 '全セルが一致したので比較元にオレンジ、比較先に水色を塗る X = X + 1 Z1 = 2 ElseIf Cells(Z1, Y + 110) = "" Then X = X + 1 Z1 = 2 Else Z1 = Z1 + 1

End If
Loop

配列変数を組んで入れていけば何とかなるのではないかと思いながら、
組むことができず、取り急ぎで組んだものです。

##比較データをどう使うか
差異のあるデータ・片方にしか存在しないデータを元に、ここには登場しない別のcsvファイルを点検修正する予定です。

##教えていただきたい事
・データの数的にマクロで比較する事が現実的かどうか。
(そもそも上記マクロがひどい内容だという事は重々承知しておりますが、書き直す時間なかなか取れず、件数の少ない別のcsvファイル間で処理ができ、最後に残ったこの大きなファイルに困っております。)

・Excel以外で同様の処理を行う方法はありますでしょうか?

以上となります。どなたかお知恵を拝借できないでしょうか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Zuishin

2019/02/27 23:49

遅いとかいう話じゃなく、これ止まらないんじゃないですか? やりたいことを日本語で説明してください。 うまく動かないものを元にして作ったものは動かないものにしかなりません。
NextSt

2019/02/28 07:56

お返事ありがとうございます。 If Cells(X, Y + 1) = Cells(Z1, Y + 110) And~~~の部分がもっと少ない(比較データももっと少ない)ファイルだと、 10分程で処理が済んでおりまして、動く…はずと思い条件部分を加工したものになります。 「1~100列(比較元)と、101列~201列(比較先)で、比較元と比較先のデータを1行ずつ比較し、内容が一致したものに色を付ける」 これを目的に組んだつもりです。
Zuishin

2019/02/28 09:54

データによっては終了すると思いますが、データによっては無限ループになると思います。 だから「このデータでうまくいったから」というのは当てになりません。 途中 Z1 がいきなり 2 に戻っているところや、(2, 2) から評価を始めていたり、101 でなく 110 と比較しているところなど、不明なところがあります。
NextSt

2019/03/01 02:50

ありがとうございます。 仰られている内容を確認し比較データの構成部分に追記が必要だとわかりましたので、補足を致します。
NextSt

2019/03/01 03:11

追記というよりコード自体修正が必要ですね。 If Cells(X, Y + 1) = Cells(Z1, Y + 101)…に修正して後に続くものも値も修正します。 これだと全部対象なしになってしまう…。 逆に前のファイルがなんでうまく処理されてたのかわからなくなってきました。 ご指摘ありがとうございます、コードを編集してみます。
Zuishin

2019/03/01 03:23

コードに修正は必要でしょうが、どのみちそれが意図した通り動くかどうかはわからないわけですよね? これまでの回答が意図した動作になっているかどうかと、違っていれば数行のサンプルデータが必要ではないかと思います。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。