Row parts and range confusion

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Hi using matching to identify a particular cell, I want to search and sum the
range of the contents of a cell - in a different column for the same row.

e.g. I want to sum the range contained in cell H36 - e.g. "query!$M$2$M13$'
and I have already found the matching row by locating the single range cell
B36 which is set via Set rng2 = rng1(resFinal)

I set a particular cell as a range(rng2 is set to the value of B36) and then
try to refer to the same row but another column in the totals line

Can someone explain to me how ranges work e.g. what is Cells(rng2.Row,
"H").Value and why the totals line below is falling over
- I did not write it but when I run it the locals window blanks.

Many thanks again
Jello.


Public Function regionTotal(countryRng As String) As Long
 
if rng2 is B36

and H36 contains the string "query!M2:M13" without the double quotes, then

Total = Application.WorksheetFunction.Sum(rng2.parent.Range( _
rng2.parent.Cells(rng2.Row, "H").Value).Value)

would evaluate to

Total =
Application.WorksheetFunction.Sum(rng2.parentRange("query!M2:M13").Value)

If rng2 is in sheet query (which it appears it isn't), then that should
work. If it isn't, then you need to change the code to

Total = Application.WorksheetFunction.Sum(Range( _
rng2.parent.Cells(rng2.Row, "H").Value).Value)

Cell H36 didn't contain a sheet name when this was written.
 
Dear Tom,

Thanks for the reply.
I think this is probably my fault again in that I wonder if it is because
the reference to column "H" is on another sheet named calc, the same sheet
where we got the search range info via Set rng = Range("calc!B10") '
Apples
So I have:
rng2 is B36 value but on sheet 'calc' and = "Michael Adams UK"
H36 contains the string "query!M2:M13" without the double quotes
BUT AGAIN THIS CELL IS ON SHEET 'calc' !

Is that why it fails when you say:
Total = Application.WorksheetFunction.Sum(rng2.parent.Range( _
rng2.parent.Cells(rng2.Row, "H").Value).Value)

as it is expecting column H from the active sheet ? I assigned a macro to my
function "regionTotal" in a cell on another sheet !
If this is the case is there any way round this ?
I am currently experimenting with how to set ranges....

Apologies if that was crucial.
Many thanks,
Jello
 
If your not doing this in a sheet module then you can do

Total = Application.WorksheetFunction.Sum(Range( _
rng2.parent.Cells(rng2.Row, "H").Value).Value)

like I said in my previous response.

If it is in a sheet module then do

Total = Application.WorksheetFunction.Sum(Worksheets("query").Range( _
rng2.parent.Cells(rng2.Row, "H").Value).Value)


But this limits the flexibility of this approach.

Yes, what you said and which is what i previously said, is the problem.
 
Tom,

Many thanks - apologies I am so dumb I did not even think of whether it was
a sheet module or not - now I see but no just a function on a worksheet.

I thought before I tried both versions and they didn't work but the non-form
one works perfectly now so thank you very much and my apologies - I must have
gone wrong somewhere !

Actually I did come across my own way of getting round the problem(though
yours is obviously more efficient) - be interested to see what you think of
the following:


Public Function regionTotal(countryRng As String, msgOption As String) As Long

Dim rng As Range
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Dim rng4 As Range
Dim rng5 As Range
Dim rng6 As Range
Dim myRange As Range
Dim myCel As Range


Dim Total As Long

Dim res1 As Integer
Dim res2 As Integer
Dim resFinal As Integer

Dim myStr As String
Dim myformula As String

Set myCel = Range("b3")
myformula = myCel.Formula
Set rng = Range(myformula)

Total = 0
Set rng1 = Range("calc!B33:B65") ' range to be searched
res1 = Application.Match("*" & rng & "*", rng1, 0)
res2 = Application.Match("*" & countryRng & "*", rng1, 0)
resFinal = Application.WorksheetFunction.Max(res1, res2)

If Not IsError(resFinal) Then
Set rng2 = rng1(resFinal)

'returns as "calc!H35"
myStr = "calc!H" & returnFormattedStringFromNumber(rng2.Row)

'sets rng5.value as "query!M8:M23"
Set rng5 = Range(myStr)
Set rng6 = Range(rng5)

Total = Application.WorksheetFunction.Sum(rng6)
End If

regionTotal = Total

End Function

Public Function returnFormattedStringFromNumber(inputNumber As Integer) As
String

Dim myStr As String

myStr = Str(inputNumber)
myStr = Right(myStr, Len(myStr) - 1)

returnFormattedStringFromNumber = myStr

End Function
 
Whatever works for you is fine with me. After all, you know what you are
doing and I am just guessing.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top