Страницы: Пред. 1 2
RSS
Умная диаграмма с разрывом оси Y
 
devilkurs_now
Спасибо! Чуть изменил диаграмму - привёл к тому виду, как она выглядела в Excel 2016 + ввёл имена. Работает ли в Excel 2007/2010?
Как у вас выглядят оси? Также, как на скриншоте? Сразу ли масштабируется график?
Как заменить оставшиеся ссылки на имена и убрать расчёты в код?

Upd: формула массива на VBA вроде бы Evaluate?
Изменено: Acid Burn - 28.12.2015 23:08:49
 
"формула массива на VBA вроде бы Evaluate?" ну насколько я знаю то да.
а ввести в ячейку Selection.FormulaArray
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
Это я пытаюсь блок формул A25:E27 "засунуть" в код. Проблема с C26 - Error 2015 или 2029...
 
Цитата
Acid Burn написал: Проблема с C26
я слышал что если формула больше 255 символов - то VBA ругается. Может это тот случай?

Цитата
Acid Burn написал: Как у вас выглядят оси? Также, как на скриншоте? Сразу ли масштабируется график?
Да, график выглядит так же, масштабирования нет. Сейчас полезу решать вопрос с осями
Изменено: devilkurs_now - 28.12.2015 23:38:40
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
А я пока с формулами разберусь. Добавил
Код
Dim WF, Precision, Y1_max, Y1_rnd, Y1_cnt, Y1_stp
  Set WF = WorksheetFunction
  Precision = Abs(WF.Replace(Format(Y1_max, "0E+00"), 1, InStr(1, Format(Y1_max, "0E+00"), "E"), ""))
  Y1_max = Evaluate("MAX((IF(Y_1*100/SUM(Y_1)>20,2,1)=1)*Y_1)")
  Y1_rnd = IIf(Y1_max > 1, WF.Ceiling(Y1_max, 10 ^ (Len(Fix(Y1_max)) - 1)), WF.RoundUp(Y1_max, Precision))
  Y1_cnt = Y1_rnd / Evaluate("SUM(Y_1)") * 100
  Y1_stp = Y1_cnt * 2 / 10
Debug.Print Y1_max & ";" & Y1_rnd & ";" & Y1_cnt & ";" & Y1_stp
Может кто-нибудь подскажет, как написать покороче?

Upd: выкладываю то, что у меня пока вышло.
Загнал все расчёты в VBA-код, не смог пока избавиться только от C6:C13 и E6:E13.
Вообще хотелось бы всё загнать в модуль, оставив в листе только имена Graph1_Area, Graph1_Data и Graph1_Type.
Т.е что-то типа post_236530.xls, но с этим нужна помощь.
В общем, оставшиеся проблемы - в файле.
Изменено: Acid Burn - 29.12.2015 09:44:41
 
devilkurs_now
Вечер добрый! Или не очень, не знаю, я с оставшимися пунктами совсем застрял.
Получилось ли у Вас как-то решить вопрос с осями и масштабированием графика при переключении данных?
 
Доброй ночи Acid Burn,
полный завал на работе, не успел сегодня ничего посмотреть. Еще снег выпал в Краснодаре, срочно переобувал машину. Но чисто теоретически  придумал как масшабировать.  Немного изменится алгоритм расчета, за счет чего на ось вылезут нужные цифры. На вспомогательной оси у меня еще вчера все получилось, а с основной Y времени не хватило. Завтра если дадут продохнуть на работе - напишу.  
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
Спасибо, интересно посмотреть!
 
Acid Burn,
День добрый.

Посмотрите, что у меня получилось. Изменения коснулись:
- С26 : Е28
- столбца Пересчет
- в коде
Код
  Set WF = WorksheetFunction
  Y1iFormat = Len(Mid([e26] - Fix([e26]), 3))
  Y2iFormat = Len(Mid([e27] - Fix([e27]), 3))
  
  If [e26] < 10 Then Y1iFormat = "0." & Right(10 ^ [e28], Y1iFormat) Else Y1iFormat = 0
  If [e27] < 10 Then Y2iFormat = "0." & Right(10 ^ [e28], Y2iFormat) Else Y2iFormat = 0
  
  Y1min = 0:                                    Y2min = -[C27]
  Y1max = [C26] * 2:                            Y2max = [C27]
  Y1form = "[=0]" & Y1iFormat & ";[<=" & _
           [C26] & "]" & Y1iFormat & ";"
                                                Y2form = Y2iFormat & ";;"
  Y1step = [e26]:                               Y2step = [e27]
И результат красивые оси.
Более заняться ни чем не успел.
Ваш Документ(3) еще не смотрел если честно.  
Изменено: devilkurs_now - 30.12.2015 18:12:51
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
Здравствуйте!
На наборе Данные1 всё красиво, на остальных - всё по прежнему.
Скрытый текст

Думаю, продолжим в новом году. С Наступающим Вас!
 
Acid Burn,
А у меня все красиво.
Скрытый текст

С наступающим!!! )))
Изменено: devilkurs_now - 31.12.2015 13:22:59
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
Отлично! Значит, опять отличия версий Excel 2010/2016. Буду разбираться.
Спасибо!
 
Пока так и не разобрался. Руки не доходят, но очень интересно.
Может только у меня проблемы? Может кто-нибудь проверить в Excel 2016?
 
Добрый день. Я думаю проблема в формате "0.00" и "0,00"" переменная Y1iFormat и Y2iFormat
Изменено: devilkurs_now - 13.01.2016 21:46:46
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
Добрый день, devilkurs_now!
Было бы отлично, но проблема глубже.
Вы можете добавить Ваш код в мой из поста 35? Там также были 3 проблемы, с которыми я с ходу не справился - может у Вас будут идеи.
Я бы завтра поковырял на свежую голову на работе.
Изменено: Acid Burn - 13.01.2016 22:27:23
 
Acid Burn, посмотрите этот файл. Кажется что-то не доделал. Но у меня работает.
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
У меня вообще не работает - разделитель есть всегда, для блока 1 вообще только он и есть (самого графика нет).
Ещё и вспомогательная ось пропала. Вот скрин. Беда в общем.
Наверное, надо до выходных отложить - тут за час-другой не разобраться... Во всяком случае мне. )))
Изменено: Acid Burn - 15.01.2016 01:19:30
 
devilkurs_now
В Excel 2010 всё выглядит также. Только в 2007 что ли работает?
 
Acid Burn,  посмотрите я переделал.
пишу с телефона, на работе инет перекрыли, скрины и код выложить не могу

ЗАТУПИЛ. Файл не прикрепил с первого раза
файл в этом посте на 2007 и на 2010 работает. Только что проверял
Изменено: devilkurs_now - 15.01.2016 14:46:51
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
Посмотрел Диаграмма4 (4).xlsm (35.37 КБ). Если Вы об этом файле, то там всё страшно.
В течении часа пытался переделать, пока результат отрицательный. Продолжу скорее всего в воскресенье.
Увидимся!
 
Пост 49 изменился
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
Спасибо! В целом лучше, но не перестраивается при наведении на стрелку и, как Вы и написали, "иногда с первого раза строит график неверно!".
В Excel 2010 выглядит лучше, в 2016 - вот так.
Доберусь домой, попробую что-то сделать. Может оси кратно чему-то округлить?
Изменено: Acid Burn - 15.01.2016 15:44:05
 
Acid Burn,
По скринам:
- На втором скрине в оси Y2 черточки "-". Это остаток от отрицательного числа. Я так и не понял почему они остаются. Формат чисел задан в виде " [>=0.072]0.000; " .Так Эксель скрывает значения меньше 0,072 (это к примеру), а вот знак отрицательно числа (минус) почему то остается. Как от этого избавиться я не знаю.
- Что касается подписей осей Y1 и Y2 где нулями показывает - поиграйтесь в кодах формата числа на оси Y с разделителем дробной части "," и ".". Это точно из за этого! Во время отработки .TickLabels.NumberFormat = Y1form   Эксель принимает только понятные ему символы, а остальное отбрасывает или пропускает. У меня была такая проблема, когда я на 2010 тестил, после 2007.

И еще ошибку нашел у себя небольшую. Замените часть кода:
Код
' Задаём источник и начальный тип диаграммы
If Y2step >= Y1step * 3 Then 'проверка на необходимость разделителя
  Set dsource = [X_1,Y_11,E6:E13]
  Set Y = [Y_11]
Else
  Set dsource = [X_1,Y_1,E6:E13]
  Set Y = [Y_1]
'  Set dsource = [X_1,Y_1]
'  Set Y = [Y_1]
  Y1max = Y2max
  Y1step = WF.Round(Y2_rnd / 10, Precision + 1) 'Y2step
  Y1form = Y2iFormat
End If
MS Office 2007,2010

ЛЕНЬ-двигатель прогресса!
 
devilkurs_now
Пока не могу найти достаточно времени, чтобы вникнуть и доработать наш "прожект".
Код по-прежнему глючит - проблемы с обновлением графика при переключении, построением осей, удалением лишних имён с листа всё ещё остаются.
Надо привести код в порядок, м.б. использовать .UseSystemSeparators или .DecimalSeparator = "."/"," в зависимости от Application.Version.
Вообще таких графиков на листе будет несколько, массив данных и его расположение будут другими... Всё сложно...
В общем, ковыряюсь минут по 30 в день. Если у Вас будут мысли или новые версии - пишите. До выходных я точно до этого не доберусь.
Увидимся!
Изменено: Acid Burn - 19.01.2016 22:54:04
Страницы: Пред. 1 2
Наверх