●詳細●
サンプルでは、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 値
|