
今回は、任意の値を検索する方法を紹介していきます。
検索を行うには、「Find」を使用した方法もあるのですが
今回は、Findを利用せず、オーソドックスなやり方を紹介していこうと思います。
任意の値を検索 隣のセルに値を入力
任意の値を検索するには、特定の行をループさせる必要があります。
下記のような表を用意しました。
指定した商品名の行に値段を入力してみましょう。
例として今回は「バナナ」の値段「100」を入力していきます。
Private Sub cmdSearch_Click()
'シートの指定
Dim sht As Worksheet
Set sht = Worksheets("Sheet1")
' 行の位置
Dim rowindex As Integer
rowindex = 2
'空になるまで商品名検索
Do Until sht.Cells(rowindex, 2) = ""
' 任意の値を検索
If sht.Cells(rowindex, 2) = "バナナ" Then
sht.Cells(rowindex, 3) = 100
End If
'次の行を検索
rowindex = rowindex + 1
Loop
End Sub
解説
3-5行目:シートの指定 今回は「Sheet1」を指定しました。利用しているシートの名前を指定してください。
7-9行目:行の位置を指定しています。1行目はタイトルなので、2行目から開始しています。
12行目:商品名の列(B列)が、空白になるまで処理をループさせるという意味になります。
15行目:検索したい条件を記載しています。今回は商品名が「バナナ」の行を検索しております。
16行目:検索できた行「バナナ」の行を対象に、値段を入力します。
20行目:次の行へ進めるため、rowindexをカウントアップする。
12行目のループの部分がわからない方は、こちらの記事を参考にしてみてください。
結果
バナナの横に100が記載されていますね。
サンプルソース
汎用性を少し高めるため、セルで入力されている商品名を検索するソースを記載しています。
セル(F2)に入力された商品名を検索し、その行の値段(C列)に100を入力する。
Private Sub cmdSearch_Click()
'シートの指定
Dim sht As Worksheet
Set sht = Worksheets("Sheet1")
' 行の位置
Dim rowindex As Integer
rowindex = 2
'空になるまで商品名検索
Do Until sht.Cells(rowindex, 2) = ""
' 任意の値を検索
If sht.Cells(rowindex, 2) = sht.Range("F3") Then
sht.Cells(rowindex, 3) = 100
End If
'次の行を検索
rowindex = rowindex + 1
Loop
End Sub
まとめ
今回は、任意の値を検索する方法を紹介しました。
1件1件セルをループさせる考え方は、非常に汎用性が高く、私は業務で様々なマクロに利用しています。
今回紹介したのは、あくまでサンプルなので、自分の業務に合わせてマクロを変更していきましょう。