Sub RCI()
'''-----http://www.samurai-logic.com/
'''-----Project of Trading System Development
'''------------------------------------------------------------------
''----B列(日付)、C列(始値)、D列(高値)、E列(安値)、F列(終値)
''----
''----TextBox1に計算期間
''--------------------------------------------------------------------
Dim length1%, length2%, i&, j&
Dim DayRank(), PriceRank() As Integer, NextRank%, NextRank2%, Temp!, Temp2!
Application.ScreenUpdating = False
Worksheets("RCI").Activate
length1 = CInt(ActiveSheet.TextBox1.Value)
Range("H3") = "RCI:" & length1
Range("H5:H5000").ClearContents
LastRow = Range("B4").End(xlDown).Row
ReDim DayRank(length1), PriceRank(length1)
For i = length1 + 5 To LastRow
NextRank = 0: NextRank2 = 0
For j = 1 To length1
DayRank(length1 - j + 1) = j
PriceRank(j) = WorksheetFunction.Rank(CDbl(Range("F" & i - _
(length1) + j).Value), Range("F" & i, "F" & i - (length1) + 1))
Next j
Temp2 = 0
For j = 1 To length1
Temp = (Abs(DayRank(j) - PriceRank(j))) ^ 2
Temp2 = Temp2 + Temp
Next j
Temp = (1 - (6 * Temp2) / (length1 * (length1 ^ 2 - 1))) * 100
If Temp >= -100 Then
''---終値の価格が同じ日がある場合計算上-100
''---以下になる可能性があるので、-100以下は-100とする
''---期間が短く、価格が動かない場合にたまに見られる。
Cells(i, 8).Value = Temp
Else: Cells(i, 8).Value = -100
End If
Next i
Range("H5", "H" & LastRow).NumberFormatLocal = "0.00"
Erase DayRank
Erase PriceRank
Application.ScreenUpdating = True
End Sub