- ベストアンサー
エクセル重複チェックでデータ追記方法について
- 「Sheet5」のデータを「Sheet6」に重複チェックをしながら追記する方法について教えてください。
- 重複チェックは請求先コードと日付の2つで行いたいのですが、日付のデータ型を「Date」にしてどう記述すればよいか分かりません。
- また、請求先コードによる重複チェック後、データを昇順で並び替えたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Dictionaryオブジェクトで重複チェックをしながら追記しました。 Sub sample() Dim dic As Object Dim r6 As Long Dim r5 As Long Dim key As String 'Sheet6のデータを取得 Set dic = CreateObject("Scripting.Dictionary") r6 = 2 'Sheet6の注目行の初期値 Do While Sheets("Sheet6").Cells(r6, "A").Value <> "" key = Sheets("Sheet6").Cells(r6, "A").Value & vbCrLf & Sheets("Sheet6").Cells(r6, "C").Value If Not dic.Exists(key) Then dic.Add key, 1 End If r6 = r6 + 1 Loop 'Sheet5のデータをチェックしながらSheet5に追加 r5 = 2 'Sheet5の注目行の初期値 Do While Sheets("Sheet5").Cells(r5, "A").Value <> "" key = Sheets("Sheet5").Cells(r5, "A").Value & vbCrLf & Sheets("Sheet5").Cells(r5, "C").Value If Not dic.Exists(key) Then dic.Add key, 1 Sheets("Sheet6").Cells(r6, "A").Resize(1, 3).Value = Sheets("Sheet5").Cells(r5, "A").Resize(1, 3).Value r6 = r6 + 1 End If r5 = r5 + 1 Loop 'Sheet6を並び替えるなら Sheets("Sheet6").Columns("A:C").Sort Key1:=Sheets("Sheet6").Range("A2"), Order1:=xlAscending, Key2:=Sheets("Sheet6").Range("C2"), Order2:=xlAscending, Header:=xlYes End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
表題にはVBAの質問である旨明記されたい。 自分のコードを読ませるのも良いが、プログラムのロジック(とは下記(1)以下のような大筋の処理法)そのものを、考える必要がある。コードより前の重要な段階の課題のはず。これによってコードが簡単にも複雑にもなり、デバッグの難易を左右する。これは経験や長時間施行後のひらめきが必要。 エクセルなど、データベースでないソフトでは(A列)AND(C列)で今考えているデータ(会社+日付)のペアで同じものが存在するかどうかは、一遍に検出しにくい。 (1)2項目を結合したデータを新しい列に作る。文字列の方が良かろう。 その際項目内で有効文字桁数が違う場合があるので各項目で、定桁性にして作るべき場合が多い。 例えばすべての場合で会社は10桁(株式会社 東西商事△)+日付は10桁(例 2011/03/02) もちろん表現は統一する必要は在る。(株)と株式会社ではバラバラ、日付で西暦と和暦などバラバラは論外) (2)前もってプログラムの配列にデータに存在する会社+日付の組み合わせを作る(エクセルのセルも1種もメモリの利用なので(1)と似ている)それをチェックのとき索引する。 (3)ソート法 データをソートするとその組み合わせは近隣にまとまる。 そのまとまりの中以外には存在しないことが断言できるので、2つを1つづつチェックできる。 会社+日付でソートする。 同一会社の(最初のデータ行は会社のFindメソッドで検出できる)塊をみて、その塊の中にその日付があるかチェックすれば良い。 ソートはシステムの処理に乗っかるので、ユーザーの未熟なコードミスが避けられる。 むしろプログラムの中に含めづ、手操作で準備作業にしてしまうことが出来る。
お礼
imogasi 様 回答をありがとうございます。 ネットでサンプルコードを組み合わせながら作成していました。 大筋の処理法・経験や長時間施行後・定桁性など基本的なアドバイスを細かく書いて頂きありがとうございます。 重複チェックをしながら追記は完成しました。 まだ、システムは未完成ですが、調べながら頑張ります。 ありがとうございました。
お礼
fumufumu_2006 様、 わざわざプログラムを作成して頂き、ありがとうございます。 2つのキーを基準にしての重複チェックは完成しました。 処理も早くて驚きました。 ネットでサンプルを見ながら作成していました。 まだ、システムは完成していませんが、調べながら構築していきます。 ありがとうございました。