「エクセル マクロ find 列番号を返す」
という検索が、このサイト『インストラクターのネタ帳』で行われていました。
Excelマクロで、Rangeオブジェクトに用意されているFindメソッドで検索を行い、みつかったセルの列番号を取得するには、どのようなVBA(Visual Basic for Applications)のコードを書けばいいのかを探している方による検索です。
アクセスログを眺めてみると、
「エクセルvba セルの検索 セルの列番号を調べる」
「excel vba find 列番号」
といった検索でのアクセスも時折あります。
Range.FindでみつけたRangeの列番号を取得するサンプル
いつものように参考となりそうな簡単なマクロをご紹介しておきます。
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オブジェクトの列番号を取得することと同じわけですから、Long型の値を返すRangeオブジェクトのColumnプロパティで、
列番号を取得しています。
ColumnとColumns
なお「Range.Column」とよく似た名前の「Range.Columns」という名前のプロパティも存在していますが、
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 » Excel VBA Rangeオブジェクト » セル検索 » Findで検索したRangeの列番号を取得する