2017-04-05 1 views
3

こんにちは、私のアクティブワークシートにあるすべての名前付き範囲をループして、何かをしたいと思っています。しかし私は以下のコードを使用しましたが、何も生成していないようです。また、特定の単語を含む名前付き範囲をループすることもできます。たとえば、私の名前付き範囲は、data1、data2、data3というようになります。彼らが単語のデータを含んでいれば、私は彼らに取り組んでみたいです。あなたが唯一のアクティブなワークシートから名前を取得したい場合は現在のアクティブシートのExcel VBAのすべての名前付き範囲をループする

For Each nm In Activesheets.Names 
    MsgBox "nm.name" 
Next nm 
+1

「msgbox nm.Name'だけを試してください。あなたが持っているように、メッセージボックスは文字通り "nm.name"を表示しています、そうですか? – BruceWayne

+1

「ActiveSheet」ではなく「ActiveSheet」が必要な場合があります。 –

+0

あなたは 'ActiveWorkbook.Names'を使用し、他の人が言ったように引用符をドロップする必要があります – user1274820

答えて

3

、これを使用する:アクティブなワークシート上の範囲を参照してください

Sub Test() 
For Each nm In ActiveWorkbook.Names 
    If nm.RefersToRange.Parent.Name = ActiveSheet.Name Then MsgBox nm.Name 
Next nm 
End Sub 

^このコードのみが返されます名前付き範囲を。

nm.RefersToRange.Parentは、範囲に関連付けられたワークシートを返します。

.Nameを使用して名前を取得し、それをActiveWorksシート名と比較することができます。ここで

私はこのコードを実行すると、それだけでMyName1MyName2を返しSheet3

Sheet4と1に、私は2つの名前付き範囲を持って見ることができます - それはアクティブなシート上にないとして、それはMyName3が含まれていません。

Ranges

このマクロは、ブック内のすべての名前付き範囲を通じて私ActiveSheetSheet4

Names

1

このマクロがループ上のものを返します。上記のコメントを考慮して、特定の範囲で作業を行う方法を示します。名前にどこでも "データ" を見つけるでしょうInStr()を使用して

Sub nameLoop() 
Dim nm 
Dim wb As Workbook 
Set wb = ActiveWorkbook 
For Each nm In wb.Names 
    If InStr(1, nm.Name, "data") Then 
     ' Do stuff with the named range. 
     Debug.Print nm.Name 
    End If 
Next nm 
End Sub 

注意、。したがって、data1datas1、およびmyData1をお持ちの場合は、それらのすべてに対して「ここに行う」コードが実行されます。 If Left(nm.Name,4) = "data" Then

編集:あなただけdataでを開始する範囲をしたい場合は、その後にInStr()行を変更あなたはIf nm.RefersToRange.Parent.Name = ActiveSheet.Nameラインとの夫婦これは、@ user1274820下記によって提案することができます。 (IfステートメントにAnd演算子を含めるようにしてください)。

関連する問題