Здравствуйте. В таблице два типа данных. Call и Put. Но, в таблице они перемешаны, свалены в одну кучу, и отсортированы по столбцу D. Т.е., ранее, это были две раздельных таблицы, а потом их объединили. Необходимо сделать обратное. Есть три ключевых столбца, по которым это можно сделать. Например, можно добавить еще один столбец, в котором будет прописываться Call или Put. Если в столбце D, значение больше или равно значению в предыдущей строке, Если в столбце K, значение меньше или равно значению в предыдущей строке, Если CAB, то равно "0", в этой же строке, Если в столбце M, значение меньше или равно значению в предыдущей строке, То в этой строке, в столбце T, прописать Call. Если в столбце D, значение меньше или равно значению в предыдущей строке, Если в столбце K, значение больше или равно значению в предыдущей строке, Если CAB, то равно "0", в этой же строке, Если в столбце M, значение больше или равно значению в предыдущей строке, То в этой строке, в столбце T, прописать Put. Сортировать по столбцу T.
Возможно есть более простые способы.
Исходный вариант , - лист INPUT. Желаемый, - на листе OUTPUT. Сортировка в одной таблице, меня не получается. Если для PUT порядок сортировки совпадает, D по возрастанию, K и M также по возрастанию, то для CaALL, D по возрастанию, а K и M, порядок обратный, т.е., по убыванию. Изобразил на вставке График.
Здравствуйте. В таблице два типа данных. Call и Put. Но, в таблице они перемешаны, свалены в одну кучу, и отсортированы по столбцу D. Т.е., ранее, это были две раздельных таблицы, а потом их объединили. Необходимо сделать обратное. Есть три ключевых столбца, по которым это можно сделать. Например, можно добавить еще один столбец, в котором будет прописываться Call или Put. Если в столбце D, значение больше или равно значению в предыдущей строке, Если в столбце K, значение меньше или равно значению в предыдущей строке, Если CAB, то равно "0", в этой же строке, Если в столбце M, значение меньше или равно значению в предыдущей строке, То в этой строке, в столбце T, прописать Call. Если в столбце D, значение меньше или равно значению в предыдущей строке, Если в столбце K, значение больше или равно значению в предыдущей строке, Если CAB, то равно "0", в этой же строке, Если в столбце M, значение больше или равно значению в предыдущей строке, То в этой строке, в столбце T, прописать Put. Сортировать по столбцу T.
Возможно есть более простые способы.
Исходный вариант , - лист INPUT. Желаемый, - на листе OUTPUT. Сортировка в одной таблице, меня не получается. Если для PUT порядок сортировки совпадает, D по возрастанию, K и M также по возрастанию, то для CaALL, D по возрастанию, а K и M, порядок обратный, т.е., по убыванию. Изобразил на вставке График.sk3pif
sk3pif Как-то условия не очень определенны - так как если все три колонки DKM будут равны предыдущим - то непонятно - это CALL или PUT. И первая строка тоже непонятно по какому правилу определяется (предыдущей же нет). Кроме этого после определения Put и Call значения в KM можно реверсировать. То есть для call оставить как есть а для Put к примеру в доп столбцах написать =100000-K1 и 10000-M1 тем самым будет реверс и можно будет использовать общую сортировку по этим новым доп столбцам в единой таблице.
sk3pif Как-то условия не очень определенны - так как если все три колонки DKM будут равны предыдущим - то непонятно - это CALL или PUT. И первая строка тоже непонятно по какому правилу определяется (предыдущей же нет). Кроме этого после определения Put и Call значения в KM можно реверсировать. То есть для call оставить как есть а для Put к примеру в доп столбцах написать =100000-K1 и 10000-M1 тем самым будет реверс и можно будет использовать общую сортировку по этим новым доп столбцам в единой таблице.skais
Сообщение отредактировал skais - Вторник, 16.04.2019, 20:03
sk3pif Как-то условия не очень определенны - так как если все три колонки DKM будут равны предыдущим - то непонятно - это CALL или PUT. И первая строка тоже непонятно по какому правилу определяется (предыдущей же нет).
Как смог. Хотя, проще посмотреть сам файл. Первую строку, заголовок , шапку, можно исключить. Вот максимально упрощенный вариант.
Кроме этого после определения Put и Call значения в KM можно реверсировать.
Так в этом то и состоит проблема, - как определить. Как смог, описал алгоритм определения. Меня устраивают любые варианты, - в результате будет это такая таблица, как на втором листе (OUTPUT), или это будут две разных талбицы на одном, или на разных листах. Если таблицу на втором листе отсортировать по столбцу D, то получим таблицу на первом листе. А вот обратный вариант не получается.
sk3pif Как-то условия не очень определенны - так как если все три колонки DKM будут равны предыдущим - то непонятно - это CALL или PUT. И первая строка тоже непонятно по какому правилу определяется (предыдущей же нет).
Как смог. Хотя, проще посмотреть сам файл. Первую строку, заголовок , шапку, можно исключить. Вот максимально упрощенный вариант.
Кроме этого после определения Put и Call значения в KM можно реверсировать.
Так в этом то и состоит проблема, - как определить. Как смог, описал алгоритм определения. Меня устраивают любые варианты, - в результате будет это такая таблица, как на втором листе (OUTPUT), или это будут две разных талбицы на одном, или на разных листах. Если таблицу на втором листе отсортировать по столбцу D, то получим таблицу на первом листе. А вот обратный вариант не получается.sk3pif
так как если все три колонки DKM будут равны предыдущим
Каким предыдущим? Если Вы имеете ввиду предыдущую строку в колонке, или ячейку, то в одной строке, не может быть повторения по этим трем колонкам. В столбцах K и M могут быть повторения. Но, в достаточно узком диапазоне. Например, от 1,000 до 0,997. И в области минимальных значений, от 0,000 до 0,003. В столбце K минимальное значение 0,00005. может встречаться CAB, что соответствует значению >0,00004, т.е., меньше минимального. В столбце D не должно быть повторений. в выходном варианте. В исходном они повторяются, но не все.
И первая строка тоже непонятно по какому правилу определяется (предыдущей же нет).
Здесь, насчет правила согласен. Не понятно за что зацепиться. Я сначала подумал что речь о шапке (наименовании столбцов).
Попробую изложить как это должно быть. Столбец D, в обоих случаях, для CALL и для PUT , должен иметь порядок сортировки от меньшего к большему. Для CALL, в столбцах K и D, порядок сортировки должен быть от большего к меньшему. Для PUT, в столбцах K и D, порядок сортировки должен быть от меньшего к большему.
так как если все три колонки DKM будут равны предыдущим
Каким предыдущим? Если Вы имеете ввиду предыдущую строку в колонке, или ячейку, то в одной строке, не может быть повторения по этим трем колонкам. В столбцах K и M могут быть повторения. Но, в достаточно узком диапазоне. Например, от 1,000 до 0,997. И в области минимальных значений, от 0,000 до 0,003. В столбце K минимальное значение 0,00005. может встречаться CAB, что соответствует значению >0,00004, т.е., меньше минимального. В столбце D не должно быть повторений. в выходном варианте. В исходном они повторяются, но не все.
И первая строка тоже непонятно по какому правилу определяется (предыдущей же нет).
Здесь, насчет правила согласен. Не понятно за что зацепиться. Я сначала подумал что речь о шапке (наименовании столбцов).
Попробую изложить как это должно быть. Столбец D, в обоих случаях, для CALL и для PUT , должен иметь порядок сортировки от меньшего к большему. Для CALL, в столбцах K и D, порядок сортировки должен быть от большего к меньшему. Для PUT, в столбцах K и D, порядок сортировки должен быть от меньшего к большему.sk3pif
sk3pif Вы прям упрямец - что будет если строка DKM и предыдущая строка DKM будут одинаковыми - это что будет PUT или CALL? Ваши правила это не могут определить однозначно.
Здесь, насчет правила согласен. Не понятно за что зацепиться.
Вопрос остался - а Вас дальше понесло про сортировку. Скорее всего Вы все понимаете, но не можете объяснить.
sk3pif Вы прям упрямец - что будет если строка DKM и предыдущая строка DKM будут одинаковыми - это что будет PUT или CALL? Ваши правила это не могут определить однозначно.
что будет если строка DKM и предыдущая строка DKM будут одинаковыми - это что будет PUT или CALL?
Такого не может быть в принципе. Потому что в K и M, для CALL и PUT, порядок формирования данных противоположный. Тем не менее, сегодня я столкнулся с похожей проблемой. Поскольку данные идут "встречно", то в какой то момент, в небольшой области, в зоне пересечения, возникла ситуация, когда критерии тенденции соблюдались, и это было справедливо и для call и для put. Я, честно говоря , ошалел , но потом нашел выход. В столбце L , значения могут быть "+", "-" и "0". Знак должен совпадать. Т.е., если в CALL в столбце L, максимальное значение со знаком минус, то и здесь должен быть минус. Соответственно, если знак плюс, то тоже плюс. По поводу первой строки. Однозначно, первая строка, это минимальное значение в столбце D. Теоретически , в столбце D, первые две строки могут иметь одинаковые значения, - практически, я не встречал. Совпадения пойдут дальше, ближе к середине. Также однозначно, если первая строка в столбце M имеет максимальное значение (1) , то это CALL, если минимальное (0) , то это PUT. Это же справедливо и для последней строки. D имеет максимальное значение. И "M" также максимальное значение (1,000 или 0,999), то это PUT. Если минимальное (0 или 0,001) то это CALL. Возможно , это может быть правилом для первой строки.
А как с помощью excel найти сбой в сортировке. Т.е., в столбце данные идут в порядке от минимального к максимальному. Но две строки перепутаны местами. Т.е., можно ли искать ошибки в последовательностях?
что будет если строка DKM и предыдущая строка DKM будут одинаковыми - это что будет PUT или CALL?
Такого не может быть в принципе. Потому что в K и M, для CALL и PUT, порядок формирования данных противоположный. Тем не менее, сегодня я столкнулся с похожей проблемой. Поскольку данные идут "встречно", то в какой то момент, в небольшой области, в зоне пересечения, возникла ситуация, когда критерии тенденции соблюдались, и это было справедливо и для call и для put. Я, честно говоря , ошалел , но потом нашел выход. В столбце L , значения могут быть "+", "-" и "0". Знак должен совпадать. Т.е., если в CALL в столбце L, максимальное значение со знаком минус, то и здесь должен быть минус. Соответственно, если знак плюс, то тоже плюс. По поводу первой строки. Однозначно, первая строка, это минимальное значение в столбце D. Теоретически , в столбце D, первые две строки могут иметь одинаковые значения, - практически, я не встречал. Совпадения пойдут дальше, ближе к середине. Также однозначно, если первая строка в столбце M имеет максимальное значение (1) , то это CALL, если минимальное (0) , то это PUT. Это же справедливо и для последней строки. D имеет максимальное значение. И "M" также максимальное значение (1,000 или 0,999), то это PUT. Если минимальное (0 или 0,001) то это CALL. Возможно , это может быть правилом для первой строки.
А как с помощью excel найти сбой в сортировке. Т.е., в столбце данные идут в порядке от минимального к максимальному. Но две строки перепутаны местами. Т.е., можно ли искать ошибки в последовательностях?sk3pif
Сообщение отредактировал sk3pif - Среда, 17.04.2019, 16:47
sk3pif Очень много нюансов, я вам наводку дал еще во #2 сообщении. Все это реализуемо, но вникать во все Ваши условия - это не тема один вопрос - один ответ.
sk3pif Очень много нюансов, я вам наводку дал еще во #2 сообщении. Все это реализуемо, но вникать во все Ваши условия - это не тема один вопрос - один ответ.skais
Кроме этого после определения Put и Call значения в KM можно реверсировать.
Может я не правильно сформулировал вопрос. Возможно , правильнее было бы, - разделить таблицу на две. Поскольку это предварительная обработка. Далее Call и Put будут обрабатываться раздельно.
На другом ресурсе нашел скрипт [vba]
Код
Sub put_call() Dim col As String
For i = 1 To 200 If Range("d" & i) = Range("d" & i + 1) And Range("a" & i) <> "" Then Range("t" & i) = "Call" Range("t" & i + 1) = "Put" End If Next
End Sub
[/vba]
Но, он далек от совершенства (по результатам работы), хотя это лучше чем ничего.
но вникать во все Ваши условия - это не тема один вопрос - один ответ.
На мой взгляд, плодить два десятка новых тем, - не лучший выход. Но, в чужой монастырь со своим уставом не ходят. Так, так - так. Буду задавать вопросы по отдельности.
Кроме этого после определения Put и Call значения в KM можно реверсировать.
Может я не правильно сформулировал вопрос. Возможно , правильнее было бы, - разделить таблицу на две. Поскольку это предварительная обработка. Далее Call и Put будут обрабатываться раздельно.
На другом ресурсе нашел скрипт [vba]
Код
Sub put_call() Dim col As String
For i = 1 To 200 If Range("d" & i) = Range("d" & i + 1) And Range("a" & i) <> "" Then Range("t" & i) = "Call" Range("t" & i + 1) = "Put" End If Next
End Sub
[/vba]
Но, он далек от совершенства (по результатам работы), хотя это лучше чем ничего.
но вникать во все Ваши условия - это не тема один вопрос - один ответ.
На мой взгляд, плодить два десятка новых тем, - не лучший выход. Но, в чужой монастырь со своим уставом не ходят. Так, так - так. Буду задавать вопросы по отдельности.sk3pif
Сообщение отредактировал sk3pif - Воскресенье, 21.04.2019, 11:57
две строки перепутаны местами. Т.е., можно ли искать ошибки в последовательностях?
Смотрите, в столбце U написана формула, по которой можно определить неправильную последовательность, которая выпадает из общего ряда. Если поставить значения в нужном порядке, потом все формулы заменить на значения (столбцы T, U, V), то можно отсортировать столбец V
две строки перепутаны местами. Т.е., можно ли искать ошибки в последовательностях?
Смотрите, в столбце U написана формула, по которой можно определить неправильную последовательность, которая выпадает из общего ряда. Если поставить значения в нужном порядке, потом все формулы заменить на значения (столбцы T, U, V), то можно отсортировать столбец VPelena
В таблице два типа данных. Call и Put. Но, в таблице они перемешаны
Сейчас, я бы назвал тему, - определить тип данных, и разбить таблицу на две. Изложенный в начале темы, алгоритм оказался неудачным. Я нашел более простой способ, но его желательно доработать. Ключевым для определения типа данных, является столбец M. Там Call идут в порядке убывания, а Put по возрастанию. И место "стыка", около значения 0,5 практически решает определение типа данных. Если найти две смежных строки, которые имеют минимальную разницу значений, а это будет в районе 0,5, и в этом месте разделить таблицу на две, путем вставки пустой строки, то для верхней части можно использовать формулу, если больше 0,5, то Call, если меньше 0,5, то Put. Для нижней части, - наоборот. И далее произвести сортировку по Call/Put. Пустую строку можно не вставлять, но нужно выделить эти две смежные строки. Потому что они однозначно по трем критериям не определяются. Они могут удовлетворять как Call, так и Put. Определяется это по четвертому критерию, столбцу L. В приложенном файле, на листе OPT исходные данные, на листах Call и Put желаемый результат с проверкой по четырем критериям. Дополнительные столбцы U,V,W,X. Почти все ошибки, которые являются некритическим удалось побороть. В столбце K встречается CAB, которое дает ошибку при переходе от CAB к нулю (0), и наоборот, от нуля к CAB. Как изменить формулу в столбце проверки V (SETT.PRICE), чтобы если встречается CAB, то это должно восприниматься как значение равно нулю (0). И главная проблема, которая осталась, как найти и выделить две строки, которые в столбце M (DELTA) будут иметь минимальную разницу значений. Это всегда будет в районе значений около 0,5. Например, в данном случае, это 0,497 и 0,502. Но, могут быть и любые другие в диапазоне от 0,4 до 0,6. Пока, я сделал это через введение дополнительного столбца U на первом листе (OPT), и условным форматированием подсветил между -0,005 и 0,005. Но, это не очень удачный вариант, разница может выйти за эти пределы. Как написать формулу для определения минимальной разницы значений в столбце (U).
В таблице два типа данных. Call и Put. Но, в таблице они перемешаны
Сейчас, я бы назвал тему, - определить тип данных, и разбить таблицу на две. Изложенный в начале темы, алгоритм оказался неудачным. Я нашел более простой способ, но его желательно доработать. Ключевым для определения типа данных, является столбец M. Там Call идут в порядке убывания, а Put по возрастанию. И место "стыка", около значения 0,5 практически решает определение типа данных. Если найти две смежных строки, которые имеют минимальную разницу значений, а это будет в районе 0,5, и в этом месте разделить таблицу на две, путем вставки пустой строки, то для верхней части можно использовать формулу, если больше 0,5, то Call, если меньше 0,5, то Put. Для нижней части, - наоборот. И далее произвести сортировку по Call/Put. Пустую строку можно не вставлять, но нужно выделить эти две смежные строки. Потому что они однозначно по трем критериям не определяются. Они могут удовлетворять как Call, так и Put. Определяется это по четвертому критерию, столбцу L. В приложенном файле, на листе OPT исходные данные, на листах Call и Put желаемый результат с проверкой по четырем критериям. Дополнительные столбцы U,V,W,X. Почти все ошибки, которые являются некритическим удалось побороть. В столбце K встречается CAB, которое дает ошибку при переходе от CAB к нулю (0), и наоборот, от нуля к CAB. Как изменить формулу в столбце проверки V (SETT.PRICE), чтобы если встречается CAB, то это должно восприниматься как значение равно нулю (0). И главная проблема, которая осталась, как найти и выделить две строки, которые в столбце M (DELTA) будут иметь минимальную разницу значений. Это всегда будет в районе значений около 0,5. Например, в данном случае, это 0,497 и 0,502. Но, могут быть и любые другие в диапазоне от 0,4 до 0,6. Пока, я сделал это через введение дополнительного столбца U на первом листе (OPT), и условным форматированием подсветил между -0,005 и 0,005. Но, это не очень удачный вариант, разница может выйти за эти пределы. Как написать формулу для определения минимальной разницы значений в столбце (U).sk3pif