こんばんは、わたあめです。今回の記事は、行単位で特定の文字列(項目)があれば隣のセルの値を取得するサンプルマクロを紹介します。
例えば上画像のように、その行に「名前」という値のセルがあれば隣の値を取得するというような場合です。この場合、「鈴木・佐藤・前田・太田・山田」が取得結果となります。
名前データがどの列に現れるか分からない場合、その行に対して”名前”という項目名があったらその隣のセルの値を取得するという処理になります。どの列に項目が出てくるかわからないけど名前を取得したい…という時などに参考になるサンプルかと思います。それでは、いってみましょう!
サンプルマクロ
それでは、早速サンプルマクロを紹介していきたいと思います。実行結果は以下の画像の通りで、別シートに取得した値を並べます。
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
サンプルマクロのポイント解説
サンプルマクロの中にコメント文を記載しているので、コメント文を読むと大まかな処理の流れは掴めるかと思いますが、ポイントとなる点をまとめておきたいと思います。
以上2点がポイントとなります。
さいごに
簡単な解説となってしまいましたが(年賀状に追われていて…)、少しでもマクロ作りの参考になれば幸いです。それでは、また次の記事で!