行番号と列名で Excel テーブルから値を取得できるようにしたいと考えています (コードの読みやすさと堅牢性のため)。
数式では、列ヘッダー テキストで構造化参照を使用して、次のようにテーブルから値を取得できます。
=INDIRECT(ADDRESS(<absolute_line_number>;COLUMN(<table_name>[<column_name>])))
ユーザーが列の名前を変更すると、式内のすべての構造化参照が自動的に更新されるため、これは式に対して堅牢です。
ただし、VBA コードの場合はそうではありません。
Worksheet.CodeName
ワークシートの場合、ユーザーが表示されているシート名を変更しても同じままになる VBA コードで使用するために定義することができます。Excel テーブルの AFAICS には、そのようなプロパティはありません。
私が現在持っている最良のアイデアは、テーブル ヘッダーを 1 セルの名前付き範囲にすることです。次に、次のように VBA のテーブルから値を取得できます。
<sheet_codename>.Cells(<line_number>,Range("<range_name>").Column)
ただし、名前付き範囲がテーブルから切断されているため、これは気になります。たとえば、シート上のテーブルを再配置すると、範囲は古い場所に残ります。
より良いオプションはありますか?「より良い」とは、具体的には次のことを意味します。
- テーブル内の列の名前変更および/または再配置を維持し、少なくともシート内でテーブルを移動します