重複データのチェックする <パターン1>「For〜Next」と「DoWhile〜Loop」を使った方法
●詳細● 

 サンプルでは、A列のデータから、重複データを取り除いた結果をB列に抽出します。
 今回は、「For〜Next」と「Do While〜Loop」を使ってチェックします。
 まずは、A列のデータの総件数を取得します。「For〜Next」で1件目から総件数分、
 処理を行います。その中で、「Do While〜Loop」を使って重複チェックの処理
 をします。
 「Do While〜Loop」の条件は、「B列が””でない間(B列に値がある間)」
 で、A列の内容をB列の1件目から比べていきます。B列に同じデータが無かった場合は、
 A列の内容をB列の最後にセットし、A列の次のデータをチェックします。
 同じデータがあった場合は、「Do While〜Loop」を抜けて、A列の次のデータ
 をチェックします。A列の全データのチェックが終了したら、メッセージボックスで「総件
 数中何件が重複していて、何件が抽出された」かを表示します。

●準備● 

 * A列に何件かデータを入力し、重複データも用意してください。

●サンプル● 

Sub Sample() 

    Dim APos As Integer
    Dim BPos As Integer
    Dim SetPos As Integer
    Dim CellPos As String
    Dim AllSu As Integer

    '<結果を表示するB列を空にします。>
    Columns("B:B").Select
    Selection.ClearContents

    '<最終データが入力されているセルに移動します。
    'データが無い場合は”A1”がSelectされます。>
    Range("A65536").End(xlUp).Select

    '<最終データ(セル)のアドレスを取得します。>
    CellPos = Selection.Address()

    '<データ総数を取得します。>
    AllSu = Range("A1:" & CellPos).Rows.Count 

    '<結果(B列)をセットする行位置取得用変数を初期化します。>
    SetPos = 0 

    '<データ総数分作業を繰り返します。>
    For APos = 1 To AllSu ←(1) 

    '<B列の全データと比較するので、行位置を1行目にしています。>
           BPos = 1 

          '<B列に値がある間、チェック作業を繰り返します。>
          Do While (Cells(BPos, 2).Value <> "") ←(2) 

            '<A列とB列の内容が同じかどうかチェックします。>
            If Cells(APos, 1).Value = Cells(BPos, 2).Value Then 

              '<同じだったらB列にセットする必要が無いのでチェック作業を終わります。>
             Exit Do ←(3) 
           End

            '<同じではなかったら、次のB列のデータとのチェックをします。>
           BPos = BPos + 1 
         Loop

         '<B列に同じデータがなかった場合、B列にA列の内容をセットします。>
         If Cells(BPos, 2).Value = "" Then
          SetPos = SetPos + 1 
          Cells(SetPos, 2).Value = Cells(APos, 1).Value 
        End
    Next APos 
    MsgBox "総件数" & AllSu & "件中、" & AllSu - SetPos & "件が重複していました。" _ 
           & Chr(13) & SetPos & "件がB列に抽出されました。" ←(4) 
End Sub 

●補足説明● 

 (1)「For〜Next」ステートメントは、指定された回数分、処理を繰り返します。

   <構文> 
    For x = i To y 
     (処理) 
    Next x 

  x:繰り返す回数をカウントする数値変数を指定します。

  i:初期値をセットします。 
  y:繰り返す回数(最終値)をセットします。

  Nextステートメントでxに1加算され、再び処理を繰り返します。

(2)「Do〜Loop」ステートメントは、指定された条件が満たされている間
   もしくは満たされるまで、処理を繰り返します。

   満たされている間処理を行いたい場合。 

  <構文>
   Do While 条件 
    (処理) 
   Loop 

  満たされるまで処理を行いたい場合。 
  <構文>
   Do Until 条件 
    (処理) 
   Loop 

(3)「Exit Do」は「Do〜Loop」ステートメントから抜け出す方法です。
   「For〜Next」の抜け方は「ExitFor」です。




戻る


Excel Word Access VBA! モーグ