即効テクニック |
●詳細● サンプルでは、StrComp関数を使ってデータを比較し、重複データを削除しています。 比較の方法は、大文字と小文字、半角と全角、ひらがなとカタカナの区別をしていません。 区別をするかしないかは、StrComp関数の引数の文字列比較のモードで指定します。 まずは、大文字と小文字、半角と全角、ひらがなとカタカナの混じったデータをA列に入力しています。 A列 1 プロジェクトA 2 ぷろじぇくとA 3 ProjectB 4 プロジェクトA 5 ProjectA 6 ProjectA このデータを昇順に並べ替えた後、StrComp関数を使ってデータの比較を行い、重複している 場合はそのデータ行を削除します。 大文字と小文字、半角と全角、ひらがなとカタカナの区別をしていませんので、A列には下記 のデータが残ります。 A列 1 ProjectA 2 ProjectB 3 プロジェクトA ●準備● 新規ブックを用意して標準モジュールを挿入し、サンプルマクロを貼り付けてください。 ●サンプル● Sub Sample() Dim myLastCell As Long Dim MyData1 As String, MyData2 As String Dim i As Long Worksheets("Sheet1").Activate ' <データを入力します。> Range("A1") = "プロジェクトA" Range("A2") = "ぷろじぇくとA" Range("A3") = "ProjectB" Range("A4") = "プロジェクトA" Range("A5") = "ProjectA" Range("A6") = "ProjectA" MsgBox "データを入力しました。処理を開始します。" '<画面の動きを止めます。> Application.ScreenUpdating = False '←(1) '<A列を昇順にソートします。> Worksheets("Sheet1").Range("A1").Sort _ key1:=Worksheets("Sheet1").Range("A1") '<最終データの位置を取得します。> myLastCell = Range("A65536").End(xlUp).Row '<最終位置から1つ上のデータと比較をしていきます。> For i = myLastCell To 2 Step -1 '←(2) '<比較元> MyData1 = Cells(i, 1).Value '<比較先> MyData2 = Cells(i - 1, 1).Value '<テキストモードでの比較を行います。 '大文字と小文字、半角と全角、ひらがなとカタカナ 'を区別しないで比較します。> If StrComp(MyData1, MyData2, 1) = 0 Then '←(3) '<重複するデータ行を削除します。> Cells(i, 1).EntireRow.Delete End If Next i '<参考のために元データをC列に入力します。> Range("C1") = "プロジェクトA" Range("C2") = "ぷろじぇくとA" Range("C3") = "ProjectB" Range("C4") = "プロジェクトA" Range("C5") = "ProjectA" Range("C6") = "ProjectA" Range("C7") = "↑" Range("C8") = "元データです" Columns("A:C").EntireColumn.AutoFit '←(4) End Sub ●補足説明● (1) ScreenUpdatingプロパティは、Trueの場合、マクロの実行中に画面表示を更新します。 サンプルでは、マクロの速度を向上させるため、画面を更新しないようにします。 この場合、マクロの処理過程は見ることができませんが、実行速度が速くなります。 (2) For〜Nextステートメントは、指定した回数だけ、一連のステートメントを繰り返すフロー 制御ステートメントです。 <構文> For counter = start To end [Step step] [処理] Next [counter] counter:カウンタに使う数値変数を必ず指定します。 start :引数counterの初期値を必ず指定します。 end :引数counterの最終値を必ず指定します。 step :省略可。ループを繰り返すごとに引数counterに加算される値を指定します。正の数 または負の数を指定できます。 省略すると、ループを繰り返すごとに引数counterには1が加算されます。 (3) StrComp関数は、文字列比較の結果を表す値を返します。 <構文> StrComp(string1, string2[, compare]) string1:任意の文字列式を必ず指定します。 string2:任意の文字列式を必ず指定します。 compare:省略可。文字列比較のモードを指定する番号を設定します。 省略すると、Option Compareステートメントの設定により比較モードが決まります。 引数compareの設定値は次のとおりです。 定数 値 説明 vbUseCompareOption -1 Option Compareステートメントの 設定を使用して比較を行います。 vbBinaryCompare 0 バイナリモードの比較を行います。 vbTextCompare 1 テキストモードの比較を行います。 vbDatabaseCompare 2 MicrosoftAccessの場合のみ有効。 バイナリモードでは、大文字と小文字、半角と全角、ひらがなとカタカナが区別されるASCII コード順に比較が行われます。 テキストモードでは、大文字と小文字、半角と全角、ひらがなとカタカナが区別されない五十 音順に比較が行われます。 StrComp関数の戻り値は、次のとおりです。 string1はstring2未満 : -1 string1とstring2は等しい : 0 string1はstring2を超える : 1 string1またはstring2はNull値 : Null 値