Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Dear Forum,
I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Once the range has been selected:
Sub hfakdf() For Each r In Selection r.Formula = "=int(Rand() *" & Selection.Count & "+1)" Next End Sub -- Gary''s Student - gsnu200802 "matt3542" wrote: Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi Gary, any chance you could give the code in full as I am still struggling,
I'm really new to all this, many thanks. Matt "Gary''s Student" wrote: Once the range has been selected: Sub hfakdf() For Each r In Selection r.Formula = "=int(Rand() *" & Selection.Count & "+1)" Next End Sub -- Gary''s Student - gsnu200802 "matt3542" wrote: Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi, Many thanks I eventually got that to work - one slight glitch is the fact
that I didn't want any duplicate values to occur, is there a way the code below could be amended to get around this problem so that all the numbers within the range appears only once? Thanks, Matt "Gary''s Student" wrote: Once the range has been selected: Sub hfakdf() For Each r In Selection r.Formula = "=int(Rand() *" & Selection.Count & "+1)" Next End Sub -- Gary''s Student - gsnu200802 "matt3542" wrote: Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
This approach requires the installation of the AnalysisToolPak...
'---- Sub RandomByChoice() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = 10 y = 5 N = x& * y& Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub '---- You may also want to take a look at my "Special Randoms" workbook. It can be downloaded at http://excelusergroup.org/media/ -- Jim Cone Portland, Oregon USA "matt3542" wrote in message Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Many Thanks Jim, that worked brilliantly! Have a good weekend, Matt
"Jim Cone" wrote: This approach requires the installation of the AnalysisToolPak... '---- Sub RandomByChoice() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = 10 y = 5 N = x& * y& Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub '---- You may also want to take a look at my "Special Randoms" workbook. It can be downloaded at http://excelusergroup.org/media/ -- Jim Cone Portland, Oregon USA "matt3542" wrote in message Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Apologies Jim but upon closer inspection although the dimensions of the table
are fine, my aim was to create a table of data with random numbers where the range of random numbers is between 1 and the total number of cells with NO duplicates. I have used your code below and it does work but it duplicates values, i.e if I specify a table 5 * 5 I would expect it to be populated at random with the numbers 1 - 25 from A5:E5 with each number appearing only once. At present this code is returning duplicate values. Is there any way I can prevent this from occurring? Sub RandomTable() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = InputBox("Please enter the number of Columns required for the table") y = InputBox("Please enter the number of Rows required for the table") N = x& * y& Sheets("Sheet1").Select Range("A1").Select Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub Many Thanks Matt "Jim Cone" wrote: This approach requires the installation of the AnalysisToolPak... '---- Sub RandomByChoice() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = 10 y = 5 N = x& * y& Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub '---- You may also want to take a look at my "Special Randoms" workbook. It can be downloaded at http://excelusergroup.org/media/ -- Jim Cone Portland, Oregon USA "matt3542" wrote in message Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hello Matt,
I suggest to use my UDF UniqRandInt or VBUniqRandInt: http://www.sulprobil.com/html/uniqrandint.html Regards, Bernd |
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Or this...
'-- Sub RandomByChoice_R1() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long Dim M As Long Dim i As Long x = 5 y = 10 i = x& * y& Set rng = ActiveCell.Resize(y, x) For N = 1 To i Do M = Int(i * Rnd + 1) If Len(rng(M).Value) = 0 Then rng(M).Value = N Exit Do End If Loop Next Set rng = Nothing End Sub '-- Jim Cone Portland, Oregon USA "matt3542" wrote in message Apologies Jim but upon closer inspection although the dimensions of the table are fine, my aim was to create a table of data with random numbers where the range of random numbers is between 1 and the total number of cells with NO duplicates. I have used your code below and it does work but it duplicates values, i.e if I specify a table 5 * 5 I would expect it to be populated at random with the numbers 1 - 25 from A5:E5 with each number appearing only once. At present this code is returning duplicate values. Is there any way I can prevent this from occurring? Sub RandomTable() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = InputBox("Please enter the number of Columns required for the table") y = InputBox("Please enter the number of Rows required for the table") N = x& * y& Sheets("Sheet1").Select Range("A1").Select Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub Many Thanks Matt "Jim Cone" wrote: This approach requires the installation of the AnalysisToolPak... '---- Sub RandomByChoice() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = 10 y = 5 N = x& * y& Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub '---- You may also want to take a look at my "Special Randoms" workbook. It can be downloaded at http://excelusergroup.org/media/ -- Jim Cone Portland, Oregon USA "matt3542" wrote in message Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
#10
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thankyou Jim, that worked just right
"Jim Cone" wrote: Or this... '-- Sub RandomByChoice_R1() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long Dim M As Long Dim i As Long x = 5 y = 10 i = x& * y& Set rng = ActiveCell.Resize(y, x) For N = 1 To i Do M = Int(i * Rnd + 1) If Len(rng(M).Value) = 0 Then rng(M).Value = N Exit Do End If Loop Next Set rng = Nothing End Sub '-- Jim Cone Portland, Oregon USA "matt3542" wrote in message Apologies Jim but upon closer inspection although the dimensions of the table are fine, my aim was to create a table of data with random numbers where the range of random numbers is between 1 and the total number of cells with NO duplicates. I have used your code below and it does work but it duplicates values, i.e if I specify a table 5 * 5 I would expect it to be populated at random with the numbers 1 - 25 from A5:E5 with each number appearing only once. At present this code is returning duplicate values. Is there any way I can prevent this from occurring? Sub RandomTable() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = InputBox("Please enter the number of Columns required for the table") y = InputBox("Please enter the number of Rows required for the table") N = x& * y& Sheets("Sheet1").Select Range("A1").Select Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub Many Thanks Matt "Jim Cone" wrote: This approach requires the installation of the AnalysisToolPak... '---- Sub RandomByChoice() Dim rng As Range Dim x As Long Dim y As Long Dim N As Long x = 10 y = 5 N = x& * y& Set rng = ActiveCell.Resize(y, x) rng.Formula = "=RandBetween(1," & N & ")" rng.Value = rng.Value Set rng = Nothing End Sub '---- You may also want to take a look at my "Special Randoms" workbook. It can be downloaded at http://excelusergroup.org/media/ -- Jim Cone Portland, Oregon USA "matt3542" wrote in message Dear Forum, I am relatively new to VBA programming and as such would very much appreciate any help with regards to writing VBA code that would allow me to create a loop to compile a X (where x represents the number of columns provided by a user via an inputbox) by Y (where y represents the number of rows, again provided by an input box) size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells. I have been tinkering with the notation - ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) but have not managed to get it to work. Can anyone suggest a solution that uses the above notation as I would like to understand more and have other areas of work that I could apply its principles to. Any help gratefully received Regards Matt - Create a new workbook - Setup an InputBox to ask the user for their required number of columns for a table of data (x) - Setup an InputBox to ask the user for their required number of rows for a table of data (y) - Setup a loop to compile a x by y size table with each cell having a random value in it where the range of random numbers is between 1 and the total number of cells (tip: ActiveCell.FormulaR1C1 = Int((TOTAL NUMBER OF CELLS * Rnd) + 1) |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
getting numbers divisible by 4 from random numbers in ascending order | Excel Worksheet Functions | |||
Creating Unique Random Numbers? | Excel Programming | |||
Can Excel pick random numbers from 1-300 and not repeat numbers? | Excel Discussion (Misc queries) | |||
Non-random numbers generated by excel's data analysis random gener | Excel Worksheet Functions | |||
Non-random numbers generated by excel's data analysis random gener | Excel Discussion (Misc queries) |