私は30Kを超えるデータ行を持つスプレッドシートを持っています。それぞれのデータポイントは38です。重複した行があるかどうかを判断するために、各行に14のフィールドを連結し、データをトリムしました。これにより、349文字からなる各行のキーが作成されました。Application.Match Error 2015
編集:キーの複製は、14個のフィールドがすべて同じ場合に発生します。視覚的な見直しから、私はすべての14のフィールドのデータがまったく同じである約200行(2000年のうち)を特定しました。
次に、application.matchを使用して検索を実行し、そのキーがすでに作成されているかどうかを確認しました。重複がなければ、application.match関数は正常に動作します。重複があった場合しかし、それは
エラー2015
を返す私は、関数が#VALUEを返しているとき、これがあることを理解しています。イミディエイトウィンドウを使用してチェックすると値が重複し、スプレッドシートに「= Xi = Yj」と入力すると同じ(つまりTRUE)と表示されます
正しいロー値を知る必要がありますプロジェクトの次の部分では、重複した値を特定し、正しい行の値を取得する手段があるかどうか疑問に思っていますか?次のように
私が持っているコードは(まだのみのPoC)です:
While Cells(a, 1) <> vbNullString
If Cells(a, 36).Interior.Color = 5296274 Then
ElseIf Cells(a, 36) <> vbNullString Then
Else
Cells(a, 39) = Trim(Cells(a, 3) & Cells(a, 4) & Cells(a, 5) & Cells(a, 6) & Cells(a, 7) & Cells(a, 8) & Cells(a, 9) & Cells(a, 10) & _
Cells(a, 11) & Cells(a, 12) & Cells(a, 13) & Cells(a, 14) & Cells(a, 15) & Cells(a, 16) & _
Cells(a, 17) & Cells(a, 18) & Cells(a, 19))
Cells(a, 44) = Len(Cells(a, 39))
m = vbNullString
m = Application.Match(Cells(a, 39), Range(Cells(2, 39), Cells(a - 1, 39)), 0)
If m = vbNullString Then
Cells(a, 39).Select
Selection.Style = "Good"
Else
' Range(Cells(a - 1, 39), Cells(a, 39)).Select
' Selection.Style = "Bad"
End If
End If
a = a + 1
Wend
あなたが最初の後に重複キーのみ出現のすべての場所を収集していますか?そして、範囲を完全に参照してください。または、それらをWithステートメントの中に置き、接頭辞に "。"を付けます。 – QHarr
ヒント: 'Cells(a、39)= Join(Application.Index(Cell、(r、3).Resize(、17).Value、0、0)、"; ") – JohnyL
@QHarr - わからない質問の第2部分に従ってください。最初のものは、次のものがユニークでないものに変更された場合は最初のものを変更することを含め、それぞれの場所を知る必要があります。 – Clauric