Прошу знатоков помочь, задача трудная. Под силу только сильным логикам.

Автор Retiree, 23.09.2012, 10:35

« назад - далее »

Retiree

На прилагаемой схеме прямые, они накладываются друг на друга. Нужна формула для подсчета длины участка без учета наложений.
Из схемы видно, что длина участка равна 40. Файл xls прилагается.

DV68


kuklp

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Retiree

Цитата: KuklP от 23.09.2012, 10:51
:)
=МАКС(B2:C9)-МИН(B2:C9)

Спасибо за быстрый ответ.
Разрывы есть, мой косяк, думал, что они особо не будут влиять.
Это сильно повлияет на формулу?

DV68

Нет, если нужны только максимум и минимум.
Если есть разрыв(ы), то вопрос - разрывы считать?
Или считать каждый участок и выбрать максимальный?

kuklp

ЮДФ для общей длины:
Public Function MyCount&(r As Range)
    Dim a, i&, j&
    a = r
    ReDim b(Application.Max(a))
    For i = 1 To UBound(a)
        For j = a(i, 1) To a(i, 2)
            b(j) = 1
        Next j, i
    MyCount = Application.CountA(b) - 1
End Function

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Retiree

Цитата: Dmitr68 от 23.09.2012, 11:01
Нет, если нужны только максимум и минимум.
Если есть разрыв(ы), то вопрос - разрывы считать?
Или считать каждый участок и выбрать максимальный?


Вот в этом то и дело, разрывы не должны учитываться. И не должны учитываться захлесты.

kuklp

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Retiree

Цитата: KuklP от 23.09.2012, 12:02
Вы мой пример видели?

Видел, спасибо.
Мне он не совсем понятен, а мне бы хотелось самому все понять.
Попробую обкатать на реальных данных.
Результат сообщу позже.

Михаил С.

Цитата: KuklP от 23.09.2012, 12:02
Вы мой пример видели?
Серег, чет у тебя не сходится... :'(
Если я правильно понял задачу.

зы. Вообще-то для длин ноль не считается. Тогда вообще должно быть 37 а не 40
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

kuklp

Миш, ты будешь смеяться, но я открыл твой файл, выделил D11, нажал F2, потом Enter и смотри скрин. А в моем файле так уже посчитано. Не знаю, что ты там делал, что у тебя посчитало 40 :)
Цитироватьзы. Вообще-то для длин ноль не считается.
Как так? Ты рулеткой меряешь начиная с первого сантиметра? :o
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Михаил С.

А у меня в твоем файле не срабатывает ни F9, ни F2-Enter. Все равно сорок показывает. Да и в моем тоже.
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

Михаил С.

Цитата: KuklP от 23.09.2012, 19:03
Цитироватьзы. Вообще-то для длин ноль не считается.
Как так? Ты рулеткой меряешь начиная с первого сантиметра? :o
Я имею ввиду, что если считать количество чисел от 0 до 40, то будет 41, а если длину - то 40. В моем примере нулевой столбец лишний.
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

kuklp

Миш, а попробуй прогнать формулу по шагам. Похоже, у тебя события не срабатывают. На названии формулы в коде нажми F9. Строка окрасится в коричневый. Потом поменяй любую цифру в проверяемом массиве.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

kuklp

Чтоб на каждый чих дергалась, после названия функции в коде можно вставить:
Application.Volatile
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771