I
intoit
Hi,
I'm using the macro below that I found on the net. It works fine, but you'll
notice that the InputBox asks the user to select the range (Type: = 8). I'm
trying to modify the macro so that it asks the user for the column letter
within which the grouping labels exist (rather than range selection), and
then incorporate that information into the macro to execute the task. I can
create such an InputBox just fine (e.g., column_letter =
Application.InputBox("Which column (letter) contains the grouping variable
labels?", Type:=2), the problem is that I don't know how to integrate it into
the rest of the macro to work.
Any advice greatly appreciated.
Dim rng_grouping1 As Range
rng_regrouping As Long
rng_resized As Long
output_array2()
criteria1 As Long
criteria2 As Long
myNum As Double
number_value2 As Long
Sheets("Data").Select
Set rng_grouping1 = Application.InputBox _
("Select the spreadsheet range that contains the unit labels", Type:=8)
If rng_grouping1 Is Nothing Then Exit Sub
rng_regrouping = rng_grouping1.Value: Set rng_grouping1 = Nothing
Set rng_grouping1 = Range("Data!$FF:$FI")
If rng_grouping1 Is Nothing Then Exit Sub
rng_resized = rng_grouping1.Resize(UBound(rng_regrouping, 1), 4).Value
myNum = 0.999999
ReDim output_array2(1 To UBound(rng_regrouping, 1), 1 To 5)
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For criteria1 = 1 To UBound(rng_regrouping, 1)
If Not .exists(rng_regrouping(criteria1, 1)) Then
number_value2 = number_value2 + 1: output_array2(number_value2,
1) = rng_regrouping(criteria1, 1): .Item(rng_regrouping(criteria1, 1)) =
number_value2
End If
For criteria2 = 1 To 4
If (rng_resized(criteria1, criteria2) > 0) *
(rng_resized(criteria1, criteria2) < myNum) Then
output_array2(.Item(rng_regrouping(criteria1, 1)), criteria2
+ 1) = output_array2(.Item(rng_regrouping(criteria1, 1)), criteria2 + 1) + 1
End If
Next
Next
End With
With Sheets("Units_Fit").Cells(1)
.Resize(, 5).Value = Array("Unit", "R_AVG", "M_AVG", "T_AVG", "O_AVG")
With .Offset(1).Resize(number_value2, 5)
.Value = output_array2
On Error Resume Next
.SpecialCells(4).Value = 0
End With
End With
End Sub
I'm using the macro below that I found on the net. It works fine, but you'll
notice that the InputBox asks the user to select the range (Type: = 8). I'm
trying to modify the macro so that it asks the user for the column letter
within which the grouping labels exist (rather than range selection), and
then incorporate that information into the macro to execute the task. I can
create such an InputBox just fine (e.g., column_letter =
Application.InputBox("Which column (letter) contains the grouping variable
labels?", Type:=2), the problem is that I don't know how to integrate it into
the rest of the macro to work.
Any advice greatly appreciated.
Dim rng_grouping1 As Range
rng_regrouping As Long
rng_resized As Long
output_array2()
criteria1 As Long
criteria2 As Long
myNum As Double
number_value2 As Long
Sheets("Data").Select
Set rng_grouping1 = Application.InputBox _
("Select the spreadsheet range that contains the unit labels", Type:=8)
If rng_grouping1 Is Nothing Then Exit Sub
rng_regrouping = rng_grouping1.Value: Set rng_grouping1 = Nothing
Set rng_grouping1 = Range("Data!$FF:$FI")
If rng_grouping1 Is Nothing Then Exit Sub
rng_resized = rng_grouping1.Resize(UBound(rng_regrouping, 1), 4).Value
myNum = 0.999999
ReDim output_array2(1 To UBound(rng_regrouping, 1), 1 To 5)
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For criteria1 = 1 To UBound(rng_regrouping, 1)
If Not .exists(rng_regrouping(criteria1, 1)) Then
number_value2 = number_value2 + 1: output_array2(number_value2,
1) = rng_regrouping(criteria1, 1): .Item(rng_regrouping(criteria1, 1)) =
number_value2
End If
For criteria2 = 1 To 4
If (rng_resized(criteria1, criteria2) > 0) *
(rng_resized(criteria1, criteria2) < myNum) Then
output_array2(.Item(rng_regrouping(criteria1, 1)), criteria2
+ 1) = output_array2(.Item(rng_regrouping(criteria1, 1)), criteria2 + 1) + 1
End If
Next
Next
End With
With Sheets("Units_Fit").Cells(1)
.Resize(, 5).Value = Array("Unit", "R_AVG", "M_AVG", "T_AVG", "O_AVG")
With .Offset(1).Resize(number_value2, 5)
.Value = output_array2
On Error Resume Next
.SpecialCells(4).Value = 0
End With
End With
End Sub