|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 365 - Нужна помощь с макросом в Excel |
|
365 - Нужна помощь с макросом в Excel
|
Пользователь Сообщения: 88 |
Доброго времени!
Просьба помочь с макросом в Excel. Исходные данные: Из программы контроля доступа в офис, выгружаю отчёт см. report4.xlsx, так же я там пометил, как хотелось бы чтобы макрос отрабатывал (зеленым) и как выгружается по умолчанию (черным). Есть столбец "Name" в формате "Текст" вида "ИмяФамилияСотрудника" (в примере, заменил имена на цифры, не суть) и столбец "Time" в формате "Текст" вида "2021-09-01 09:31:27" Задача: "Разбивать" каждого сотрудника по дням пустой строкой. |
|
------- Отправлено: 23:29, 07-09-2021 |
Ветеран Сообщения: 2732
|
Профиль | Отправить PM | Цитировать Sub InBlanc() Set rID1 = Range("A4") 'Первая ячейка с Person Id Set rDT1 = Range("D4") 'Первая ячейка с Time PersonID = rID1 DPerson = Mid(rDT1, 1, 10) j = rID1.Row + 1 i = 1 Do TPerson = rID1.Offset(i, 0) If Trim(TPerson) = "" Then Exit Do TDperson = Mid(rDT1.Offset(i, 0), 1, 10) If Not (PersonID = TPerson And DPerson = TDperson) Then Rows(CStr(j)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove i = i + 1 j = j + 1 PersonID = TPerson DPerson = TDperson End If i = i + 1 j = j + 1 Loop End Sub |
------- Последний раз редактировалось megaloman, 08-09-2021 в 01:10. Отправлено: 00:43, 08-09-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2732
|
Профиль | Отправить PM | Цитировать ИМХО, удобнее использовать скрипт VBS
InXls = "D:\Мой контент\Загрузки\report4.xlsx" 'имя исходного Excel-файла srID1 = "A4" 'Первая ячейка с Person Id srDT1 = "D4" 'Первая ячейка с Time With WScript.Arguments If .Count > 0 Then InXls = .Item(0) End With If Not CreateObject("Scripting.FileSystemObject").FileExists(InXls) Then MsgBox "Файл:" + vbCrLf + InXls + vbCrLf + "не найден" WScript.Quit 1 End If With CreateObject("Excel.Application") .Visible = True 'True ' False .Workbooks.Open InXls InBook = .ActiveWorkbook.Name InList = .Workbooks(InBook).ActiveSheet.Name PersonID = .Range(srID1) DPerson = Mid(.Range(srDT1), 1, 10) j = .Range(srID1).Row + 1 i = 1 Do TPerson = .Range(srID1).Offset(i, 0) If Trim(TPerson) = "" Then Exit Do TDperson = Mid(.Range(srDT1).Offset(i, 0), 1, 10) If Not (PersonID = TPerson And DPerson = TDperson) Then .Rows(CStr(j)).Insert -4121, 0 i = i + 2 j = j + 2 PersonID = TPerson DPerson = TDperson Else i = i + 1 j = j + 1 End If Loop End With |
------- Последний раз редактировалось megaloman, 08-09-2021 в 08:06. Отправлено: 08:00, 08-09-2021 | #3 |
Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Большое спасибо, megaloman!!! (С меня пиво, можешь в личку присылать, куда отправлять)
Очень выручил макрос работает отлично, но у меня правда там ещё пару строк ('Delete columns from G to J и 'Replace name of cells, а дальше это твоё), когда будет время подскажешь как их в скрипт закинуть?! Sub Macro1() ' ' Macro1 Macro ' 'Delete columns from G to J Columns("G:J").Delete 'Replace name of cells Cells.Replace What:="GlavniUlaz_Door1_Entrance Card Reader1", Replacement:= _ "Entrance Card Reader1", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _ :=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:= _ xlReplaceFormula2 Cells.Replace What:="GlavniUlaz_Door1_Exit Card Reader2", Replacement:= _ "Exit Card Reader2", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _ :=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:= _ xlReplaceFormula2 Set rID1 = Range("A4") 'First cell Person Id Set rDT1 = Range("D4") 'First cell Time PersonID = rID1 DPerson = Mid(rDT1, 1, 10) j = rID1.Row + 1 i = 1 Do TPerson = rID1.Offset(i, 0) If Trim(TPerson) = "" Then Exit Do TDperson = Mid(rDT1.Offset(i, 0), 1, 10) If Not (PersonID = TPerson And DPerson = TDperson) Then Rows(CStr(j)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove i = i + 1 j = j + 1 PersonID = TPerson DPerson = TDperson End If i = i + 1 j = j + 1 Loop ' End Sub |
------- Отправлено: 09:07, 08-09-2021 | #4 |
Ветеран Сообщения: 2732
|
Профиль | Отправить PM | Цитировать Цитата Brainiacs:
VBA Excel
В активной книге XLSM
Sub InBlanc() Set rID1 = Range("A4") 'Первая ячейка с Person Id Set rDT1 = Range("D4") 'Первая ячейка с Time MyDel = "G:J" 'Удаляемые столбцы 'Контекстное переименование MyRepl = Array("GlavniUlaz_Door1_Entrance Card Reader1", "Entrance Card Reader1", _ "GlavniUlaz_Door1_Exit Card Reader2", "Exit Card Reader2") Call Range(MyDel).Delete(-4159) For i = LBound(MyRepl) To UBound(MyRepl) Step 2 Call Cells.Replace(MyRepl(i), MyRepl(i + 1), 2, 1) Next PersonID = rID1 DPerson = Mid(rDT1, 1, 10) j = rID1.Row + 1 i = 1 Do TPerson = rID1.Offset(i, 0) If Trim(TPerson) = "" Then Exit Do TDperson = Mid(rDT1.Offset(i, 0), 1, 10) If Not (PersonID = TPerson And DPerson = TDperson) Then Rows(CStr(j)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove i = i + 2 j = j + 2 PersonID = TPerson DPerson = TDperson Else i = i + 1 j = j + 1 End If Loop End Sub Открываем другую книгу: XLSX, XLSM, XLS - из книги XLSM
InXls = "D:\Мой контент\Загрузки\report4.xlsx" 'имя исходного Excel-файла srID1 = "A4" 'Первая ячейка с Person Id srDT1 = "D4" 'Первая ячейка с Time MyDel = "G:J" 'Удаляемые столбцы 'Контекстное переименование MyRepl = Array("GlavniUlaz_Door1_Entrance Card Reader1", "Entrance Card Reader1", _ "GlavniUlaz_Door1_Exit Card Reader2", "Exit Card Reader2") With CreateObject("Excel.Application") .Visible = True 'True ' False .Workbooks.Open InXls Call .Range(MyDel).Delete(-4159) For i = LBound(MyRepl) To UBound(MyRepl) Step 2 Call .Cells.Replace(MyRepl(i), MyRepl(i + 1), 2, 1) Next PersonID = .Range(srID1) DPerson = Mid(.Range(srDT1), 1, 10) j = .Range(srID1).Row + 1 i = 1 Do TPerson = .Range(srID1).Offset(i, 0) If Trim(TPerson) = "" Then Exit Do TDperson = Mid(.Range(srDT1).Offset(i, 0), 1, 10) If Not (PersonID = TPerson And DPerson = TDperson) Then .Rows(CStr(j)).Insert -4121, 0 i = i + 2 j = j + 2 PersonID = TPerson DPerson = TDperson Else i = i + 1 j = j + 1 End If Loop End With End Sub VBS
InXls = "D:\Мой контент\Загрузки\report4.xlsx" 'имя исходного Excel-файла srID1 = "A4" 'Первая ячейка с Person Id srDT1 = "D4" 'Первая ячейка с Time MyDel = "G:J" 'Удаляемые столбцы 'Контекстное переименование MyRepl = Array("GlavniUlaz_Door1_Entrance Card Reader1", "Entrance Card Reader1", _ "GlavniUlaz_Door1_Exit Card Reader2", "Exit Card Reader2") With WScript.Arguments If .Count > 0 Then InXls = .Item(0) End With If Not CreateObject("Scripting.FileSystemObject").FileExists(InXls) Then MsgBox "Файл:" + vbCrLf + InXls + vbCrLf + "не найден" WScript.Quit 1 End If With CreateObject("Excel.Application") .Visible = True 'True ' False .Workbooks.Open InXls Call .Range(MyDel).Delete(-4159) For i = LBound(MyRepl) To UBound(MyRepl) Step 2 Call .Cells.Replace(MyRepl(i), MyRepl(i + 1), 2, 1) Next PersonID = .Range(srID1) DPerson = Mid(.Range(srDT1), 1, 10) j = .Range(srID1).Row + 1 i = 1 Do TPerson = .Range(srID1).Offset(i, 0) If Trim(TPerson) = "" Then Exit Do TDperson = Mid(.Range(srDT1).Offset(i, 0), 1, 10) If Not (PersonID = TPerson And DPerson = TDperson) Then .Rows(CStr(j)).Insert -4121, 0 i = i + 2 j = j + 2 PersonID = TPerson DPerson = TDperson Else i = i + 1 j = j + 1 End If Loop End With |
||
------- Отправлено: 13:58, 08-09-2021 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Нужна помощь по Excel | Veronika35 | Microsoft Office (Word, Excel, Outlook и т.д.) | 4 | 24-06-2017 19:26 | |
Разное - Excel-Нужна помощь ! | magistr_vova | Программирование и базы данных | 2 | 14-12-2011 12:08 | |
Разное - [решено] Помощь в переводе из iWork в Excel! | vovix | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 02-11-2011 15:46 | |
VBS/WSH/JS - [решено] Помогите разобраться с макросом в Excel | camope3 | Скриптовые языки администрирования Windows | 5 | 07-06-2011 23:57 | |
Нужна помощь | Vovan27 | Лечение систем от вредоносных программ | 1 | 10-01-2009 22:03 |
|