IVANru писал(а):DATE,OPEN,HIGH,LOW,CLOSE,Percent,Vol
Трейдун?
Не знаю для чего Вам все это нужно...
Но более быстрым и продуктивным будет все-таки использование массивов.
Вот пример для Вашего первого варианта:
- Код: Выделить всё
' Это нужно засунуть в отдельный модуль.
Option Explicit
Public Sub HMaxLMin()
Dim varBsArray As Variant ' это будет наш базовый массив
Dim varRsltArray As Variant ' а это - будущий массив для сохранения результата
Dim intFstRow As Integer ' первая строка, раб-го диапазона с необходимыми данными
Dim intLstRow As Integer ' последняя строка, раб. диапазона
Dim intUnRow As Integer ' общее кол-во строк, не содержащих нужные данные*
Dim n As Integer, m As Integer ' счетчики
' Переменные для работы с данными из базового массива:
Dim H1 As Integer, H2 As Integer
Dim L1 As Integer, L2 As Integer, O As Integer
' Вычисляем рабочий диапазон необходимых данных
' (вместо 1 и 0 нужно будет подставить свои значения):
intFstRow = 1
intUnRow = 0
intLstRow = ActiveSheet.UsedRange.Rows.Count - intUnRow
' Объявляем количество строк в массиве с резалтами:
ReDim varRsltArray(intLstRow - 2, 0)
' "Одним махом" заполняем базовый массив:
varBsArray = Range(Cells(intFstRow, 2), Cells(intLstRow, 4)).Value
' Вычисляем, что нам нужно и заполняем второй массив резалтами,
' одновременно их форматируя:
For n = 2 To UBound(varBsArray)
O = varBsArray(n, 1)
H1 = varBsArray(n - 1, 2)
H2 = varBsArray(n, 2)
L1 = varBsArray(n - 1, 3)
L2 = varBsArray(n, 3)
m = n - 2
If (H2 > H1 And L2 > L1) Or (H2 > H1 And L2 < L1) Then
varRsltArray(m, 0) = Format(((H2 - H1) / O) / 100, "#0.#0000000")
ElseIf (H2 < H1 And L2 < L1) Or (H2 > H1 And L2 < L1) Then
varRsltArray(m, 0) = Format(((L1 - L2) / O) / 100, "#0.#0000000")
End If
Next n
' Так же "одним махом", заполняем столбец Percent значениями:
With Range(Cells(intFstRow, 6), Cells(intLstRow - 1, 6))
.Value = varRsltArray()
End With
Erase varBsArray, varRsltArray ' очищаем память
End Sub
* Это строки, находящиеся вне рабочего диапазона, в его начале или конце, либо и то и другое вместе. Например, таковой является строка: "DATE,OPEN,HIGH,LOW,CLOSE,Percent,Vol"
Вот вкратце и усе. (По идее, надо бы ишшо приткнуть какой-нить обработчик ашипок... Но это уже самостоятельно.
)
P.S. Писал вчера.