Solved

Using INDIRECT with Dynamic Range Names

Posted on 2014-09-05
9
264 Views
Last Modified: 2014-09-09
All,

I have the following formula in a spreadsheet for tracking my time bookings:

=IF(ISERROR(INDEX(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$66,2,FALSE)),ROW()-ROW($B$22),1)),"",IF(INDEX(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$66,2,FALSE)),ROW()-ROW($B$22),1)=0,"",INDEX(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$66,2,FALSE)),ROW()-ROW($B$22),1)))

This works fine and when copied down across 15 rows provides me with a list of charge codes extracted from a bigger list. I have the bigger list split into two sections so that I can change my bookings for alternate weeks. The list is split into two Named Ranges - "Week1" and "Week2". As you can see the formula uses an INDEX formula on the Named Ranges, Week1 or Week2 based on the VLOOKUP which checks the current date in another list where I have week ending dates allocated to a 1 or a 2.

The problem comes when from time to time I have to add/delete booking codes to the big list; I then have to manually change the Named Ranges so that they still accommodate half of the list each, assuming even number of codes so that it can split evenly.

What I have tried doing but have been unsuccessful is using a Dynamic Named Range for Week1 and Week2. I have tried in a couple of ways:

1) Using an OFFSET formula within the "Refers to" to generate the range
2) Create the Range Name within a cell using ADDRESS and extra characters to make the full range; then use INDIRECT in the Name Manager to reference that cell.

Neither of these work.

What else can I try?

Thanks
Rob Henson
0
Comment
Question by:Rob Henson
  • 6
  • 3
9 Comments
 
LVL 49

Expert Comment

by:Rgonzo1971
ID: 40305548
Could you send a dummy?
0
 
LVL 32

Author Comment

by:Rob Henson
ID: 40309666
See attached with relevant areas highlighted on Charge Lines tab.

Formula in column B also has another issue. I am attempting to spread my time evenly over a number of Charge lines. As you will see with this example, the last entry gets a bigger proportion. I suspect it is because I am dividing the time by a count of items in the range but the blanks at the bottom are getting included in the count; until you reach the last entry where it is taking the outstanding balance. I have tried changing to use COUNTIF(Range,"<>"&"") but that is still not working.

Any suggestions?

Thanks
Rob H
Dummy-Time-bookings.xlsm
0
 
LVL 32

Author Comment

by:Rob Henson
ID: 40309680
Sorted the last issue:

(COUNTA($B$23:$B$42)-COUNTIF($B$23:$B$42,"")+1)

So just the original INDIRECT issue now to resolve.

Thanks
0
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
LVL 49

Accepted Solution

by:
Rgonzo1971 earned 500 total points
ID: 40310275
Hi,

if Week1Range and Week2Rang as required you could try in your formula

INDIRECT(INDIRECT(Week1Range))
0
 
LVL 32

Author Comment

by:Rob Henson
ID: 40310384
Currently in Week2 so tried this:

=IF(ISERROR(INDEX(INDIRECT(INDIRECT(Week2Range)),ROW()-ROW($B$22),1)),"",IF(INDEX(INDIRECT(INDIRECT(Week2Range)),ROW()-ROW($B$22),1)=0,"",INDEX(INDIRECT(INDIRECT(Week2Range)),ROW()-ROW($B$22),1)))

I get blank so I guess it is causing an error so tripping the ISERROR

However, with

INDEX(INDIRECT(Week2Range)...

I get the right result. I guess that was a typo with the INDIRECT twice.

Thanks
Rob H
0
 
LVL 32

Author Comment

by:Rob Henson
ID: 40311657
Sorry, the double INDIRECT was correct, the following now working:

=IF(ISERROR(INDEX(INDIRECT(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$46,2,FALSE)&"Range")),ROW()-ROW($B$22),1)),"",IF(INDEX(INDIRECT(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$46,2,FALSE)&"Range")),ROW()-ROW($B$22),1)=0,"",INDEX(INDIRECT(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$46,2,FALSE)&"Range")),ROW()-ROW($B$22),1)))

As an aside, any suggestions for making shorter?

Thanks
Rob H
0
 
LVL 32

Author Closing Comment

by:Rob Henson
ID: 40311663
Thanks for your help!
0
 
LVL 49

Expert Comment

by:Rgonzo1971
ID: 40311725
Im not sure why you have to test for Index = 0

=IFERROR(IF(INDEX(INDIRECT(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$46,2,FALSE)&"Range")),ROW()-ROW($B$22),1)=0,NA(),INDEX(INDIRECT(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$46,2,FALSE)&"Range")),ROW()-ROW($B$22),1)),"")

if Not
=IFERROR(INDEX(INDIRECT(INDIRECT("Week"&VLOOKUP($D$1,$AD$1:$AE$46,2,FALSE)&"Range")),ROW()-ROW($B$22),1),"")

Regards
0
 
LVL 32

Author Comment

by:Rob Henson
ID: 40311748
Thanks again, first suggestion works great.

I am testing for INDEX = 0 for the occasions when there is an odd number of Charge Lines so weeks 1 & 2 will have differing numbers.

Converting to blank is then allowed for in the spread of time calculations.

Thanks
Rob H
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A little background as to how I came to I design this code: Around 5 years ago I designed an add-in that formatted Excel files to a corporate standard, applying different cell colours and font type depending on whether the cells contained inputs,…
Freeze panes is an option within all variants of Excel to enable parts of a sheet to remain stationary when the cursor is in another part of the sheet. This is a very useful feature which is overlooked or under used.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
This Micro Tutorial will demonstrate the scrolling table in Microsoft Excel using the INDEX function.

786 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question