Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. Public additionalConst As String
  2. Public additionalHeader As String
  3. Public targetCol As Integer
  4.  
  5.  
  6. Sub AddConstraintsWilcoxon()
  7.  
  8. Dim Target As String
  9. Dim HeaderY As String
  10. Dim ListY(1 To 2) As String
  11. Dim HeaderX() As String
  12. Dim ListX() As String
  13. Dim temp As String
  14. Dim shName As String
  15.  
  16. Dim i, j, k As Integer
  17. Dim flag As Integer
  18. Dim numC As Integer
  19. Dim minPopulation As Integer
  20. Dim lastColumn As Integer
  21. Dim lastRow As Long
  22. 'Dim targetCol As Integer
  23. Dim colCond As Integer
  24. Dim colList() As Integer
  25. Dim uniCol As Integer
  26. Dim colNo As Integer
  27.  
  28. Set WRS = ActiveWorkbook.Worksheets("Wilcoxon_Rank_Sum")
  29. Set MD = ActiveWorkbook.Worksheets("MetaData")
  30. Set UT = ActiveWorkbook.Worksheets("UniqueTable")
  31.  
  32. 'Getting sheet values
  33. Target = WRS.Cells(2, 2).Value
  34. HeaderY = WRS.Cells(2, 8).Value
  35. ListY(1) = WRS.Cells(3, 8).Value
  36. ListY(2) = WRS.Cells(4, 8).Value
  37. minPopulation = WRS.Cells(11, 2).Value
  38. numC = WRS.Cells(10, 2).Value
  39.  
  40. 'Getting constraints from sheet
  41. ReDim HeaderX(numC)
  42. ReDim ListX(numC)
  43. ReDim colList(numC)
  44.  
  45. For i = 1 To numC
  46. HeaderX(i) = WRS.Cells(i + 1, 4).Value
  47. ListX(i) = WRS.Cells(i + 1, 6).Value
  48. Next i
  49.  
  50. lastColumn = MD.Cells(1, Columns.Count).End(xlToLeft).Column
  51. 'lastRow = MD.Cells(Rows.Count, 1).End(xlUp).Row
  52.  
  53. 'Getting column numbers for target and headerY columns
  54. For i = 1 To lastColumn
  55. temp = MD.Cells(1, i).Value
  56. If temp = Target Then
  57. targetCol = i
  58. ElseIf temp = HeaderY Then
  59. colCond = i
  60. End If
  61. Next i
  62.  
  63. uniCol = UT.Cells(1, Columns.Count).End(xlToLeft).Column
  64.  
  65. tableNum = 1
  66.  
  67. For i = 1 To 3 'uniCol
  68. flag = 1
  69. additionalHeader = UT.Cells(1, i).Value
  70. If additionalHeader <> HeaderY Then
  71. For j = 1 To numC
  72. If additionalHeader = HeaderX(j) Then
  73. flag = 0
  74. Exit For
  75. End If
  76. Next j
  77.  
  78. If flag = 1 Then
  79. Sheets.Add After:=Sheets(Sheets.Count)
  80. shName = "AdditionalTable-" & additionalHeader
  81. ActiveSheet.Name = shName
  82. Set AT = ActiveWorkbook.Sheets(shName)
  83. ReDim Preserve nameArr(tableNum)
  84. nameArr(tableNum) = shName
  85. tableNum = tableNum + 1
  86.  
  87. colNo = WorksheetFunction.Match(additionalHeader, MD.Rows(1), 0)
  88. lastRow = UT.Cells(Rows.Count, i).End(xlUp).Row
  89.  
  90. 'Iterating through each unique categorical variables in column
  91. For j = 2 To lastRow
  92. additionalConst = UT.Cells(j, i).Value
  93. Call WilcoxonRankCalculation(colNo)
  94. Next j
  95. End If
  96. End If
  97. Next i
  98.  
  99.  
  100. End Sub
  101.  
  102.  
  103. Sub WilcoxonRankCalculation(colNo As Integer)
  104.  
  105. Dim lastRow As Long
  106. Dim lastColumn As Integer
  107. Dim rIter As Range
  108. Dim condStr As String
  109. Dim nValue(1 To 3) As Long
  110.  
  111. 'Filtering for additional constraint
  112. MD.Activate
  113. MD.AutoFilterMode = False
  114.  
  115. lastRow = MD.Cells(Rows.Count, 1).End(xlUp).Row
  116. lastColumn = MD.Cells(1, Columns.Count).End(xlToLeft).Column
  117.  
  118. condStr = "=" & Trim(additionalConst)
  119. MD.Cells.AutoFilter Field:=colNo, Criteria1:=condStr
  120.  
  121. nValue(3) = Application.WorksheetFunction.Subtotal(103, MD.Columns(targetCol)) - 1
  122.  
  123. If nValue(3) > 0 Then
  124. MD.Cells(1, lastColumn + 1).Value = "Rank - " & additionalConst
  125. Set visRange = MD.Range(Cells(2, targetCol), Cells(lastRow, targetCol)).SpecialCells(xlCellTypeVisible)
  126.  
  127. For Each rIter In visRange
  128. If IsNumeric(rIter.Value) Then
  129. MD.Cells(rIter.Row, lastColumn + 1).Value = Application.WorksheetFunction.Rank_Avg(rIter.Value, MD.Columns(targetCol).SpecialCells(xlCellTypeVisible), 1)
  130. End If
  131. Next rIter
  132. End If
  133.  
  134. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement