ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Comparing a range of values against a cell (https://www.excelbanter.com/excel-programming/391758-comparing-range-values-against-cell.html)

Memento

Comparing a range of values against a cell
 
Hello Guys,

This code kills me at the moment. I've already realized that working with
ranges etc, can be quite cumbersome and tricky:

Function VBCode(vCode As String, Jobtime As Single, Roster As Single) As
Single
Dim cell As Variant
Set cRange = Worksheets("CODE").range("CodeNorm")
For Each cell In cRange
If cell = vCode Then
VBCode = Jobtime / 5
Else
VBCode = ""
End If
Next cell
End Function

The range "CodeNorm" are just short strings.

The crazy thing is that when i use this function in a cell, it keeps giving
me a "a value in the cell has a incorrect datatype". When i put a breakpoint
at "If cell = vCode then", I can see they all contain the actual string
values I need for this to work. So i'm kinda lost here, I don't know why this
doesn't work as it needs to be...

Anyone can easily recreate this by creating some string items like "ADV,
TOP, BUJ", etc... in a few adjacent cells, make it a named range "CodeNorm",
create the above function in a module, and try the function in a cell.

Anyone knows why this doesn't work?

Thanks in advance guys.

Memento


NickHK

Comparing a range of values against a cell
 
It always helps to avoid Variants unless you really need one.
Also, there's no point looping all cells in that range, as only the last
comparison will matter and its result returned.
So either use .End(xlDown) or exit the loop once some criteria is reached.
But I suspect your logic is not correct in applying this code.
Also, Roster serves no purpose.
But anyway...

Function VBCode(vCode As String, Jobtime As Single, Roster As Single) As
Single
Dim cell As Range

For Each cell In Worksheets("CODE").range("CodeNorm")
If cell.Value = vCode Then
VBCode = Jobtime / 5
Else
'VBCode = ""
VBCode = 0 'As the function is supposed to return a single
End If
Next cell

End Function

NickHK

"Memento" wrote in message
...
Hello Guys,

This code kills me at the moment. I've already realized that working with
ranges etc, can be quite cumbersome and tricky:

Function VBCode(vCode As String, Jobtime As Single, Roster As Single) As
Single
Dim cell As Variant
Set cRange = Worksheets("CODE").range("CodeNorm")
For Each cell In cRange
If cell = vCode Then
VBCode = Jobtime / 5
Else
VBCode = ""
End If
Next cell
End Function

The range "CodeNorm" are just short strings.

The crazy thing is that when i use this function in a cell, it keeps

giving
me a "a value in the cell has a incorrect datatype". When i put a

breakpoint
at "If cell = vCode then", I can see they all contain the actual string
values I need for this to work. So i'm kinda lost here, I don't know why

this
doesn't work as it needs to be...

Anyone can easily recreate this by creating some string items like "ADV,
TOP, BUJ", etc... in a few adjacent cells, make it a named range

"CodeNorm",
create the above function in a module, and try the function in a cell.

Anyone knows why this doesn't work?

Thanks in advance guys.

Memento




Memento

Comparing a range of values against a cell
 
Yes NickHK I Know,

But i excluded that logic to make my point clearer, so i left out the Roster
(an ElseIf), and I use a Exit For, so the loop stops automatically when a
match is found.

Thanks a lot!

"NickHK" wrote:

It always helps to avoid Variants unless you really need one.
Also, there's no point looping all cells in that range, as only the last
comparison will matter and its result returned.
So either use .End(xlDown) or exit the loop once some criteria is reached.
But I suspect your logic is not correct in applying this code.
Also, Roster serves no purpose.
But anyway...

Function VBCode(vCode As String, Jobtime As Single, Roster As Single) As
Single
Dim cell As Range

For Each cell In Worksheets("CODE").range("CodeNorm")
If cell.Value = vCode Then
VBCode = Jobtime / 5
Else
'VBCode = ""
VBCode = 0 'As the function is supposed to return a single
End If
Next cell

End Function

NickHK

"Memento" wrote in message
...
Hello Guys,

This code kills me at the moment. I've already realized that working with
ranges etc, can be quite cumbersome and tricky:

Function VBCode(vCode As String, Jobtime As Single, Roster As Single) As
Single
Dim cell As Variant
Set cRange = Worksheets("CODE").range("CodeNorm")
For Each cell In cRange
If cell = vCode Then
VBCode = Jobtime / 5
Else
VBCode = ""
End If
Next cell
End Function

The range "CodeNorm" are just short strings.

The crazy thing is that when i use this function in a cell, it keeps

giving
me a "a value in the cell has a incorrect datatype". When i put a

breakpoint
at "If cell = vCode then", I can see they all contain the actual string
values I need for this to work. So i'm kinda lost here, I don't know why

this
doesn't work as it needs to be...

Anyone can easily recreate this by creating some string items like "ADV,
TOP, BUJ", etc... in a few adjacent cells, make it a named range

"CodeNorm",
create the above function in a module, and try the function in a cell.

Anyone knows why this doesn't work?

Thanks in advance guys.

Memento






All times are GMT +1. The time now is 10:04 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com