ループによるマッチング処理を実施する方法について説明します。今回はSelect文とFor~Next文を使用したマッチング処理について説明します。
例題
A列の氏名(A列の3行目~7行目セル)とD列の氏名(A列の3行目~5行目セル)又はE列の氏名(A列の3行目~5行目セル)の突合せを行い、D列の氏名と一致(マッチング)した場合にはB列のクラス欄に”クラス①”を、E列の氏名と一致(マッチング)した場合にはB列のクラス欄に”クラス②”を表示するプログラミング方法となります。
[実行前]:
A列の3行目~7行目とD列の3行目~5行目とE列の3行目~5行目に氏名が入力されています。この各々の列に入力されている氏名の突合せを行います。
[実行後]:
A列に入力されている氏名とD列に入力されている氏名が一致した場合にはB列のクラス欄に”クラス①”が表示され、A列に入力されている氏名とE列に入力されている氏名が一致した場合にはB列のクラス欄に”クラス②”が表示されます。
プログラミング
プログラミングは以下の通りとなります。
[記述例]:
Sub サンプル()
Dim 行1 As Double
Dim 行2 As Double
Range("B3:B7").ClearContents
For 行1 = 3 To 7
For 行2 = 3 To 5
Select Case Trim(Range("A" & 行1))
'↓クラス①
Case Is = Trim(Range("D" & 行2))
Range("B" & 行1) = "クラス①"
Exit For
'↓クラス②
Case Is = Trim(Range("E" & 行2))
Range("B" & 行1) = "クラス②"
Exit For
End Select
Next
Next
End Sub
最初に変数:行1と行2を指定します。
次にB列の3行目~7行目をクリアします。
最後にFor~Next文を使用して変数:行1に3~7までの数値を順次セットしながらループさせると同時に、更に別のFor~Next文を使用して変数:行2に3~5までの数値を順次セットしながらループさせます。
このループによりA列の3行目~7行目に入力されている名前とD列の3行目~5行目に入力されている名前又はE列の3行目~5行目に入力されている名前の突合せ処理を実行します。突合せの条件判断にはSelect文を使用し、条件が一致した場合にはExit文での直近のFor~Next文を抜けます。
ループ内の処理内容を説明すると、
---------------------------------
まず最初に1つ目のFor~Next文の変数:行1に3がセットされ、A3セルの名前である”大山”が抽出されます。
この抽出の後に2つ目のFor~Next文の変数:行2に3がセットされ、Select文での条件判断を行います。
1回目のSelect文での条件である”大山”とD3セルの”落合”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”大山”とE3セルの”大山”の2つの名前が一致しているか否かを比較します。この2つは一致している事からB3セルに”クラス②”が表示されます。条件が一致した事で2つ目のFor~Next文の処理を終了し、1つ目のFor~Next文に処理が戻ります。
---------------------------------
次に1つ目のFor~Next文の変数:行1に4がセットされ、A4セルの名前である”久保木”が抽出されます。
この抽出の後に2つ目のFor~Next文の変数:行2に3がセットされ、Select文での条件判断を行います。
1回目のSelect文での条件である”久保木”とD3セルの”落合”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”久保木”とE3セルの”大山”の2つの名前が一致しているか否かを比較します。この2つも一致していない事からSelect文を抜けます。
Select文を抜けた後に2つ目のFor~Next文の変数:行2には4がセットされ、再度Select文での条件判断を行います。
2回目のSelect文での条件である”久保木”とD4セルの”照沼”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”久保木”とE4セルの”久保木”の2つの名前が一致しているか否かを比較します。この2つは一致している事からB4セルに”クラス②”が表示されます。条件が一致した事で2つ目のFor~Next文の処理を終了し、1つ目のFor~Next文に処理が戻ります。
---------------------------------
次に1つ目のFor~Next文の変数:行1に5がセットされ、A5セルの名前である”照沼”が抽出されます。
この抽出の後に2つ目のFor~Next文の変数:行2に3がセットされ、Select文での条件判断を行います。
1回目のSelect文での条件である”照沼”とD3セルの”落合”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”照沼”とE3セルの”大山”の2つの名前が一致しているか否かを比較します。この2つも一致していない事からSelect文を抜けます。
Select文を抜けた後に2つ目のFor~Next文の変数:行2には4がセットされ、再度Select文での条件判断を行います。
2回目のSelect文での条件である”照沼”とD4セルの”照沼”の2つの名前が一致しているか否かを比較しますが、この2つは一致している事からB5セルに”クラス①”が表示されます。条件が一致した事で2つ目のFor~Next文の処理を終了し、1つ目のFor~Next文に処理が戻ります。
---------------------------------
次に1つ目のFor~Next文の変数:行1に6がセットされ、A6セルの名前である”遠藤”が抽出されます。
この抽出の後に2つ目のFor~Next文の変数:行2に3がセットされ、Select文での条件判断を行います。
1回目のSelect文での条件である”遠藤”とD3セルの”落合”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”遠藤”とE3セルの”大山”の2つの名前が一致しているか否かを比較します。この2つも一致していない事からSelect文を抜けます。
Select文を抜けた後に2つ目のFor~Next文の変数:行2には4がセットされ、再度Select文での条件判断を行います。
2回目のSelect文での条件である”遠藤”とD4セルの”照沼”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”遠藤”とE4セルの”久保木”の2つの名前が一致しているか否かを比較します。この2つも一致していない事からSelect文を抜けます。
Select文を抜けた後に2つ目のFor~Next文の変数:行2には5がセットされ、再度Select文での条件判断を行います。
3回目のSelect文での条件である”遠藤”とD5セルの”仲田”の2つの名前が一致しているか否かを比較しますが、この2つは一致していない事から次の条件である”遠藤”とE5セルの”遠藤”の2つの名前が一致しているか否かを比較します。この2つは一致している事からB6セルに”クラス②”が表示されます。条件が一致した事で2つ目のFor~Next文の処理を終了し、1つ目のFor~Next文に処理が戻ります。
---------------------------------
次に1つ目のFor~Next文の変数:行1に7がセットされ、A7セルの名前である”落合”が抽出されます。
この抽出の後に2つ目のFor~Next文の変数:行2に3がセットされ、Select文での条件判断を行います。
1回目のSelect文での条件である”落合”とD3セルの”落合”の2つの名前が一致しているか否かを比較しますが、この2つは一致している事からB7セルに”クラス①”が表示されます。条件が一致した事で2つ目のFor~Next文の処理を終了し、1つ目のFor~Next文に処理が戻りますが、1つ目のFor~Next文も処理が終了したため、全ての突合せ処理が終了します。
---------------------------------
との意味になります。
ダウンロード
上記サンプルプログラムを使用したい場合は、こちらからダウンロードして下さい。