VBA 任意の値を検索する 隣のセルに値を入力

今回は、任意の値を検索する方法を紹介していきます。
検索を行うには、「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件セルをループさせる考え方は、非常に汎用性が高く、私は業務で様々なマクロに利用しています。
今回紹介したのは、あくまでサンプルなので、自分の業務に合わせてマクロを変更していきましょう。

 

EXCEL VBAの記事一覧

おすすめの記事