Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

How to add to the value of one cell an amount that depends upon the range of a different cell?

+1
−2

A user of Web Applications asked how to:

  • +1 when the value is >=5,
  • +2 when the value is >=10,
  • +3 when the value is >=15,
  • +4 when the value is >=20,
  • +5 when the value is >=25

and had tried:

=IF(F7>=5,H7+1,IF(F7>=10,H7+2,IF(F7>=15,H7+3,IF(F7>=20,H7+4,H7))))

in Google Sheets without success. The formula does however indicate that the 'value' resides in F7 and supplementation is of the H7 value.

As explained by an answer that retains the original concept of nested IFs:

    =IF(
       F7>=25,H7+5,
                  IF(
                   F7>=20,H7+4,
                               IF(
                                F7>=15,H7+3,
                                           IF(
                                              F7>=10,H7+2,
                                                          IF(F7>=5,H7+1,H7)
                                              )
                                   )
                      )
           )

If the first condition is F7>=5 then the result will always be +1 wether F7 = 5, 15, or even 200. It's because the first condition F7>=5 is always met.

Stepping down the ranges does achieve the desired result but is there a shorter of more versatile solution, since nested IFs with ranges are often problematic?

History
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

General comments (1 comment)

1 answer

+1
−0

One way is to create a lookup table (sorted ascending) and take advantage of VLOOKUP's is_sorted parameter to opt for "the nearest match (less than or equal to the search key)".

Say a table like so:

0	0
5	1
10	2
15	3
20	4
25	5

with the Named Range Table. Then a formula such as:

=vlookup(F7,Table,2)+H7 

to determine the supplement and add it to H7.

This approach could be versatile where changes to the ranges are required and more manageable than adapting a nested IF formula. The table is reasonably intuitive as quite similar to the requirement as expressed in the source question. It would be more so if the columns were switched over, but VOOKUP is simpler than an INDEX/MATCH pair and requires the search_key to be on the left of the range.

However, where the steps are uniform (of 5 each here) a separate table is not required:

=H7+choose(1+min(int(F7/5),5),0,1,2,3,4,5) 

applying CHOOSE, and a (slightly) shorter formula is possible:

=H7+min(int(F7/5),5) 

This adds to H7 the rounded down to integer (INT) result of dividing F7 by the range 'width' (each step is 5), capped at 5 (MIN).

The above applies to Excel as well.

History
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »