Home » ExcelVBA Rangeオブジェクト » セル検索 » Findで検索したRangeの列番号を取得する

Findで検索したRangeの列番号を取得する

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

FindでみつけたRangeの列番号を取得する

「エクセル マクロ find 列番号を返す」
という検索が、このサイト『インストラクターのネタ帳』で行われていました。

Excelマクロで、Rangeオブジェクトに用意されているFindメソッドで検索を行い、みつかったセルの列番号を取得するには、どのようなVBA(Visual Basic for Applications)のコードを書けばいいのかを探している方による検索です。

アクセスログを眺めてみると、
「エクセルvba セルの検索 セルの列番号を調べる」
「excel vba find 列番号」
といった検索でのアクセスも時折あります。

[スポンサードリンク]

Range.FindでみつけたRangeの列番号を取得するサンプル

いつものように参考となりそうな簡単なマクロをご紹介しておきます。

Sub 北海道という文字列を探して行番号を取得する()
 MsgBox Range("A1:G7").Find("北海道").Column
End Sub

アクティブなワークシートのA1:G7セルに「北海道」という文字列を入力しておいてから上記のマクロを実行すると、「北海道」と入力しておいたセルの列番号がメッセージボックスに表示されます。

サンプルマクロで行っている処理

Range.Findメソッドで見つかったRangeの行番号を取得するマクロを、既にご紹介しています。

列番号はRange.Columnプロパティ

行番号の場合は、
  Range("A1:G7").Find("北海道").Row
となっていましたが、列番号の場合は、
  Range("A1:G7").Find("北海道").Column
です。違うのは最後が「.Row」か「.Column」かだけです。

オブジェクトブラウザーを調べればわかるとおり、RangeオブジェクトのFindメソッドが返すのはRangeオブジェクトですから、

FindでみつけたRangeの列番号を取得する

Findメソッドでみつかったセルの列番号を取得することは、Rangeオブジェクトの列番号を取得することと同じわけですから、Long型の値を返すRangeオブジェクトのColumnプロパティで、

FindでみつけたRangeの列番号を取得する

列番号を取得しています。

ColumnとColumns

なお「Range.Column」とよく似た名前の「Range.Columns」という名前のプロパティも存在していますが、

FindでみつけたRangeの列番号を取得する

Range.Columnsは、列全体を表すコレクションとしてのRangeオブジェクトを返すプロパティでまったく別物です。

上記の例ではメッセージボックスに列番号を表示させるために、MsgBox関数の引数にRange.Columnプロパティを使ったオブジェクト式を指定した、
  MsgBox Range("A1:G7").Find("北海道").Column
としていますが、例えば、変数・col_numに列番号を代入するのなら、
  col_num = Range("A1:G7").Find("北海道").Column
としてください。

最終更新日時:2020-11-27 03:11

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル検索 » Findで検索したRangeの列番号を取得する

「セル検索」の記事一覧

検索


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

.