HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > StrComp関数を使って文字列を比較する

即効テクニック

文字列操作関連のテクニック

StrComp関数を使って文字列を比較する

( - )
●詳細● 

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