Hi I am looking to loop through all named ranges found in my activeworksheet and then do something to them. However I've used the code below but it does not seem to produce anything. Also, it will be good if I can loop through named ranges that contain certain words. Example, my named ranges are named data1, data2, data3 and so on. I would only like to work on them if they contain the word data.
For Each nm In Activesheets.Names
MsgBox "nm.name"
Next nm
This macro will loop through all named ranges in your workbook. It takes the comments above into consideration and shows how you can do things with specific ranges.
Note, using
InStr()
will find "data" anywhere in the name. So if you havedata1
,datas1
, andmyData1
, it'll run the "do stuff here" code for all of those. If you just want ranges starting withdata
, then change theInStr()
line to:If Left(nm.Name,4) = "data" Then
Edit: You can couple this with the
If nm.RefersToRange.Parent.Name = ActiveSheet.Name
line suggested by @user1274820 below. (Just make theIf
statement include anAnd
operator).If you only want to get names from the active worksheet, use this:
^ This code will only returned named ranges that refer to ranges on the active worksheet.
nm.RefersToRange.Parent
will return the worksheet associated with the range.We can then retrieve its name using
.Name
and compare it to the ActiveWorksheet name.Here you can see I have 2 Named Ranges on
Sheet4
and 1 onSheet3
When I run this code, it only returns
MyName1
andMyName2
- it does not includeMyName3
as it is not on the active sheet.This macro will only return the ones on my
ActiveSheet
(Sheet4
)