だから私はたくさんのことをするためにマクロを作っています。 1つは、sheet2からsheet1のセルの重複を見つけることです。シート1のcolumnAを指定して、sheet2のcolumnBの値をcolumna sheet1の値のいずれかに一致させます。
重複の削除があることはわかっていますが、削除せずにマークを付けたいだけです。
フィルタリングについて何か考えていました。フィルターするときに複数の基準を選択できることを知っているので、20の異なる値を持つ列がある場合、フィルターで5つの値を選択でき、特定の列にそれらの5つの値を持つ行が表示されます。だから私はそのマクロを記録し、コードをチェックアウトしました、そしてそれが文字列配列を使用していることがわかります。検索する各値は文字列配列にあります。列全体を指定してすべての値を文字列配列に追加する方法はありますか?
前もって感謝します
アイテムを配列にロードするには、3つの方法があります。最初の方法ははるかに高速ですが、すべてを列に格納するだけです。ただし、オートフィルターに渡すことができない多次元配列を作成するため、これには注意する必要があります。
方法1:
Sub LoadArray()
Dim strArray As Variant
Dim TotalRows As Long
TotalRows = Rows(Rows.Count).End(xlUp).Row
strArray = Range(Cells(1, 1), Cells(TotalRows, 1)).Value
MsgBox "Loaded " & UBound(strArray) & " items!"
End Sub
方法2:
Sub LoadArray2()
Dim strArray() As String
Dim TotalRows As Long
Dim i As Long
TotalRows = Rows(Rows.Count).End(xlUp).Row
ReDim strArray(1 To TotalRows)
For i = 1 To TotalRows
strArray(i) = Cells(i, 1).Value
Next
MsgBox "Loaded " & UBound(strArray) & " items!"
End Sub
事前に値がわかっていて、それらを変数にリストしたい場合は、Array()を使用してバリアントを割り当てることができます
Sub LoadArray3()
Dim strArray As Variant
strArray = Array("Value1", "Value2", "Value3", "Value4")
MsgBox "Loaded " & UBound(strArray) + 1 & " items!"
End Sub
他の誰かがこの問題を抱えるかどうかわからないので、私が見つけた答えを投稿すると思いました。 @Ripsterによって投稿された配列のソリューションは気に入っています(そのおかげで、ほぼ機能しました)が、この場合は実際には機能しません。私が扱っているのは、ID列が1つある大きなデータシートです。他のシートをチェックして、そのシートに重複がないかどうかを確認します(ID列を使用)。削除せずにマークを付けて、チェックアウトできるようにします。 5万行を超える可能性のある行では、各行をループするのに長い時間がかかります。
したがって、私ができることは、ID列を他のシートからメインシートにコピーし、条件付き書式オプションを使用して重複をいくつかの色でマークすることです。 (両方の列の行をマークします)次に、列を色でフィルターして、重複をマークするために使用した色のみを表示できます。行番号でチェックしているシートに列をプログラムで追加する場合、メインシートにその列を含めることもできるので、色でフィルターをかけると、シートにどの行があったかを確認できます。
それを行った後、プログラミングをあまり行っていない同僚のために、マクロを記録してこれを自動的に調整することができます
どうもありがとうございました!
比較する列を選択した後、重複を赤いテキストで塗りつぶしなしでマークするコードは次のとおりです。 - Selection.FormatConditions.AddUniqueValues Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority Selection.FormatConditions(1).DupeUnique = xlDuplicate With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False
そして、両方の列に重複がマークされているので、実際に調べたい列を選択し、フィルタリングするコードをここに配置します。
_`Selection.AutoFilter
ActiveSheet.Range("$C$1:$C$12").AutoFilter Field:=1, Criteria1:=RGB(156, 0 _
, 6), Operator:=xlFilterFontColor`
_
(私のテストでは、フィルターする列として列cを使用しました。これは、cells()
参照またはrange(cells(), cells())
並べ替え参照を使用してプログラムで実行できます
皆様の今後のご活躍をお祈り申し上げます。もう一度@ripsterに感謝