Доброго времени суток! Помогайте новичку, есть конкретная задача , очень хочется ее решить самостоятельно, но пока в голове абсолютная каша. Буду благодарен за Ваши советы по пошаговому решению, или хотя бы направлению в нужное русло. Есть диапазон данных получаемый из внешних данных (на листе _data) Нужно найти в этом диапазоне, ВСЕ наборы из Bar, удовлетворяющие условиям, и записать их на лист Stat. Каждый набор состоит из 5 значений Bar (A,B,C,E,F). Наборы могут "накладываться" друг на друга,поэтому поиск каждого нового набора должен начинаться со следующего бара после текущего найденного B.
Нарисовал я блок схему, Написал условия для каждого бара (A,B,C,E,F). проверяю каждый новый бар на условие, и если бар удовлетворяет условию, его значение я записываю в temp_A,перехожу к следующему...., как все temp_, будут записаны значит набор собрался, пишем значения из temp_на лист Stat и переходим к поиску следующего набора( начинаем поиск со следующего бара за найденным B) Дальше мои познания заканчиваются. Помогите начать писать код VBA
Я условия не выкладывал, потому как заткнулся на первом же вложенном цикле. Поэтому и задал вопрос о помощи в написании кода ..пока на уровне "блоков". а условия вот они
i -исследуемый бар Temp_A -временное значение для текущего A и т.д Target=X% от High(Temp_B)-Low(Temp_C)
для A : Low(i)<Low(Temp_A) для B : High(i)>High(Temp_B) И Low(i)>Low(Temp_A) для С : High(i)<High(Temp_B) И Low(i)>Low(Temp_A) для E : High(i)>High(Temp_B) для F : (High(i)-High(Temp_B))>Target ИЛИ (High(Temp_B)-Low(i))>Target
omeverest, в посте 3 Вы написали условия с использованием программного языка. Напишите теперь те же условия, но обычными повседневными словами. А именно напишите, как Вы получили данные для листа "Stat", для ячейки "A2". Чтобы можно было понять принцип.
Поиск начинается со второй строки (с первой строки с данными) на листе _data, проверяем значение в столбце Low, если оно меньше значения Low предыдущей строки, то рассматриваем текущую строку, т.е в итоговом значении текущую ячейку Bar, как потенциальную на bar_A. почему потенциально -потому что в следующей строке в поиске может быть значение с еще меньшим Low. Запутано или понятно? Описывать дальше?
В текущем файле примере -на листе Stat лежат значения "от фонаря", просто для показа что должно получиться
Т.е. в Bar_A попадает значение Bar (столбец H) у которого наименьшее Low (столбец E) на конкретную дату (столбец A)? А что попадает в Bar_B, Bar_C и далее по списку?
Цитата
omeverest написал: на листе Stat лежат значения "от фонаря"
А вот это зря. С таким примером Вам подойдет любой макрос (тоже 'от фонаря'), который расставляет Даты/Время по ячейкам. Заполните пару тройку строк на листе Stat реальными данными с листа Data соответствующие всем тем условиям, которые Вы описали выше и объясните словами (обычными, без привязки к программированию) почему именно так. Ну а пока, для затравки, макрос для Bar_A как я его понял (см.первый вопрос в этом сообщении)
Код
Sub TaryBary()
Dim arr(), arrBar_A(), I&, iKey
With Worksheets("_data")
arr = .Range("A2:H" & .Cells(.Rows.Count, "H").End(xlUp).Row).Value
End With
On Error Resume Next
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(arr)
.Add CStr(arr(I, 1)), arr(I, 5) & "|" & Format(arr(I, 8), "dd.mm.yyyy hh:mm:ss")
If Err <> 0 Then
If CDbl(Split(.Item(CStr(arr(I, 1))), "|")(0)) > arr(I, 5) Then
.Item(CStr(arr(I, 1))) = arr(I, 5) & "|" & Format(arr(I, 8), "dd.mm.yyyy hh:mm:ss")
End If
Err.Clear
End If
Next
I = 0: ReDim arrBar_A(UBound(.Keys), 0)
For Each iKey In .Keys
arrBar_A(I, 0) = Split(.Item(iKey), "|")(1): I = I + 1
Next
End With
Worksheets("Stat").Range("A2").Resize(UBound(arrBar_A) + 1) = arrBar_A
End Sub
Спасибо Sanja, во вложении описание задачи "деревенским языком", но наглядно попытался изложить , там не все влезло на листочек..и почерк корявый, но если понятно в таком виде, то я дорисую При поиске нужно учитывать что между A B C E F могут быть промежуточные бары , минимальный набор это 4 бара A, B, C, E =F Когда найден один набор, следующий нужно начинать искать начиная с бара следующего после B. Наборы могут накладываться друг на друга В итоге каждый найденный набор (значение Bar) записывать друг за другом на лист Stat
во вложении файл с примером с "реальными данными", с одним набором, по одному из вариантов расположения баров, там бывает несколько вариантов, но они легко описываются условиями
Уточнения: 1. Для понимания. Bar - это ПАРА элементов Low & Hight (для этой задачи)? Все остальные значения в вычислениях не участвуют? 2. Один набор Bar'ов может состоять из Bar'ов разных дат?