【 Excel VBA 】探したい文字列が入っているセル列位置を取得したい

2No(@2No45519933)です。

取得する条件によって、ヘッダ項目が変わってしまうCSVファイルを編集する時に考えた関数になります。

はじめに

この関数を考えた経緯としては、ダウンロード条件によってヘッダ項目が増減してしまい、コピー位置指定を Columns (1)や Columns("A") などの固定値で指定するとコピー元やコピー先が変化してしまったため。

また、今回の場合検索したいヘッダ項目は必ずCSVファイルの中に含まれている条件だったので、文字列がなかった場合の処理は含んでいません…

あくまでも、列位置が固定ではなく変動しまってコピー位置などがずれてしまうから、文字列があるヘッダ項目の列位置を知りたい!って関数です。

やりたいこと

検索したい文字列を渡すと、その文字列が入った列番号を取得したい。

参考
https://www.relief.jp/docs/excel-vba-get-range-by-cells-property.html

列番号を探すVBAコード

検索対象の文字列と列番号を紐づけたオブジェクトの作成

サンプルなので、必要に応じて検索対象文字列などは変えてください!

検索範囲の設定

検索する範囲を定義します。

検索対象文字列と列番号が紐付いたオブジェクトを返す関数作成

キー(検索対象文字列)を渡すとアイテム(列番号)を返すようにしたいので、Dictionaryを使って連想配列で作成しました。

関数を使ってオブジェクトを作成

そうするとこんなデータを取得。
※ブレイクポイントを置くとオブジェクトの中身を確認できます

position Variant/Object/Dictionary
Count 3 Long
Item1 "item1" Variant/String
Item2 "item2" Variant/String
Item3 "item3" Variant/String

列番号取得

列番号を取得したい場合は、検索文字列を作成したオブジェクトに渡します

これでダウンロード条件によって列位置が変わっても、列番号を取得することができます。

現状検索したい文字列が固定なので、柔軟性にはかける部分はありますが、一応使える形にはなったのかなーと。

文字列がない場合どうするかも追記しないと予期せぬエラーを起こしそう。

いや、おきます…

そのことについて追々追記します。多分。

みなさま良いExcel VBAライフを!

それでは!

created by Rinker
¥2,838 (2023/03/29 06:09:57時点 楽天市場調べ-詳細)