Home » ExcelVBA Rangeオブジェクト » セル検索 » 検索した隣のセルを取得するExcelマクロ

検索した隣のセルを取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「エクセル2010 vba findメソッド 検索セルの隣を返す」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

RangeオブジェクトのFindメソッドを使ってセルを検索したときに、その隣のセルを表すRangeオブジェクトを取得するには、どのようなオブジェクト式を書けばいいのかを探している方による検索でしょうか。

指定した行・列シフトしたセルを取得するにはOffsetプロパティが便利

隣のセルに限らず、あるセルから、指定した行数や列数だけずれた位置にあるセルを取得するには、RangeオブジェクトのOffsetプロパティを使うのが便利です。

検索した隣のセルを取得するExcelマクロ

Offsetプロパティの第1引数には何行シフトするのか、第2引数には何列シフトするのか、整数で指定します。

例えば、
右隣のセルを取得するのなら、Offsetプロパティの第1引数に「0」を、第2引数に「1」を指定してください。
左隣のセルを取得するのなら、Offsetプロパティの第1引数に「0」を、第2引数に「-1」を指定してください。

具体例をあげましょう。

[スポンサードリンク]

検索セルの隣のセルの値を取得するサンプルマクロ

「エクセル 検索した隣のセルの値を取得するマクロ」
「エクセル vba メッセージボックス 検索した隣のセルの内容を表示」
といった検索でも、このサイトへのアクセスがありますので、そんなマクロを作ってみました。

以下のようなマクロで、検索した隣のセルの値を取得してメッセージボックスに表示することができます。

Sub B列から北海道という文字列を探して隣のセルの値を取得する()

 Dim rng As Range

 Set rng = Range("B:B").Find("北海道")

 If rng Is Nothing Then
  MsgBox "みつかりませんでした。"
 Else
  MsgBox rng.Offset(0, 1).Value
 End If

End Sub

B列から「北海道」という文字列を検索して、
 Set rng = Range("B:B").Find("北海道")

みつからなかった場合には「みつかりませんでした。」というメッセージが、
 If rng Is Nothing Then
  MsgBox "みつかりませんでした。"

みつかった場合には右隣のセルの値がメッセージボックスに表示されます。
 Else
  MsgBox rng.Offset(0, 1).Value

MsgBox関数の引数に指定された「rng.Offset(0, 1)」というオブジェクト式が、検索した右隣のセルを表すRangeオブジェクトを取得している部分で、そのRangeオブジェクトのValueプロパティを使って、検索したセルの右隣のセルの値を取得しています。

このマクロの、
  MsgBox rng.Offset(0, 1).Value
の部分を、
  MsgBox rng.Offset(0, -1).Value
にすれば、左隣のセルの値がメッセージボックスに表示されるようになります。

Range.Offsetプロパティの第2引数に「-1」に指定されているので、検索されたセルの「-1」隣すなわち左隣のセルを表すRangeオブジェクトを取得することになります。

検索セルの隣のセルに値を入力するサンプルマクロ

「vba 検索セルの隣に入力」
「エクセル vba 検索した隣に文字を入力」
といった検索でも、このサイトへのアクセスがありますので、そんなマクロも作ってみました。

以下のようなマクロにすれば、検索した隣のセルを取得して値を入力できます。

Sub B列から北海道という文字列を探して隣のセルに値を入力する()

 Dim rng As Range

 Set rng = Range("B:B").Find("北海道")

 If rng Is Nothing Then
  MsgBox "みつかりませんでした。"
 Else
  rng.Offset(0, 1).Value = "←ここだよ!"
 End If

End Sub

先のマクロと違うのは、みつかった場合には右隣のセルに「←ここだよ!」という文字列を入力する部分だけです。
  rng.Offset(0, 1).Value = "←ここだよ!"

先のマクロと同じく「rng.Offset(0, 1)」というオブジェクト式が、検索した右隣のセルを表すRangeオブジェクトを取得している部分で、そのRangeオブジェクトのValueプロパティを使って、今度は検索したセルの右隣のセルに値を入力しています。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル検索 » 検索した隣のセルを取得するExcelマクロ

「セル検索」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.