Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Excel VB Max & Min value + cell address

Posted on 2013-01-22
12
Medium Priority
?
1,413 Views
Last Modified: 2013-01-24
Hello Experts,

I have hit a wall in trying to get data calculated correctly in my routine.  I keep getting [Invalid Qualifer].

I want to find the max range in a column then find the address of that cell and use the offset for another cell.

Here is my code as it stands now that does not work:

Sub FindMaxMin() 'this is a sheet routine

    Dim ThisRange As Range
    Dim lRow As Long
    Dim lCol As Long
   
    For lRow = 3 To 13
      For lCol = 3 To 3     '(I cut this to 3 To 3 for testing, but it will be 3 TO 24)
         'r = 15 To 19

         ThisRange = (Range(lRow, lCol))

         Sheet4.Cells(15, lCol).Value = Sheet4.MaxAddress(ThisRange).Value
         Sheet4.cells(15, lCol -2) = cell.address.offset(,-2)

         'Next r  - I pulled this out and defaulted to row 15 just for testing.

      Next lCol

    Next lRow
   
End Sub

Function MaxAddress(ByRef ThisRange As Range) As String
   
    Dim cel As Range
   
    For Each cel In ThisRange
   
        If cel = Application.WorksheetFunction.Max(ThisRange) Then MaxAddress = cel.Address
   
    Next cel
   
   ' I need to add these functions after I get the first one to work properly.

    'FirstMax = Application.WorksheetFunction.Max(rng) - this is row 15
    'NextMax = Application.WorksheetFunction.Large(rng, 2)  - this is row 16
    'FirstMin = Application.WorksheetFunction.Min(rng)  - this is row 17
    'NextMin = Application.WorksheetFunction.Small(rng, 2) - this is row 18
   
End Function

Thanks,
Michael
0
Comment
Question by:mike637
  • 6
  • 4
  • 2
12 Comments
 
LVL 26

Expert Comment

by:redmondb
ID: 38808237
Hi, mike637.

This line...
ThisRange = (Range(lRow, lCol))
...should be...
Set ThisRange = (Range(lRow, lCol))

Regards,
Brian.
0
 

Author Comment

by:mike637
ID: 38808243
Hi Brian,

This still errored out as bad qualifier.

Would it be easier if I sent you the workbook on this?  I really need some help or guidance.

Michael
0
 
LVL 26

Expert Comment

by:redmondb
ID: 38808249
Apologies, mike637. I was too quick. There are two further items...

The one actually causing your error...
Sheet1.MaxAddress(ThisRange).Value
...should be...
Sheet1.MaxAddress(ThisRange)

Finally...
Cell.Address.Offset(, -2)
...is that an undefined variable?

Regards,
Brian.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:mike637
ID: 38808262
Brian,

The Cell.Address offset is a variable but it is always related to the address of the MaxAddress.

Michael
0
 
LVL 26

Expert Comment

by:redmondb
ID: 38808278
<blush> And...
Set ThisRange = (Range(lRow, lCol))
...should be...
Set ThisRange = (cells(lRow, lCol))

I an issue with...
Cell.Address.Offset(, -2)
...but there's another problem - if Cell is defined (and set) as a range, you'r eprobably looking for...
Cell.Offset(, -2).Address

So, maybe posting the file would be a good idea!

Thanks,
Brian.
0
 
LVL 26

Assisted Solution

by:redmondb
redmondb earned 1000 total points
ID: 38808282
mike637,

Apologies, crossing posts, so please see my previous post.

The Cell.Address offset is a variable but it is always related to the address of the MaxAddress.
From what you've posted, it's neither a defined nor a set variable. Even if its definition is elsewhere it's not connected to MaxAddress.

Regards,
Brian.
0
 

Author Comment

by:mike637
ID: 38808291
As requested,

Just tell me where to send the check to - so you receive it.

Michael
MonthyBusinessReview.xlsm
0
 
LVL 43

Expert Comment

by:Saqib Husain, Syed
ID: 38808292
Try
Sub FindMaxMin() 'this is a sheet routine

    Dim ThisRange As Range
    Dim lRow As Long
    Dim lCol As Long
   
    For lRow = 3 To 13
      For lCol = 3 To 3     '(I cut this to 3 To 3 for testing, but it will be 3 TO 24)
         'r = 15 To 19

         Set ThisRange = (Cells(lRow, lCol))

         Sheet4.Cells(15, lCol).Value = MaxAddress(ThisRange)
         Sheet4.Cells(15, lCol - 2) = Range(MaxAddress(ThisRange)).Offset(, -2)

         'Next r  - I pulled this out and defaulted to row 15 just for testing.

      Next lCol

    Next lRow
   
End Sub

Function MaxAddress(ByRef ThisRange As Range) As String
   
    Dim cel As Range
   
    For Each cel In ThisRange
   
        If cel = Application.WorksheetFunction.Max(ThisRange) Then MaxAddress = cel.Address
   
    Next cel
   
   ' I need to add these functions after I get the first one to work properly.

    'FirstMax = Application.WorksheetFunction.Max(rng) - this is row 15
    'NextMax = Application.WorksheetFunction.Large(rng, 2)  - this is row 16
    'FirstMin = Application.WorksheetFunction.Min(rng)  - this is row 17
    'NextMin = Application.WorksheetFunction.Small(rng, 2) - this is row 18
   
End Function

Open in new window

0
 
LVL 26

Expert Comment

by:redmondb
ID: 38808304
mike637,

Two of us working on this separately is only going to cause confusion, so I'll step aside as long as ssaqibh's on it.

Regards,
Brian.
0
 
LVL 43

Accepted Solution

by:
Saqib Husain, Syed earned 1000 total points
ID: 38808530
I have written my own routine called getmaxmin2 in the module1. Check it out
Copy-of-MonthyBusinessReview-3.xlsm
0
 

Author Closing Comment

by:mike637
ID: 38814657
Thank you Brian and ssaquibh,

Your guidance has helped out a lot.  I split the points on this to be fair to both - expecially when both of you were taking out your time to assist.

Thanks again,
Michael
0
 
LVL 26

Expert Comment

by:redmondb
ID: 38814775
Thanks, Michael.
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

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

This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

886 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