ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Decrease an array? (https://www.excelbanter.com/excel-programming/393349-decrease-array.html)

steve_doc

Decrease an array?
 
Hi all

Is it possible to decrease an array?

EG with the following Code. If I wanted to be left with the 3 highest number
in that array. I could add them to a Collection and remove them based on a
logic comparison, as 1 option. What are the other options, and are there
better watys of doing this?

Sub TestArrays()
Dim iDiceRoll(5) As Integer
Dim i As Integer

For i = 0 To 5
iDiceRoll(i) = ((6 * Rnd) + 1)
Next i
End Sub


Thanks in advance
Steve

Tom Ogilvy

Decrease an array?
 
Sub TestArrays()
Dim iDiceRoll As Variant
Dim i As Integer
Randomize
ReDim iDiceRoll(0 To 5)
For i = 0 To 5
iDiceRoll(i) = Int((6 * Rnd) + 1)
Next i
iDiceRoll = Application.Large(iDiceRoll, Array(1, 2, 3))
For i = LBound(iDiceRoll) To UBound(iDiceRoll)
Debug.Print i, iDiceRoll(i)
Next
End Sub

iDiceRoll will have a lower bound of 1 after the use of Large.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Hi all

Is it possible to decrease an array?

EG with the following Code. If I wanted to be left with the 3 highest number
in that array. I could add them to a Collection and remove them based on a
logic comparison, as 1 option. What are the other options, and are there
better watys of doing this?

Sub TestArrays()
Dim iDiceRoll(5) As Integer
Dim i As Integer

For i = 0 To 5
iDiceRoll(i) = ((6 * Rnd) + 1)
Next i
End Sub


Thanks in advance
Steve


steve_doc

Decrease an array?
 
Thanks Tom
Works a charm
Any chance on an explanation on the code

Steve

"Tom Ogilvy" wrote:

Sub TestArrays()
Dim iDiceRoll As Variant
Dim i As Integer
Randomize
ReDim iDiceRoll(0 To 5)
For i = 0 To 5
iDiceRoll(i) = Int((6 * Rnd) + 1)
Next i
iDiceRoll = Application.Large(iDiceRoll, Array(1, 2, 3))
For i = LBound(iDiceRoll) To UBound(iDiceRoll)
Debug.Print i, iDiceRoll(i)
Next
End Sub

iDiceRoll will have a lower bound of 1 after the use of Large.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Hi all

Is it possible to decrease an array?

EG with the following Code. If I wanted to be left with the 3 highest number
in that array. I could add them to a Collection and remove them based on a
logic comparison, as 1 option. What are the other options, and are there
better watys of doing this?

Sub TestArrays()
Dim iDiceRoll(5) As Integer
Dim i As Integer

For i = 0 To 5
iDiceRoll(i) = ((6 * Rnd) + 1)
Next i
End Sub


Thanks in advance
Steve


Tom Ogilvy

Decrease an array?
 
I gave you a nice long detailed explanation, but when I hit post, this great
communities web page said page not available and it was all lost. I am not
up for reentering it. So here is the abbreviated

put this in a cell

=LARGE({2,4,6,8,10,12},{1,2,3})

after entering, go to the formula bar and select the formula. Hit F9 to
evaluate it.

You will see what it returns.

hit escape to restore the formula.

See help on the Large Worksheet function in Excel.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Thanks Tom
Works a charm
Any chance on an explanation on the code

Steve

"Tom Ogilvy" wrote:

Sub TestArrays()
Dim iDiceRoll As Variant
Dim i As Integer
Randomize
ReDim iDiceRoll(0 To 5)
For i = 0 To 5
iDiceRoll(i) = Int((6 * Rnd) + 1)
Next i
iDiceRoll = Application.Large(iDiceRoll, Array(1, 2, 3))
For i = LBound(iDiceRoll) To UBound(iDiceRoll)
Debug.Print i, iDiceRoll(i)
Next
End Sub

iDiceRoll will have a lower bound of 1 after the use of Large.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Hi all

Is it possible to decrease an array?

EG with the following Code. If I wanted to be left with the 3 highest number
in that array. I could add them to a Collection and remove them based on a
logic comparison, as 1 option. What are the other options, and are there
better watys of doing this?

Sub TestArrays()
Dim iDiceRoll(5) As Integer
Dim i As Integer

For i = 0 To 5
iDiceRoll(i) = ((6 * Rnd) + 1)
Next i
End Sub


Thanks in advance
Steve


steve_doc

Decrease an array?
 
thanks again Tom

"Tom Ogilvy" wrote:

I gave you a nice long detailed explanation, but when I hit post, this great
communities web page said page not available and it was all lost. I am not
up for reentering it. So here is the abbreviated

put this in a cell

=LARGE({2,4,6,8,10,12},{1,2,3})

after entering, go to the formula bar and select the formula. Hit F9 to
evaluate it.

You will see what it returns.

hit escape to restore the formula.

See help on the Large Worksheet function in Excel.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Thanks Tom
Works a charm
Any chance on an explanation on the code

Steve

"Tom Ogilvy" wrote:

Sub TestArrays()
Dim iDiceRoll As Variant
Dim i As Integer
Randomize
ReDim iDiceRoll(0 To 5)
For i = 0 To 5
iDiceRoll(i) = Int((6 * Rnd) + 1)
Next i
iDiceRoll = Application.Large(iDiceRoll, Array(1, 2, 3))
For i = LBound(iDiceRoll) To UBound(iDiceRoll)
Debug.Print i, iDiceRoll(i)
Next
End Sub

iDiceRoll will have a lower bound of 1 after the use of Large.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Hi all

Is it possible to decrease an array?

EG with the following Code. If I wanted to be left with the 3 highest number
in that array. I could add them to a Collection and remove them based on a
logic comparison, as 1 option. What are the other options, and are there
better watys of doing this?

Sub TestArrays()
Dim iDiceRoll(5) As Integer
Dim i As Integer

For i = 0 To 5
iDiceRoll(i) = ((6 * Rnd) + 1)
Next i
End Sub


Thanks in advance
Steve


Dave Peterson

Decrease an array?
 
Just to add to Tom's abbreviated notes.

Instead of putting that formula in one cell, select a1:C1 and enter the formula
in A1, but hit ctrl-shift-enter to see what's returned in all three cells.



Tom Ogilvy wrote:

I gave you a nice long detailed explanation, but when I hit post, this great
communities web page said page not available and it was all lost. I am not
up for reentering it. So here is the abbreviated

put this in a cell

=LARGE({2,4,6,8,10,12},{1,2,3})

after entering, go to the formula bar and select the formula. Hit F9 to
evaluate it.

You will see what it returns.

hit escape to restore the formula.

See help on the Large Worksheet function in Excel.

--
Regards,
Tom Ogilvy

"steve_doc" wrote:

Thanks Tom
Works a charm
Any chance on an explanation on the code

Steve

"Tom Ogilvy" wrote:

Sub TestArrays()
Dim iDiceRoll As Variant
Dim i As Integer
Randomize
ReDim iDiceRoll(0 To 5)
For i = 0 To 5
iDiceRoll(i) = Int((6 * Rnd) + 1)
Next i
iDiceRoll = Application.Large(iDiceRoll, Array(1, 2, 3))
For i = LBound(iDiceRoll) To UBound(iDiceRoll)
Debug.Print i, iDiceRoll(i)
Next
End Sub

iDiceRoll will have a lower bound of 1 after the use of Large.

--
Regards,
Tom Ogilvy


"steve_doc" wrote:

Hi all

Is it possible to decrease an array?

EG with the following Code. If I wanted to be left with the 3 highest number
in that array. I could add them to a Collection and remove them based on a
logic comparison, as 1 option. What are the other options, and are there
better watys of doing this?

Sub TestArrays()
Dim iDiceRoll(5) As Integer
Dim i As Integer

For i = 0 To 5
iDiceRoll(i) = ((6 * Rnd) + 1)
Next i
End Sub


Thanks in advance
Steve


--

Dave Peterson


All times are GMT +1. The time now is 02:02 PM.

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