Минидиаграммы в ячейках листа
Способ 1. Спарклайны в Excel 2010
Одним из революционных нововведений в крайней версии Microsoft Excel 2010 стали инфокривые sparklines - миниграфики, помещающиеся внутри ячеек и наглядно отображающие динамику числовых данных:
Чтобы создать подобные миниграфики, нужно выделить ячейки, куда мы хотим их поместить и воспользоваться кнопками группы Спарклайны (Sparklines) с вкладки Вставка (Insert):
В открывшемся диалоговом окне нужно задать диапазон исходных данных и диапазон вывода:
Созданные миниграфики можно всячески форматировать и настраивать с помощью динамической вкладки Конструктор (Design):
В частности, можно легко поменять цвет линий и столбцов спарклайна и выделить особыми цветами минимальные и максимальные значения:
Поскольку спарклайн не является отдельным графическим объектом, а выступает, по сути, в роли фона ячейки, то он нисколько не помешает ввести в ячейку текст, числа или другую информацию. Это открывает простор для фантазии - если немного пошаманить с выравниванием введенного текста, шириной и высотой ячейки, то можно достичь интересных результатов:
Что делать, если у вас пока старая версия Excel? Или нужен тип графика, которого нет в наборе спарклайнов? Переходим к следующим способам!
Способ 2. Дополнительные надстройки для микрографиков
На самом деле, идея подобных графиков витала в воздухе уже достаточно давно. Еще для 2003 версии Excel существовало несколько надстроек с подобным функционалом, самым известными из которых были замечательная бесплатная Sparklines Эдварда Тафта и и платные BonaVista microcharts (169$) и Bissantz SparkMaker (200$). Да и я в свое время тоже пытался сделать что-то подобное в надстройке PLEX.
Если брать в качестве примера бесплатную надстройку Sparklines, то после ее подключения мы получим новую вкладку (или панель инструментов) примерно такого вида:
Как легко заметить, эта надстройка умеет строить заметно больше трех типов диаграмм :)
Единственный минус - надстройку нужно будет установить на всех компьютерах, где вы планируете работать с файлом, содержащим такие диаграммы.
Способ 3. Повтор символов N-раз
"Бюджетным вариантом" одномерных микрографиков являются повторяющиеся однотипные символы, имитирующие линейчатую диаграмму. Для этого можно воспользоваться текстовой функцией ПОВТОР (REPT), которая умеет выводить в ячейку любой заданный символ нужное количество раз. Для вывода нестандартных символов (зная их код) можно использовать функцию СИМВОЛ (CHAR). В общем и целом это выглядит так:
Символ с кодом 103 - черный прямоугольник шрифта Webdings, поэтому не забудьте установить этот шрифт для ячеек C2:C12. Также можно поиграться с символами других шрифтов, например в столбце Е использован символ с кодом 110 из шрифта Wingdings.
Способ 4. Макросы
Способ представляет собой улучшенный предыдущий вариант, где набор повторяющихся символов (используется знак "|") создает не формула, а простая пользовательская функция на VBA. Причем для каждой ячейки создается отдельный столбец, т.к. функция использует символ переноса строки после каждого числа - выглядит это примерно так:
Чтобы использовать этот трюк у себя в файле, открываем редактор VBA (Alt+F11), добавляем новый модуль в книгу (меню Insert - Module) и копируем туда код функции NanoChart:
Function NanoChart(rng As Range) As String Const MaxSymbols = 10 For Each cell In rng outstr = outstr & WorksheetFunction.Rept("|", cell / WorksheetFunction.Max(rng) * MaxSymbols) & Chr(10) Next cell NanoChart = outstr End Function
Затем вставляем функцию NanoChart в нужные ячейки, указывая в качестве аргументов числовые данные, как на рисунке выше. Для получившихся ячеек с микрографиками необходимо включить перенос по словам и поворот на 90 градусов через меню Формат - Ячейки - Выравнивание (Format - Cells - Alignment). Константа MaxSymbols задает длину максимально высокого столбца в минигистограмме.
Еще один подобный способ честно подсмотрен на сайте http://www.dailydoseofexcel.com/. Заключается в добавлении в файл пользовательской функции на VBA для автоматического построения спарклайнов - миниатюрных графиков внутри ячеек. Открываем редактор VBA (Alt+F11), добавляем новый модуль в книгу (меню Insert - Module) и копируем туда этот код на Visual Basic:
Function LineChart(Points As Range, Color As Long) As String Const cMargin = 2 Dim rng As Range, arr() As Variant, i As Long, j As Long, k As Long Dim dblMin As Double, dblMax As Double, shp As Shape Set rng = Application.Caller ShapeDelete rng For i = 1 To Points.Count If j = 0 Then j = i ElseIf Points(, j) > Points(, i) Then j = i End If If k = 0 Then k = i ElseIf Points(, k) < Points(, i) Then k = i End If Next dblMin = Points(, j) dblMax = Points(, k) With rng.Worksheet.Shapes For i = 0 To Points.Count - 2 Set shp = .AddLine( _ cMargin + rng.Left + (i * (rng.Width - (cMargin * 2)) / (Points.Count - 1)), _ cMargin + rng.Top + (dblMax - Points(, i + 1)) * (rng.Height - (cMargin * 2)) / (dblMax - dblMin), _ cMargin + rng.Left + ((i + 1) * (rng.Width - (cMargin * 2)) / (Points.Count - 1)), _ cMargin + rng.Top + (dblMax - Points(, i + 2)) * (rng.Height - (cMargin * 2)) / (dblMax - dblMin)) On Error Resume Next j = 0: j = UBound(arr) + 1 On Error GoTo 0 ReDim Preserve arr(j) arr(j) = shp.Name Next With rng.Worksheet.Shapes.Range(arr) .Group If Color > 0 Then .Line.ForeColor.RGB = Color Else .Line.ForeColor.SchemeColor = -Color End With End With LineChart = "" End Function Sub ShapeDelete(rngSelect As Range) Dim rng As Range, shp As Shape, blnDelete As Boolean For Each shp In rngSelect.Worksheet.Shapes blnDelete = False Set rng = Intersect(Range(shp.TopLeftCell, shp.BottomRightCell), rngSelect) If Not rng Is Nothing Then If rng.Address = Range(shp.TopLeftCell, shp.BottomRightCell).Address Then blnDelete = True End If If blnDelete Then shp.Delete Next End Sub
Теперь в мастере функций в категории Определенные пользователем появилась новая функция LineChart c двумя аргументами - диапазоном и кодом цвета графика. Если ее вставить в пустую ячейку, например, справа от числовой строки и скопировать затем, как обычно, на весь столбец, то получим весьма симпатичное отображение числовых данных в виде миниграфиков:
Когда вставлял модуль текст макроса становится красным и в одну строчку.
Откорректировал, вроде все записалось, в меню функций появился LineChart., но все равно выдает #ЗНАЧ!.
Помогите)
Не выбрал цвет))
Спасибо за многочисленные полезные советы!
Спасибо за макрос NanoChart, очень изящно получается!
меня очень заинтересовали ваши мини диаграммы, но к сожалению, мне необходимо их построить по четко заданным параметрам к примеру мне нужды данные только с "красным цветом" и разместить их с столбце G
Спасибо
1) делаем столбец спарклайнов не сразу за данными, а отступив хотя-бы один столбец вправо (зачем будет ясно ниже)
2) копируем столбец спарклайнов и вставляем (внимание:-) специальной вставкой как "связанный рисунок" - это принципиально
3) копируем таблицу, но без столбца спарклайнов, захватив только столбец связанных рисунков, и вуаля )))
При этом копируется как нужно Ирине именно таблица, но в последнем столбце будет картинка от спарклайнов.
Думаю именно это и надо было получить, ну а "пошаманив" еще немного думаю можно реализовать код который это все автоматизирует..
главное что теперь чуть понятней, как именно реализованы спарклайны и как их цеплять для дальнейшей обработки..
Думаю подводных камней еще куча, но принципиально это реализуемо..
P/S
Да и еще лучше копировать и вставлять "связанный рисунок" для каждой ячейки спарклайна а не весь столбец,
вручную это геморно, но если автоматизировать то вполне реально. Это позволит вставлять в ворд отдельные картинки для каждой ячейки,
что улучшит дальнейшее форматирование документа уже в ворде. ИМХО.
честно наткнулся на решение случайно, просто зацепили меня эти мелкие диаграммы жаль не пользовался ими раньше,
потому и не знал что за бяка такая )))
Павел, пользуясь случаем хочу сказать огромное спасибо за PLEX !
Благодаря ему лучше понял принципы работы и программирования в Excel.
да, примеры файлов прикложить не знаю куда, вышлю Ирине отдельно, хотя тут и так все понятно.