ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Discussion (Misc queries) (https://www.excelbanter.com/excel-discussion-misc-queries/)
-   -   Finding a value quickly using VBA (https://www.excelbanter.com/excel-discussion-misc-queries/150292-finding-value-quickly-using-vba.html)

GeorgeJ

Finding a value quickly using VBA
 
Lets assume I have a column of numbers sorted in ascending order. Suppose
these numbers occupy the range B1:B1000. Suppose I want VBA code for

Function FindNum(Num as Long) as Long
[code]
End Function

which returns 0 if Num is not in column B and if it is returns the first row
in which Num is located. I realize I could write a loop to do this but is
there a faster, non-loop method? What about the case in which the numbers in
col B are not sorted?

Thanks

--
-regards

Toppers

Finding a value quickly using VBA
 
try:

=FINDNUM(B1:B1000,123)



Function FindNum(ByRef rng As Range, Num As Long) As Long
res = Application.Match(Num, rng, 0)
If IsError(res) Then
FindNum = 0
Else
FindNum = res + rng(1).Row - 1
End If

End Function

"GeorgeJ" wrote:

Lets assume I have a column of numbers sorted in ascending order. Suppose
these numbers occupy the range B1:B1000. Suppose I want VBA code for

Function FindNum(Num as Long) as Long
[code]
End Function

which returns 0 if Num is not in column B and if it is returns the first row
in which Num is located. I realize I could write a loop to do this but is
there a faster, non-loop method? What about the case in which the numbers in
col B are not sorted?

Thanks

--
-regards


excelent

Finding a value quickly using VBA
 
try: this is looking for 101

Sub Where()
On Error GoTo noMatch
MsgBox ("Row: ") & Range("B1:B1000").Find(101, LookIn:=xlValues,
lookat:=xlWhole).Row
End
noMatch:
MsgBox ("No match")
End Sub


"GeorgeJ" skrev:

Lets assume I have a column of numbers sorted in ascending order. Suppose
these numbers occupy the range B1:B1000. Suppose I want VBA code for

Function FindNum(Num as Long) as Long
[code]
End Function

which returns 0 if Num is not in column B and if it is returns the first row
in which Num is located. I realize I could write a loop to do this but is
there a faster, non-loop method? What about the case in which the numbers in
col B are not sorted?

Thanks

--
-regards


Pete_UK

Finding a value quickly using VBA
 
If the numbers are sorted then you could use a binary search method -
on average with 1000 numbers, it would only need to look at 10 to
determine if the item is in the list or not. However, if you have
duplicated numbers it will not necessarily find the first occurrence.

If the numbers are not sorted then you will have to use a sequential
search, which on average will need to look at 500 items out of a list
of 1000 to determine if the sought number is present.

Hope this helps.

Pete

On Jul 15, 6:30 pm, GeorgeJ wrote:
Lets assume I have a column of numbers sorted in ascending order. Suppose
these numbers occupy the range B1:B1000. Suppose I want VBA code for

Function FindNum(Num as Long) as Long
[code]
End Function

which returns 0 if Num is not in column B and if it is returns the first row
in which Num is located. I realize I could write a loop to do this but is
there a faster, non-loop method? What about the case in which the numbers in
col B are not sorted?

Thanks

--
-regards




Don Guillett

Finding a value quickly using VBA
 
simple one since you have the column
Function fn(x)
On Error GoTo nono:
fn = Columns(2).Find(x, lookat:=xlWhole).Row
nono:
End Function

--
Don Guillett
Microsoft MVP Excel
SalesAid Software

"GeorgeJ" wrote in message
...
Lets assume I have a column of numbers sorted in ascending order. Suppose
these numbers occupy the range B1:B1000. Suppose I want VBA code for

Function FindNum(Num as Long) as Long
[code]
End Function

which returns 0 if Num is not in column B and if it is returns the first
row
in which Num is located. I realize I could write a loop to do this but
is
there a faster, non-loop method? What about the case in which the numbers
in
col B are not sorted?

Thanks

--
-regards




All times are GMT +1. The time now is 09:16 AM.

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