Option Explicit
Option Base 1
Sub finalproject()
‘ Decleration of variables
Dim x, u, l, i, j, n, b As Integer
Dim frec1, frec2, frec3, frec4, frec5, frec6, frec7, frec8, frec9, frec10 As Integer
Dim g As String
Dim r() As Integer
‘ initial values input
x = Cells(4, 4)
ReDim r(x) As Integer
u = Cells(5, 4)
l = Cells(6, 4)
g = “_”
‘ finding the number of raws
n = Int(x / 7 + 1)
‘ calculating bucket size
b = Int((u – l) / 10)
‘ Generating random number and assigning them to cells
Do
For j = 1 To 7
r(x) = Int((u – l + 1) * Rnd + l)
Cells(i + 12, j + 2) = r(x)
If Cells(i + 12, j + 2) <= l + b Then
frec1 = frec1 + 1
Cells(12, 16) = frec1
End If
If Cells(i + 12, j + 2) <= l + (2 * b) Then
frec2 = frec2 + 1
Cells(13, 16) = Abs(frec2 – frec1)
End If
If Cells(i + 12, j + 2) <= l + (3 * b) Then
frec3 = frec3 + 1
Cells(14, 16) = Abs(frec3 – frec2)
End If
If Cells(i + 12, j + 2) <= l + (4 * b) Then
frec4 = frec4 + 1
Cells(15, 16) = Abs(frec4 – frec3)
End If
If Cells(i + 12, j + 2) <= l + (5 * b) Then
frec5 = frec5 + 1
Cells(16, 16) = Abs(frec5 – frec4)
End If
If Cells(i + 12, j + 2) <= l + (6 * b) Then
frec6 = frec6 + 1
Cells(17, 16) = Abs(frec6 – frec5)
End If
If Cells(i + 12, j + 2) <= l + (7 * b) Then
frec7 = frec7 + 1
Cells(18, 16) = Abs(frec7 – frec6)
End If
If Cells(i + 12, j + 2) <= l + (8 * b) Then
frec8 = frec8 + 1
Cells(19, 16) = Abs(frec8 – frec7)
End If
If Cells(i + 12, j + 2) <= l + (9 * b) Then
frec9 = frec9 + 1
Cells(20, 16) = Abs(frec9 – frec8)
End If
If Cells(i + 12, j + 2) <= l + (10 * b) Then
frec10 = frec10 + 1
Cells(21, 16) = Abs(frec10 – frec9)
End If
x = x – 1
If x = 0 Then Exit Do
Next j
i = i + 1
Loop Until n = i
‘ computing buckets and assigning them to thier cells
For i = 1 To 10
Cells(i + 11, 13) = i
Cells(i + 11, 14) = l + (i * b)
Next i
‘ determining class range for each bucket
For i = 1 To 10
Cells(11 + i, 15) = l & g & (l + b)
l = l + b + 1
Next i
‘ assigning array values to cells on the spread sheet
For x = 1 To x
Cells(x, 20) = r(x)
Next x
End Sub
question : in this VBA code the array r(x) only output the last value that the array holds into the spreadsheet and doesnt output the rest of the values that the array r(x) holds
for example if x = 15 that means r(x) have 15 places that i can store values in ( the problem is that r(x) only outpute the last value to the spread sheet )
please modify the program so the array r(x) would output all of it values into the spreadsheet .
Note : if you do not know the answer please leave it for some who knows and do not answer it .
Expert Answer
Your code with little modification which is boldened
————————————————————————————
Option Explicit
Option Base 1
Public Sub finalproject()
‘ Decleration of variables
Dim x, u, l, i, j, n, b As Integer
Dim frec1, frec2, frec3, frec4, frec5, frec6, frec7, frec8, frec9, frec10 As Integer
Dim g As String
Dim r() As Integer
‘ initial values input
x = Cells(4, 4)
ReDim r(x) As Integer
u = Cells(5, 4)
l = Cells(6, 4)
g = “_”
‘ finding the number of raws
n = Int(x / 7 + 1)
‘ calculating bucket size
b = Int((u – l) / 10)
‘ Generating random number and assigning them to cells
Do
For j = 1 To 7
r(x) = Int((u – l + 1) * Rnd + l)
Cells(i + 12, j + 2) = r(x)
If Cells(i + 12, j + 2) <= l + b Then
frec1 = frec1 + 1
Cells(12, 16) = frec1
End If
If Cells(i + 12, j + 2) <= l + (2 * b) Then
frec2 = frec2 + 1
Cells(13, 16) = Abs(frec2 – frec1)
End If
If Cells(i + 12, j + 2) <= l + (3 * b) Then
frec3 = frec3 + 1
Cells(14, 16) = Abs(frec3 – frec2)
End If
If Cells(i + 12, j + 2) <= l + (4 * b) Then
frec4 = frec4 + 1
Cells(15, 16) = Abs(frec4 – frec3)
End If
If Cells(i + 12, j + 2) <= l + (5 * b) Then
frec5 = frec5 + 1
Cells(16, 16) = Abs(frec5 – frec4)
End If
If Cells(i + 12, j + 2) <= l + (6 * b) Then
frec6 = frec6 + 1
Cells(17, 16) = Abs(frec6 – frec5)
End If
If Cells(i + 12, j + 2) <= l + (7 * b) Then
frec7 = frec7 + 1
Cells(18, 16) = Abs(frec7 – frec6)
End If
If Cells(i + 12, j + 2) <= l + (8 * b) Then
frec8 = frec8 + 1
Cells(19, 16) = Abs(frec8 – frec7)
End If
If Cells(i + 12, j + 2) <= l + (9 * b) Then
frec9 = frec9 + 1
Cells(20, 16) = Abs(frec9 – frec8)
End If
If Cells(i + 12, j + 2) <= l + (10 * b) Then
frec10 = frec10 + 1
Cells(21, 16) = Abs(frec10 – frec9)
End If
x = x – 1
If x = 0 Then Exit Do
Next j
i = i + 1
Loop Until n = i
‘ computing buckets and assigning them to thier cells
For i = 1 To 10
Cells(i + 11, 13) = i
Cells(i + 11, 14) = l + (i * b)
Next i
‘ determining class range for each bucket
For i = 1 To 10
Cells(11 + i, 15) = l & g & (l + b)
l = l + b + 1
Next i
‘ assigning array values to cells on the spread sheet
For x = 1 To UBound(r)
Cells(x, 20) = r(x)
Next x
End Sub
Private Sub CommandButton1_Click()
finalproject
End Sub
—————————————————————————–
Expla:
For x = 1 To UBound(r)
Cells(x, 20) = r(x)
Next x
Yor code was for x=1 to x ,Before this code value of x is 0 , and when x=1 it 1st iteration , The The loop runs x times i,e 1 time. and it prints r(1)
But we have to print all values of r(). So we loop must iterates n (number of elements in array) times . SO to number of elements in array use Ubound(r).
Note: you must provide values in the cell D$,D5,D6 and the values of r90 is shown in T column
———————————————-
output