Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Быстрое оформление цветами., Готовое решение для упрощения оформления документов.
 
Достаточно долго игрался с дизайном документов по части цветовых решений.
Потом все это надоело и решил что в большинстве случаев достаточно выделить сущности и итоги.
Не без помощи местных шаманов узнал кодирование цветов у всемогущего Excel’я тема здесь
Скрытый текст

Написал простенький макрос. Нашел его очень удобным, вот и решил поделиться.
Выделяем данные которые нужно выделить (извините за тафтологию) и запускаем его.
Макрос проходится по ячейкам и делает заливку немного темнее при этом максимально сохраняет оттенок цвета.
Повторными прогонами можно затемнить еще и еще.
Отмена не предусмотрена.
Константу darker (0.9) можно поменять на свое усмотрение, даже увеличить выше единицы (будет осветлять).
Код
Sub darker_X_percent()
Const darker = 0.9
If MsgBox("Сделать цвет ячеек немного темнее? Количество обрабатываемых ячеек " & Selection.Count & ". Вы уверены?", vbQuestion + vbDefaultButton2 + vbYesNo, "Внимание") = vbYes Then
    Dim change_area As Range
    Application.StatusBar = ("Проводится замена цвета в " & Selection.Count & " ячейках...")
    For Each change_area In Selection
        Colour = change_area.Interior.Color
        B = Int(Colour / 65536)
        G = Int((Colour - B * 65536) / 256)
        R = (Colour - B * 65536 - G * 256)
        ' +0.5 чтобы при отбрасывании дробной части округлить по стандартным правилам
        B = Int(B * darker + 0.5)
        G = Int(G * darker + 0.5)
        R = Int(R * darker + 0.5)
        Colour = R + G * 256 + B * 65536
        change_area.Interior.Color = Colour
    Next
MsgBox "Замена произведена.", vbInformation + vbOKOnly, "Ура!"
Application.StatusBar = False
End If
End Sub

Однако, не увлекайтесь. Миллион миллион алых, розовых, голубых и синих существенно утяжелят документ.
Изменение цвета заливки макросом.
 
Всем спасибо за помощь, задача решена.
Mrt, объяснение то что надо.
Михаил, не разглядел. Просто, для затенения достаточно.
Изменение цвета заливки макросом.
 
Товарищи, нужна помощь по программному изменению заливки ячеек.
Имеется таблица, колонки которой раскрашены в разные цвета (характеристики номенклатуры, цех, склад, приход, расход, остатки).
В связи с разрастанием асортимента продукция получина иерархическую структуру. Соответственно хочется промежуточные итоги разных уровней закрасить теми же цветами, но меньшей насыщенности.
Попытки разобраться с принципом кодирования цветов увенчались провалом.
Если оранжевый это R-255,G-192, B-0,
то  -5% это R-242,G-182, B-0,
то -15% это R-217,G-163, B-0,
Код
Sub Orang()
    Range("a36").Interior.Color = 49407 'чистый оранж
    Range("a37").Interior.Color = 46834 '-5%
    Range("a38").Interior.Color = 41945 '-15%
    Range("a39").Interior.Color = 37055 '-25%
End Sub
Связи никакой.
Есть ли способ пересчитать конкретный цвет на уменьшение или увеличение яркости?
Хотелось бы выделить область, нажать кнопочку и макрос пройдясь по всем ячейкам уменьшит яркость цвета к примеру на 5%. При необходимости повторяем и получаем 10%, 15%. (пусть не совсем, вместо 20 будет 18,55, или около того за счет того что для последующего базой будет не оригинал 100, а только 95, да еще с округлением)
 
Пользовательская функция: Вложенные если
 
Спасибо за пример, сажусь разбираться.
К ВПР надо цеплять проверку двух ошибок пустого класса и пустого типа. Это, конечно проще чем если(если(если...))), но на 25 тысячах строк будет не так быстро как хочется. А может только кажется.

Еще вопрос.
Словарь - это постоянно хранимый объект который хранится после сохраниния и закрытия книги и восстанавливается при открытии или же уничтожается и при открытии его не существует?
Изменено: Formanter - 26.01.2015 17:52:46
Пользовательская функция: Вложенные если
 
Цитата
Hugo пишет: перебирать не ячейки, а массивы
Пример можно?
Цитата
можно приспособить публичный словарь,
Что это?
Пользовательская функция: Вложенные если
 
Вложенное если. Своя функция для EXCEL’a.xls (54 КБ)

Вложенное если. Своя функция для EXCEL’a.xls
Здравствуйте, жители и гости Планеты.
Возникла проблема использования вложенного Если()
Сначала написал по классике индекс+поискпоз, но эта связка не дает 100% необходымый результат.
Использовать макрос имеет свои неоспоримые преимущества, но и недостатки  есть серьезные.
Написана пользовательская функция, которая ищет заданое значение в справочном диапазоне и возвращает из второго массива значение соответствующее найденому.
Может кому пригодится.
Может кто ускорит ее работу.

Скрытый текст
Изменено: Formanter - 26.01.2015 16:48:28
График простоев оборудования, На подобии диаграммы Ганта
 
ремонт на планету.xls (55.5 КБ)
Формат данных: Участок, единица оборудования, дата/время начала и завершения ремонта.
Данные за год, 170 единиц оборудования, около 5000 записей
На других листах просчитываются простои по причинам с разбивкой по месяцам и единицам оборудования (не привожу в примере)

Часто господа аксакалы (6 человек) пишут не правильно даты, задваивают записи, пишут перекрестные простои (еще идет текущий ремотн, а линия ставится на косервацию)
Нужна помощь это отследить.
Если сумма простоя за месяц превышает длительность месяца, ошибка находится, а так только вручную рисовать.
Самым подходящим есть график Ганта, но он не позволяет "закрашивать" обльше одной области в ряду, да и его надо с бубуном плясать.

Более того, в перспективе нужно оценить адекватность простоев оборудования и выпуска продукции по оборудованию по дням. кроме как визуально график на ум приходит двумерная матрица коеффициентов использования рабочего времени по суткам.

PS если простой большпе месяца, он закрывается и открывается снова. Оговорено ранее для того чтоб легче считать время простоя на протяжении месяца.
Программное создание кнопок с макросом на дествие., Не верно задается расположение макроса
 
Переписал макрос создания и назначения в рабочую книгу. Все работает.
Выход программно внести в рабочую книгу макрос, который создаст кнопки и назначит им другие макросы, а потом самоудалится считаю входом в окно на третьем этаже.

Подскажите как можно это побороть.
Группировка столбцов
 
1 Отдавать в подуровни одинаковое количество строк
2 Изменить организацию данных
3 Сменить рабочую среду
Программное создание кнопок с макросом на дествие., Не верно задается расположение макроса
 
Макросом из личной книги программно обрабатываю данные. На выходе сводная таблица.
Дальше программно форматирую и хочу создать кнопки для отображения/скрытия подробностей


Код
Sub Create_Buttons_And_Module_for_buttons()
    Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
    Dim sModuleName As String, sFullName As String
    Dim sProcLines As String
    Dim lLineNum As Long
    
    'добавляем новый стандартный модуль в активную книгу
    Set objVBComp = ActiveWorkbook.VBProject.VBComponents.Add(1)
  ' не получилось задать имя objVBComp.Name = ("Buttons_For_Pivot"
    'получаем ссылку на коды модуля
    Set objCodeMod = objVBComp.CodeModule
    'узнаем количество строк в модуле
    '(т.к. VBA в зависимости от настроек может добавлять строки деклараций)
    lLineNum = objCodeMod.CountOfLines + 1
    'текст всставляемой процедуры
    sProcLines = "Sub Pivot_Big()" & vbCrLf & _
"ActiveSheet.PivotTables(""СводнаяТаблица"".PivotFields(""Название склада"".ShowDetail = True" & vbCrLf & _
"End Sub" & vbCrLf & _
"Sub Pivot_Small()" & vbCrLf & _
"ActiveSheet.PivotTables(""СводнаяТаблица"".PivotFields(""Название склада"".ShowDetail = False" & vbCrLf & _
"End Sub"
    'вставляем текст процедуры в тело нового модуля
    objCodeMod.InsertLines lLineNum, sProcLines
    
ActiveSheet.Buttons.Add(0, 29, 75, 15).Select
    Selection.OnAction = "Pivot_Small"
    Selection.Characters.Text = "Свернуть"
    ActiveSheet.Buttons.Add(76, 29, 75, 15).Select
    Selection.OnAction = "Pivot_Big"
    Selection.Characters.Text = "Развернуть"
End Sub




Код работает: создается модуль, вставляется его код, создаются кнопки, но кнопкам назначается макрос из личной книги PERSONAL.XLSB!Pivot_Small и PERSONAL.XLSB!Pivot_Big

Назначил вручную, запустив макрорекордер, указал,  макросы для кнопок в текущей книге. Кнопки работают, но вновь созданным задается из личной.
Подскажите где грабли?



Должно быть сохранено в рабочей книге так как она отправляется другим пользователям.
Привязки к имени файла желательно избежать, пользователь может сохранить файл под другим именем.
Выпадающие списки, третий уровень связи
 
Вот примерно так.
Нужно в лист "база" столбец G вставлятьвыбирать данные из списка лист "обладнання-причина" C3:N3 только соответствующие введеному оборудованию.

Думал чтоб не плодить таблиц можно умножить соответствующую строку единиц/нулей на строку причин. Да вот не получается.
Изменено: Formanter - 21.06.2013 14:50:24
Выпадающие списки, третий уровень связи
 
Господа, делаю учет ремонтов.
Есть связаные выпадающие списки через умные таблицы.
1 Категория (производство1, произв2, ... ,произв5, вспомогательное, энергосистема, охрана)
2 Название оборудования (около 70 позиций, названия не повторяются, однородные единицы разделены по номерам/моделям)
3 Причина ремонта / дефектный узел / плановое ТО.
По п.3 есть несколько универсальных типа сбой питания и плановое ТО, основная масса по 5-7 пунктов на однородное оборудовае дублируются, между производствами не повторяются.

Подскажите как можно организовать чтоб не делать 70 таблиц/списков на каждую единицу ообрудования.
Изменено: Formanter - 20.06.2013 21:35:42
Редактирование формул макросом
 
Не универсально, но сработало CTRL+H (убрать баксы), CTRL+C, CTRL+V на новый лист, CTRL+X, CTRL+V на прошлый. При вырезании смещения не происходит! :)  
В следюущий раз долары убирать не нужно.  
 
Теперь все таки хочется добить автоматику.  
Получается примерно так:  
 
Dim Formulas As Range  
For Each Formulas In Selection  
  Text_Line = Formulas.FormulaR1C1  
  массив = Split(Text_Line  (что то в этом духе))  
'  Разобрать на массив от начала до числа, число, все что есть до следующего числа, число......, последнее число  
'  Формула от простой ссылки до суммы четырех  
  For j = 0 to UBound (массив)      
     If массив(j) это число(забыл :( как проверить) then массив(j)=массив(j)+1  
'     Если элемент число, то прибавить один  
  Next j  
  Formulas.FormulaR1C1 = Join(массив)  
Next
запрет ввода в ячейки повторяющихся данных
 
Запретить не получится, а вот проверить на наличие повтора и заставить изменить - запросто.  
 
Отдельный столбец с формулой =СЧЁТЕСЛИ(S$3:S3;S3)-1  
контролируются данные в столбце S  
 
Дальше:  
Вариант1  
Можно условным форматированием выделить стороку если в ней повторяющееся.  
 
Вариант 2  
Макрос при нахождении единички перенесет курсор в нужную ячейку и таким образом не позволит внести повторно уже введенное.  
 
Что б не считать дублями пустые или нулевые значения нужно слегка поправить формулу на логику (способов несколько) либо в макросе делать перенос курсора по первому ненулевому дубляжу
Редактирование формул макросом
 
Еще мысль пришла...  
Если скопировать таблицу P7:Y14 в примере не на тот же лист, а на новый, но вставлять в ячейку P8 (долары из формул естественно убрать). Теоретически получится смещение на 1 ячейку. Вопрос Как после такого зафиксировать формулы, чтоб при копировании на нужный лист они не сместились.
Редактирование формул макросом
 
Формулы только a+b+c. Даже более, Nx+Ny+Nz. Буквы одинаковые, цифры разные, это видно в примере.  
Как бы вручную не переделывал копироваться будут коряво! Разница между одной позицией в разных месяцах составляет 9 сторок,а в исходных данных - 1.  
Перед цифрами поставил "долар" и после копирования ручками прибавляю по единичке к каждой цифре.
Редактирование формул макросом
 
Имеется таблица глупо созданная моим предшественником с кучей информации.  
В конце каждого месяца делается баланс с тремя десятками формул такого рода "=' цех произ_'!AH$518+' цех перем_'!AH$249+'НФС '!AH$316"  
Для нового баланса нужно скопировать таблицу, а ссылаться на каждое значение одной строкой ниже. Подскажите как сделать оперативно без ручного перебора формул.
Страницы: 1
Наверх