excel vbaの「検索」を簡単に説明しました。
excelのvbaをマスターしましょう!
excel vba 簡単・解決! Homeへ
vlookup
excelのvbaとvlookup関数とを比較しました。
1.excel vlookup関数を使用した抽出
次の図は、「生徒ID」がA列に、B1、C1、D1に3つの「教科」を示しているワークシート Sheet1です。
また、B2:D4の範囲に入力されているA,B,Cは、生徒の教科に対する「評価」です。
【図1】

次の図は、Sheet2で、生徒の評価結果が入力されています。
A列を新しく挿入し、「生徒ID」+「教科」をこのA列に作成した結果を示しています。
【図2】

【図1】のB2へ次の数式を入力しました。
=VLOOKUP(INDIRECT("A"&ROW())&INDIRECT(ADDRESS(1,COLUMN())),Sheet2!$A$2:$D$10,4,FALSE)
この式の意味は、【図2】のA2:D10のセル範囲に対してvlookup関数を使用していることです。
関数INDIRECT("A"&ROW())は、”A”+B2の行番号で、 セル”A2”の値「A001」を返します。
また、関数INDIRECT(ADDRESS(1、COLUMN())は、1行目でB2の列番号、 セル”B1”の値「算数」を返します。
この2つを結合した結果、「A001算数」、となります。
【図2】の「A001算数」行の4列目の評価は、 「A」です。
したがって、【図1】のB2セルの値は、vlookup関数が返す値「A」となります。
【図1】の他の「評価」は、この式を【図1】の他のセルへB2をそのままコピーした結果です。
2.excel vba を使用した抽出
Sub Set_Value()
Dim intL As Integer, intI As Integer, intJ As Integer, intN As Integer
Dim intMax As Integer, intMaxS As Integer, intMaxK As Integer
Dim strA(3, 1500) As String
Dim strSeito(500) As String, strKyouka(30) As String
Worksheets("Sheet2").Activate
For intL = 2 To 1500
If Cells(intL, 2).Value = "" Then Exit For
strA(1, intL - 1) = Cells(intL, 2).Value
strA(2, intL - 1) = Cells(intL, 3).Value
strA(3, intL - 1) = Cells(intL, 4).Value
Next intL
intMax = intL - 2
Worksheets("Sheet1").Activate
For intI = 2 To 500
If Cells(intI, 1).Value = "" Then Exit For
strSeito(intI - 1) = Cells(intI, 1).Value
Next intI
intMaxS = intI - 2
For intJ = 2 To 30
If Cells(1, intJ).Value = "" Then Exit For
strKyouka(intJ - 1) = Cells(1, intJ).Value
Next intJ
intMaxK = intJ - 2
For intI = 1 To intMaxS
For intJ = 1 To intMaxK
For intN = 1 To intMax
If strA(1, intN) = strSeito(intI) And strA(2, intN) = strKyouka(intJ) Then
Cells(intI + 1, intJ + 1).Value = strA(3, intN)
Exit For
End If
Next intN
Next intJ
Next intI
End Sub
3.excel 関数とvba との抽出の比較
関数は、vbaと比較し、コンパクトになりました。
しかし、vbaは、基本的な命令のみで作成できました。
確かに、関数の機能と制限に習熟している場合、関数を活用することが有利かもしれません。
しかし、vbaの場合、複雑な知識を必要とせず、比較的自由にセルの処理が出来ます。
したがって、応用範囲が広い方法は、どちらかと言うと、vbaになるかも知れません。
excelのvbaをマスターしましょう。
excel vba 簡単・解決! Homeへ
【検索・抽出の最新記事】

