プチIT化 PR

【VBA】行単位で検索値があれば隣のセルの値を取得するマクロ

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんばんは、わたあめです。今回の記事は、行単位で特定の文字列(項目)があれば隣のセルの値を取得するサンプルマクロを紹介します。

例えば上画像のように、その行に「名前」という値のセルがあれば隣の値を取得するというような場合です。この場合、「鈴木・佐藤・前田・太田・山田」が取得結果となります。

名前データがどの列に現れるか分からない場合、その行に対して”名前”という項目名があったらその隣のセルの値を取得するという処理になります。どの列に項目が出てくるかわからないけど名前を取得したい…という時などに参考になるサンプルかと思います。それでは、いってみましょう!

サンプルマクロ

それでは、早速サンプルマクロを紹介していきたいと思います。実行結果は以下の画像の通りで、別シートに取得した値を並べます。

前提:「Sheet1」「Sheet2」はあらかじめ存在することとします
Sub test()

Dim maxRow As Integer ' 最終行格納変数
Dim i As Integer ' 行数カウント用変数
Dim j As Integer ' 列数カウント用変数
Dim k As Integer '書き込み用行数カウント用変数

' k初期化
k = 1

' 最終行値を取得
maxRow = Worksheets("Sheet1").Range("A1").End(xlDown).Row

' 1行目から最終行までチェック
For i = 1 To maxRow
' その行の1列目から最終列までチェック
For j = 1 To Worksheets("Sheet1").Range("A" & i).End(xlToRight).Column
tmpStr = Worksheets("Sheet1").Cells(i, j).Value
' "名前"という項目名があったら処理する
If tmpStr = "名前" Then
' 名前を取得
Set tmpRng = Worksheets("Sheet1").Rows(i).Find("名前")
Worksheets("Sheet2").Range("A" & k).Value = tmpRng.Offset(0, 1).Value
k = k + 1
End If
Next
Next

End Sub

サンプルマクロのポイント解説

サンプルマクロの中にコメント文を記載しているので、コメント文を読むと大まかな処理の流れは掴めるかと思いますが、ポイントとなる点をまとめておきたいと思います。

Find("名前")で名前のセルを取得
Offset(0, 1)で列を+1=右隣の列の値を指定して値を取得

以上2点がポイントとなります。

さいごに

簡単な解説となってしまいましたが(年賀状に追われていて…)、少しでもマクロ作りの参考になれば幸いです。それでは、また次の記事で!