[[20160116133159]] 『重複データ削除の結果が毎回異なる』(りっくん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『重複データ削除の結果が毎回異なる』(りっくん)

はじめまして。

 エクセル2002ファイルからデータをエクセル2007に取り込み、
以下のようなコードで重複データの削除を行うと結果が毎回
異なります。
 テスト的に1回目に読み込んだデータが544行(最終行)で
同じデータを再度読み込んで1085行になったところで、この
重複データ削除処理を行うと、544行(最終行)に戻るはずが、
1回目のテストが716行(最終行)になり2回目のテストが
645行(最終行)、3回目のテストが771行(最終行)となりました。
 何が問題なのか、ご教授いただけないでしょうか?
宜しくお願いいたします。

Sub 重複データ削除()

Dim LastRow As Long

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(3, 1), Cells(LastRow, 19)).RemoveDuplicates Columns:= _
    Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19), Header:=xlYes

End Sub

< 使用 Excel:Excel2007、使用 OS:Windows8 >


データを読み込むところのコードも示していただくと、
再現テストが可能になると思います。

余談:
質問者さんは、きちんとColumns引数を指定されていますが、
Columns引数を指定しない場合には、
想定しない動き(重複判定しない)などがあり、
このメソッド自体に挙動の怪しい所はあるような気がします。

ですからその現象もあり得ると思いますが、
一応、再現できる方法を示していただくと、有益かと思います。

(γ) 2016/01/17(日) 08:43


返信ありがとうございます。

データの読み込みはユーザーフォームで以下のようなコードで行っています。
ご確認をお願い致します。

Private Sub Kihondosa_Click_Sub(ByVal Index As Integer)

    Dim nen As String
    Dim tuki As String
    Dim name As String
    Dim myfile As String
    Dim myfile1 As String
    Dim mysheet As String
    Dim mysheet1 As String
    Dim i As Long
    Dim j As Long
    Dim LastRow As Long
    Dim LastRow1 As Long
    Dim MaxRow As Long

    myfile = ActiveWorkbook.name
    mysheet = ActiveSheet.name

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row

    name = UserForm1.Controls("CommandButton" & Index).Caption

    nen = InputBox("平成何年ですか?数字を入力してください。")
    tuki = InputBox("何月ですか?数字を入力してください。")

    Workbooks.Open ThisWorkbook.Path & "\" & nen & "年" & tuki & "月(配車)" & name & ".xls"
    ActiveWorkbook.Worksheets("DBX").Activate
    myfile1 = ActiveWorkbook.name
    mysheet1 = ActiveSheet.name

    LastRow1 = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 4 To LastRow1
        For j = 1 To 19
            Workbooks(myfile).Worksheets(mysheet).Cells(i + LastRow - 3, j).Value = Workbooks(myfile1).Worksheets(mysheet1).Cells(i, j).Value
        Next j
    Next i

    Workbooks(myfile1).Close SaveChanges:=False
    Unload UserForm1
    Worksheets(mysheet).Activate

    MaxRow = Range("A4").End(xlDown).Row
    Worksheets(mysheet).Range(Cells(4, 1), Cells(MaxRow, 19)).Select
    Selection.Borders.LineStyle = xlContinuous

End Sub
Private Sub CommandButton1_Click()

    Call Kihondosa_Click_Sub(1)
End Sub
Private Sub CommandButton2_Click()
    Call Kihondosa_Click_Sub(2)
End Sub
Private Sub CommandButton3_Click()
    Call Kihondosa_Click_Sub(3)
End Sub
Private Sub CommandButton4_Click()
    Call Kihondosa_Click_Sub(4)
End Sub
Private Sub CommandButton5_Click()
    Call Kihondosa_Click_Sub(5)
End Sub
Private Sub CommandButton6_Click()
    Call Kihondosa_Click_Sub(6)
End Sub
Private Sub CommandButton7_Click()
    Call Kihondosa_Click_Sub(7)
End Sub
Private Sub CommandButton8_Click()
    Unload UserForm1
End Sub

(りっくん) 2016/01/18(月) 09:35


特に問題ないコードのようですが…?
データ読み込み中に、Excelをクリックする等により、アクティブなシートが変わっていたりしませんか?
(???) 2016/01/18(月) 10:50

 読み込み結果自体は毎回同じ結果になりますので、アクティブシートも変わって
いないと思います。ところが重複データ削除になると毎回結果が変わります。RemoveDuplicatesの挙動が安定しないのしょうか?これが使えれば、コードは
すっきりするし、処理も早いしベストなのですが・・・
(りっくん) 2016/01/18(月) 12:43

最初に書かれた重複除去のコードも、特に問題は…。
3行目が見出しで、データが4行目以降ですよね? データ数もせいぜい数千件ですし。

あとは、A列末尾をデータの終端としていますが、A列が空欄になってしまうような場合はありませんか?
(???) 2016/01/18(月) 12:55


はい、データが4行目以降です。A列には4行目以降、全ての行に年月日のデータが入っており、空欄はありません。逆に空白のセルが怪しいのかとも思い、空白セルのブランク化を行ってから、本処理を行いましたが、結局正しい結果は得られませんでした。
(りっくん) 2016/01/18(月) 14:07

データ結合までは毎回同じ、ということは、大丈夫と思いますけど、念のため指摘。

元データがオートフィルタで絞られている、とか、非表示、とかありませんか?
また、データのあるファイルが旧形式のxlsであり、互換モードで開かれている、とかは?

フィルタが原因であれば、取り込む前にフィルタを外せば良いのですが…。

    If AutoFilterMode = True Then
        AutoFilterMode = False
    End If
(???) 2016/01/18(月) 14:42

元データはオートフィルター使用無しで非表示部分もありません。ご指摘戴いた
互換モードがいけないのかもと思い、元データのあるファイルの拡張子をxlsから
xlsmにして試してみましたが、だめでした・・・
(りっくん) 2016/01/18(月) 16:52

 一度AdvancedFilterで別列に重複は無視する形で抽出してみては?
(seiya) 2016/01/18(月) 17:26

AdvancedFilterで別列に抽出してみましたがうまくいきませんでした。
空白セルがたくさんあるデータなので、うまくいかないのでしょうか?
(りっくん) 2016/01/20(水) 20:18

 空白あってもデータがしっかりしていれば正常に抽出できるはずです。
 どこかに実際のシートをアップしてもらった方が手っ取り早いと思いますが?
(seiya) 2016/01/20(水) 20:44

時間がとれませんでした。どうもです。
セルの書式に注目してみてはどうでしょうか。
値は同じでも書式が異なると重複と判定されないとか。
(γ) 2016/01/20(水) 20:53

こんにちは。

回答者の手元で確実におなじ現象が起こせるような
最低限のデータを提示されてはどうでしょう。

2列5行程度の小さなデータで十分です。
コードもそれに応じてすこし変更になりますね。
( 佳 ) 2016/01/21(木) 06:44


 同じ値なので重複削除されるべきものが、重複して登場している!!!

 ということなんですよね。

 その重複が残ったものを昇順なり降順なりで並び替えをすると、どこかに【同じ値】のセルが
 (たぶん連続して)存在するわけですよね。
 その状態で、シートのどこかに =一方のセル=他方のセル という数式をいれると True になりますか?Falseになりますか?

(β) 2016/01/21(木) 10:21


すみません。色々調べた結果、γさんのご指摘のとおり、データを読み込んだときに
セルの書式が変わっている場合があることが判明致しました(書式で数値になっている
ものが読み込んだときに標準になる)。なぜそうなるのかはよくわからないのですが、
読み込んだ後、再度書式設定し直して処理することに致します。たくさんの方から
ご指導戴きありがとうございました。
(りっくん) 2016/01/21(木) 20:36

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.