「For Each〜Next」と「Find」メソッドを使った方法
●詳細●
サンプルでは、A列のデータから、重複データを取り除いた結果をB列に抽出します。
「重複データのチェックをしよう<パターン1>」と同じ結果を得るのですが、今回は、
「ForEach〜Next」と「Find」メソッドを使います。
<パターン1>では、A列の全データ数を取得して処理の繰り返し回数をセットしてい
ましたが、「ForEach〜Next」を使うと対象のオブジェクトの”数”を意識
せずに、A列の1件目のデータから最後のデータのまでのセル範囲に対して、処理を繰
り返すとができます。その中で、「Find」メソッドを使って重複チェックの処理を
します。
「Find」メソッドでB列に同じデータが検索されなかった場合は、A列の内容をB
列の最後にセットし、A列の次のデータをチェックします。
同じデータがあった場合は、「For Each〜Next」を抜けて、A列の次のデー
タをチェックします。
A列のセル範囲のチェックが終了したら、メッセージボックスで「総件数中何件が重複
していて、何件が抽出された」かを表示します。
●準備●
* 1枚目のシートのA列に何件かデータを入力し、重複データも用意してください。
●サンプル●
Sub Sample()
Dim ChkRange As Range
Dim ALastPos As String
Dim BLastPos As String
Dim Answer As Variant
Dim SetPos As Integer
'<結果を表示するB列を空にします。>
Columns("B:B").ClearContents
'<結果(B列)をセットする行位置取得用変数を初期化します。>
SetPos = 0
'<A列の最終データ(セル)のアドレスを取得します。>
ALastPos = Range("A65536").End(xlUp).Address()
'<A列のセル範囲に対して処理を繰り返します。>
For Each ChkRange
In Worksheets(1).Range("A1" & ALastPos) ←(1)
'<B列の最終データ(セル)のアドレスを取得します。>
BLastPos = Range("B65536").End(xlUp).Address()
'<A列と同じデータがB列の範囲にあるかどうか検索します。
'同じデータがあれば”Answer”にセルを参照し、
'無ければ”Nothing”を返します。>
Set Answer = Worksheets(1).Range("B1:" & BLastPos). _ ←(2)
Find(ChkRange, LookAt:=xlWhole) ←(3)
'<B列に同じデータがなかった場合、B列にA列の内容をセットします。>
If Answer Is Nothing Then
SetPos = SetPos + 1
Range("B" & SetPos).Value = ChkRange
End If
Next ChkRange
MsgBox "総件数" & Range("A1:" & ALastPos).Count & _
"件中、" & Range("A1:" & ALastPos).Count - SetPos & "件が重複していました。" & _
Chr(13) & SetPos & "件がB列に抽出されました。";
End Sub
●補足説明●
(1)「For Each〜Next」ステートメントは、オブジェクトコレクション
(A列のセル範囲)の各オブジェクト(A列の各セル)に対して繰り返して処理を
行います。
<構文>
For Each element
In group
(処理)
Next element
element:コレクションの各要素を繰り返す変数を指定します。
group:オブジェクトコレクションを指定します。
繰り返し処理が開始されると、引数groupの最初のオブジェクトに対して処理が
実行されます。
引数groupの中にオブジェクトがある限り処理は続けられます。
処理から抜け出すには、「Exit For」を使います。
(2) 「Set」ステートメントは、オブジェクトへの参照を変数に代入して、実際の
オブジェクトを参照できるようにします。
(3) 「Find」メソッドは、指定されたセル範囲(B列)の中で特定の情報
(A列のセル要素)を検索し、情報が見つかった最初のセルを返します。
検索の条件にあてはまるセルが見つからなかった場合は、「Nothing」を
返します。
<構文>
object.Find(What,LookAt)
object:対象となるRangeオブジェクトを指定します。
What:検索する内容を指定します。
LookAt:定数「xlWhole」または「xlPart」を使って検索条件をセットします。
xlWhole・・・完全一致のセル
xlPart ・・・検索文字を含むセル
|