2017-06-19 26 views
0

文字列変数を入力とし、名前付き範囲を参照する文字列変数を使用するマクロを作成しようとしています。Range関数で名前付き範囲を参照する(Excel - VBA)

現在、私が持っているものです。

Sub SubItems() 

Dim M As String 
    M = "=R[-1]C" 
    'where M refers to row above, currently it is Manufacturers 

Dim g As Range 

Set g = Range(" & M & ") 

ActiveCell.Value = g(2) 
'For Example 

End Sub 

問題は=範囲(「& M &」)構文

集合Gである私は、レンジ関数の入力引数は何になりたいですMはリテラル文字Mではありません。C言語の場合と同様にprintf( '%s'、M)を実行します。

編集:

は現在、私は、Excelシートのセットアップを持っているか、ドロップダウンメニューから、メインの項目を選択することです。次に、メインアイテムの下にあるセルを選択し、自動的にサブアイテムで行を埋めたいと思います。サブ項目は、メイン項目の後に名前が付けられた名前付き範囲に格納されます。

私はマクロが自動的にその上の行(メインアイテム)を読むようにしたいので、なぜ私はM = "= R [-1] C"を持っているのでしょうか?それから私はレンジ機能にそれを入力したい、それは私が現在直面している問題です。

これは私の問題をより明確に明確にしてくれることを願っています。あなたは基本的に名前付き範囲が& M &と呼ばれて参照しているので、

+1

'Set g = Range(M)'の意味ですか?または 'Set g = Range(" "" "&M&" "" ")'? – BruceWayne

+0

@ SherifRあなたの説明は助けにはならない、あなたは何をしたいですか? 2つの文字列があります.1つは名前付き範囲の名前で、1つはその値です。 – Ibo

+0

ここで実際に何をしようとしていますか?一見すると、必要以上に簡単な問題を解決しようとしているように見えます。これを見てみましょう:https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – SandPiper

答えて

0

文字列リテラルは、二重引用符内に収容されています。

文字列変数を使用している場合は、その値も引用符で囲まれています。だからそれはちょうどRange(M)、またはRange("=R[-1]C")である必要があります、2つは同じです。

注:= R [-1] Cは非常に奇妙な名前ですが、これはどういう意味ですか?名前付き範囲と範囲内の範囲(式のように見える)の違いを理解してください!おそらく= R [-1] Cの何かについての説明があり、もっとお手伝いできますか?

+0

現在、どのようにExcelシート設定をしていますか?ドロップダウンメニューからメイン項目を選択します。次に、メインアイテムの下にあるセルを選択し、自動的にサブアイテムで行を埋めたいと思います。サブ項目は、メイン項目の後に名前が付けられた名前付き範囲に格納されます。 私はマクロが自動的にその上の行(メインアイテム)を読むようにしたいので、なぜ私はM = "= R [-1] C"を持っているのでしょうか?それから私はレンジ機能にそれを入力したい、それは私が現在直面している問題です。 こちらがお役に立てば幸いです。 –

0

問題は、あなたの変数Mが相対参照を記述しており、あなたが記述した方法でRangeオブジェクトへの相対参照を適用できるとは思わないということです。おそらく、あなたは別の角度からあなたの問題を攻撃したいですか?たとえば:

あなたのメソッドを使用できますが、絶対参照を設定することができます。

M = "A5" 
Debug.Print Range(M).Value 

または代わりに次のようなコードを使用して相対参照を指定することができます。

私はこれまで理解している
debug.print activecell.Offset(-1,0).Value 
+0

それは問題かもしれません。ありがとうございました!私はちょうど相対参照を使用するのではなく、異なる主な項目を扱うSelect Caseを設定します。 –

0

- あなたはMと呼ばれる名前付き範囲を、持っていて、それを割り当てたいですVBA範囲。この場合、これを達成するためのコードは次のとおりです。

Sub TestMe() 

    Dim g As Range 
    Set g = ActiveSheet.[M] 
    Debug.Print g.Address 

End Sub 
関連する問題