Показать полную графическую версию : Создание "сложных" правил для выделения ячеек в excel 2016
у нас на работе поставили турникет и всем раздали карточки с чипами. Этот турникет через програму генерирует отчеты в excel файл. Шапку документа не бирём в счет, одна строка содержит точное время, направление (вход/выход), номер карточки и имя владелица. Мне надо сделать красный фон всех ячеек ряда (до владелица карточки) в тех случеях если сотрудник имеет вход поже 08:35:00 или выход ранише 17:25:00. Хочется автоматизировать процес ибо сотрудников 100+ и обрабатывать вручную всё выходит муторно. Прикрепляю документ для ваших опытов.150138
Если «ручками»:
пишете в E4 значение 08:35:00, в E5 — значение 17:25:00;
умножаете диапазон дат на единицу (пример — Как быстро умножить диапазон значений на одно и тоже число без формул и макросов? - Мир MS Excel (http://www.excelworld.ru/publ/hacks/workspace/quick_product/21-1-0-94)), чтобы значения в ячейках диапазона превратились из текста в число (дата/время в Excel — это на самом деле число, где целая часть обозначает дату, а дробная — время);
оставшемуся выделенным диапазону дат задаёте условное форматирование в виде:https://i.imgur.com/vQxjC6N.png
получаете следующий результат: https://i.imgur.com/TK3WHQv.png
Можно написать макрос, который будет делать подобное автоматически, а Вы сможете поместить его, например, в персональную книгу макросов и вызывать для обработки активного Рабочего листа. Можно написать скрипт, который Вы будете «натравливать» на файл Рабочей книги Excel. Что скажете?
Можно написать скрипт, который Вы будете «натравливать» на файл Рабочей книги Excel. Что скажете? »
Буду рад если сделаите
Буду рад если сделаите »
Я попробую. Ваша задача выбрать, что именно будем делать из:
Можно написать макрос, который будет делать подобное автоматически, а Вы сможете поместить его, например, в персональную книгу макросов и вызывать для обработки активного Рабочего листа. Можно написать скрипт, который Вы будете «натравливать» на файл Рабочей книги Excel. »
Iska, да мне и то и то понятны тока на половину. так что, что сделаите тому и буду рад
Ну, давайте попробуем скрипт WSH:
Option Explicit
Const xlDown = &HFFFFEFE7
Const xlPasteValues = &HFFFFEFBD
Const xlMultiply = 4
Const xlCellValue = 1
Const xlBetween = 1
Dim strSourceFile
Dim objFSO
If WScript.Arguments.Count = 1 Then
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strSourceFile = objFSO.GetAbsolutePathName(WScript.Arguments.Item(0))
If objFSO.FileExists(strSourceFile) Then
Select Case LCase(objFSO.GetExtensionName(strSourceFile))
Case "xls", "xlsx"
With WScript.CreateObject("Excel.Application")
With .Workbooks.Open(strSourceFile)
With .Worksheets.Item(1).Range("B7")
If .Value = "Время" Then
With .Range("E8")
.Value = 1
.Copy
End With
With .Parent.Range(.Offset(1, 0), .Offset(1, 0).End(xlDown))
.PasteSpecial xlPasteValues, xlMultiply, False, False
With .FormatConditions
.Delete
.Add(xlCellValue, xlBetween, CDbl(#08:35:00#), CDbl(#17:25:00#)).Interior.ColorIndex = 3
End With
End With
.Range("E8").ClearContents
.Range("A1").Select
Else
WScript.Echo "Can't find value [Время] in [B7] cell."
.Select
.Application.Visible = True
WScript.Quit 4
End If
End With
.Save
.Close
End With
.Quit
End With
Case Else
WScript.Echo "Probably source file [" & strSourceFile & "] not an Excel Workbook."
WScript.Quit 3
End Select
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If
WScript.Quit 0
Сохраните код в файл с расширением «.vbs». Путь к исходному файлу Рабочей книги указывается аргументом скрипта (также можно просто перетянуть файл Рабочей книги на скрипт в Проводнике).
Iska, спс за ваши труды но паралелино дали совет по проше с другова источника
создаём новое правило:
=И($C9="вход";$B9>"08:35")+И($C9="выход";$B9<"17:25")
а в поле применяется к, пишем:
=$A$9:$E$100
150143
чуствую завтра все начнут писать обяснителиные за красные полоски :laugh:
но паралелино дали совет по проше с другова источника »
Логично, и отчасти даже более правильно, поскольку совместно сравнивается и соседний столбец Направление. Я всё время делаю по старинке, забывая, что уже давно можно использовать не только значение, но и формулу.
Тем не менее, в указанной формуле сравнивается не дата/время с дата/время, а строка со строкой. В данном случае, скорее всего, сие не будет являться необходимым условием, поскольку строки со временем у Вас все одинаковой длины, и час предшествует минутам, а те — секундам, но в ином случае моё замечание насчёт перевода строк в числа:
умножаете диапазон дат на единицу (пример — Как быстро умножить диапазон значений на одно и тоже число без формул и макросов? - Мир MS Excel), чтобы значения в ячейках диапазона превратились из текста в число (дата/время в Excel — это на самом деле число, где целая часть обозначает дату, а дробная — время); »
остаётся существенным.
чуствую завтра все начнут писать обяснителиные за красные полоски »
Э… Сегодня, полагаю.
P.S. Tolea3, переписать скрипт на использование формулы — дабы не вводить её в каждую новую Рабочую книгу «ручками»?
Iska, я рад что у меня нет красных полосок. я в отпуске :yahoo:
Iska, скриптик сделаете?
Iska, скриптик сделаете? »
Попробуем.
Попробовал. За-ши-бись: The conditional formatting may be set incorrectly when you use VBA in Excel (https://support.microsoft.com/en-nz/help/895562/the-conditional-formatting-may-be-set-incorrectly-when-you-use-vba-in) (Last Updated: 8/01/2017), четыре часа псу под хвост.
Теперь пробуйте Вы:
Option Explicit
Const xlDown = &HFFFFEFE7
Const xlToRight = &HFFFFEFBF
Const xlExpression = 2
Dim strSourceFile
Dim objFSO
If WScript.Arguments.Count = 1 Then
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strSourceFile = objFSO.GetAbsolutePathName(WScript.Arguments.Item(0))
If objFSO.FileExists(strSourceFile) Then
Select Case LCase(objFSO.GetExtensionName(strSourceFile))
Case "xls", "xlsx"
With WScript.CreateObject("Excel.Application")
With .Workbooks.Open(strSourceFile)
With .Worksheets.Item(1).Range("B7")
If .Value = "Время" Then
With .Parent.Range(.Offset(1, 0), .Offset(1, 0).End(xlDown))
.Value = .Value
With .Parent.Range(.Offset(0, -1), .End(xlToRight))
.Select
With .FormatConditions
.Delete
.Add(xlExpression, , "=ИЛИ(И($C9 = ""вход""; $B9 > " & CDbl(#08:35:00#) & "); И($C9 = ""выход""; $B9 < " & CDbl(#17:25:00#) & "))").Interior.ColorIndex = 40
End With
End With
End With
.Parent.Range("A1").Select
Else
WScript.Echo "Can't find value [Время] in [B7] cell."
.Select
.Application.Visible = True
WScript.Quit 4
End If
End With
.Save
.Close
End With
.Quit
End With
Case Else
WScript.Echo "Probably source file [" & strSourceFile & "] not an Excel Workbook."
WScript.Quit 3
End Select
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If
WScript.Quit 0
Я всё же внёс значимые на мой взгляд изменения:
время в исходном формате текстовых строк я по-прежнему считаю правильным преобразовывать в численные значения;
поэтому в формуле сравниваются не строки текста, а численные значения времени;
я заменил в формуле арифметическое сложение логических значений на функцию Рабочего листа «ИЛИ()»;
раздражающий красный цвет заменил на бледно-оранжевый.
и попутно обнаружил, что некоторые вместо выхода делают ещё один вход:
https://i.imgur.com/9JhpFWM.png
Iska, выдается ошибка при переносе файла .xlsx на .vbs
https://www.youtube.com/watch?v=62QlxHyCe-o
Iska, выдается ошибка при переносе файла .xlsx на .vbs »
Старый добрый Notepad++, не умеющий толком работать с кодировками :).
Tolea3, 00:45, перед вставкой текста кода. Обратите внимание, какая используется кодировка:
https://i.imgur.com/ZdM9P7y.png
— UTF-8/65001 без BOM. А должна быть — ANSI/1251.
Посему, перед вставкой текста кода, выполните:
https://i.imgur.com/4m1Mjtz.png
Дальше «по тексту».
P.S. Я пользую редактор Far Manager'а:
https://i.imgur.com/0EaHLMI.png
https://i.imgur.com/xUNcfb2.png
UTF-8/65001 без BOM. А должна быть — ANSI/1251. »
Заработало, спс вам огромное
Iska, Здраствуйте. Вы мне сильно помогли с тем скриптом для выевления сотрудников когда приходят позно или уходят рано с работы. Но до того как применить ваш скрипт я еше делаю некие манипуляции с файлом потом применяю скрипт. Вожно ль автоматизировать и деиствия которые я делаю до приминения скрипта?
https://www.youtube.com/watch?v=66pd61GbIGU
Я сам не начальник, а обычный сотрудник и есль я в отпуске или заболею или уиду с работы вопше то начальникам будет туго так как они не шарят в excell. Я хочу что бы из программы сгенерировал отчет, приминил скрипт и всё готова, осталось тока звать на ковер провинившийся.150261
Итак:
Удалить или скрыть столбцы C, E, F (тип события Вам не важен?).
Сделать автоподбор ширины столбцов.
Убрать обрамление границ строк 3:5.
Снять заливку с шапки таблицы (Зачем снимать? Можно просто сделать более бледный цвет).
Отсортировать таблицу по Таб. №, Дата, Время (а не по одному ФИО).
Оставить в списке строк таблицы только по первому и последнему появлению Таб. №.
…
?
Tolea3, чей туфля? В смысле — чем формируется отчёт? Дабы не выполнять лишнюю работу — поищите в настройках отчёта пункт наподобие «Формировать только первое и последнее появление ключа».
приминил скрипт и всё готова, осталось тока звать на ковер провинившийся »
Э… может пусть сразу и выговор с занесением распечатывает — ну, чтоб два раза не вставать?
Iska, в настроиках покавырялса ничго путного не нашёл и даже специалистам которые устанавливали систему звонил и спрашивал, говорят нету тут нужных мне функции
Вот эта софтина выдаёт отчёт
150310
в настроиках покавырялса ничго путного не нашёл и даже специалистам которые устанавливали систему звонил и спрашивал, говорят нету тут нужных мне функции »
Tolea3, странно. Во всех мною ранее виденных подобное наличествовало. Можете озвучить данную претензию тем специалистам.
А что по остальным вопросам (кроме последнего), которые выше?
Iska, Судя по размеру текушего скрипта то следуюшии должен быть прям огромный и дабы не мучать вас оставте так как есть. Пока я тут работаю мне не сложно все обрабатывать а вот после меня началиники пускай сами как знают обработают информацию
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC