エクセルVBAで、ワークブック名ではなく、ワークシート名を含む範囲のアドレスを取得するには?
例えば、Rangeオブジェクトがあり、それがBook1
というワークシートのセルA1
を参照しているとします。 そこで、Address()
を呼び出せば、単純なローカル参照が得られることがわかる:$A$1
. また、Address(External:=True)
として呼び出すことで、ワークブック名とワークシート名を含む参照を取得することもできます。
私が欲しいのは、ブック名ではなくシート名を含むアドレスを取得することです。 Address(External:=True)を呼び出したり、文字列関数でワークブック名を取り除いたりしたくありません。 Sheet1!$A$1
を取得するために、範囲内で呼び出すことはできますか?
37
11
私が思いつく唯一の方法は、以下のようにワークシート名とセル参照を連結することである:
EDIT:
最後の行を :
に変更します。シート名にスペースやその他の変な文字があっても動作するようにしたい場合。
ベンの言う通りだ。私もこの方法は思いつきません。Benが推奨している方法か、ワークブック名を削除する以下の方法をお勧めします。
Address()
ワークシート関数はまさにそれを行います。Application.WorksheetFunction
では利用できないため、Evaluate()
メソッドを使用したソリューションを考案しました。このソリューションでは、Excelでシート名のスペースやその他の面白い文字を処理できます。これは、以前の回答よりも優れた利点です。
例:
正確に「Sheet1。!$ A $ 1 "、Sheet1ワークシートのA1セルを参照する「rng」という名前の「範囲」オブジェクト。
このソリューションは、範囲全体の最初のセルのアドレスのみを返し、範囲全体のアドレスは返しません( "Sheet1。!$ A $ 1 "vs" Sheet1。!$ A $ 1:$ B $ 2 ")。 だから私はそれをカスタム関数で使用します:
Address()ワークシート機能の完全なドキュメントは、Office Webサイトで入手できます。https://support.office.com/en-us/article/ADDRESS-function-D0C26C0D-3991-446B-8DE4-AB46431D4F89。
複数の領域を持つ範囲を処理するコードを記述する必要がある場合があります。
外部アドレス、完全なアドレスを表示します。
私が作成したユーザー定義関数で、次のことがうまくいったことがわかりました。 セル範囲のリファレンスとワークシート名を文字列として連結し、評価ステートメントで使用しました(Sumproductで評価を使用していました)。
例:
次に、残りのコードでstrRngNameを参照します。
混乱した古い私のために範囲。
。Address(False、False、、True)。
TheSheetの形式で提供しているようです。!B4:K9。
そうでない場合、基準はなぜですか。 .. Strファンクトンを避けてください。
おそらくミリ秒未満しかかかりませんし、すでに使用されている153個の電子を使用します。
約0.3マイクロ秒。
RaAdd = mid(RaAdd、instr(raadd、 "]")+1)。
または。
約1.7マイクロ秒。
RaAdd = split(radd、 "]")(1)。
ワークシートの名前を返すだけではどうですか。 アドレス= cell.Worksheet.Name 。 次に、このようにアドレスを連結できます。 アドレス= cell.Worksheet.Name& "。!"& cell.Address 。
[2009-04-21編集]
Micah が指摘したように、これはその