![]() |
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 |
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 |
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 |
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 |
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 |
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