Доброго времени суток, уважаемые Планетяне!
в файле Свод собираются данные из выгрузок получаемые из корпоративного ПО,
т.к. не силён в VBA, но с помощью нейросети смог накрапать такой код, собственно вопрос, есть возможность как то оптимизировать и/или сократить код или придется все 56 условий прописывать с конструкцией If...Then...ElseIf.
про поиск знаю, но вразумительного под свою задачу не нашёл, направьте если не сложно
(и под спойлер не получилось спрятать:()
в файле Свод собираются данные из выгрузок получаемые из корпоративного ПО,
т.к. не силён в VBA, но с помощью нейросети смог накрапать такой код, собственно вопрос, есть возможность как то оптимизировать и/или сократить код или придется все 56 условий прописывать с конструкцией If...Then...ElseIf.
про поиск знаю, но вразумительного под свою задачу не нашёл, направьте если не сложно

(и под спойлер не получилось спрятать:()
Код |
---|
Sub СобратьДанныеИз_Вс_РФМТП() Dim ИмяПапки As String Dim ИмяФайла As Variant Dim ИсходнаяКнига As Workbook Dim ИсходныйЛист As Worksheet Dim ЭтаКнига As Workbook 'в ней находится макрос Dim ЛистКнигиСВОД As Worksheet 'в него вносим данные из файлов выгрузки Dim Значения1 As String '$D$2 Dim Значения2 As Variant 'String * 1024 '$D$4 Dim Значения3 As Variant '=ABS($G$11)/1000 Dim Значения4 As Variant '$G$5 Dim Значения5 As Variant '$G$8 Dim i As Variant Dim ДанныеСвод As String Dim strPath As String 'ОбобщенныеДанные = "" ' Определяем книгу для обобщенных данных Set ЭтаКнига = ActiveWorkbook ' Определяем лист для обобщенных данных Set ЛистКнигиСВОД = ЭтаКнига.Sheets(1) ' ' Пользователь выбирает файлы ИмяФайла = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="Выберите Множестово файлов или один файл", MultiSelect:=True) If Not IsArray(ИмяФайла) Then Exit Sub ' Пользователь нажал "Отмена" End If For i = LBound(ИмяФайла) To UBound(ИмяФайла) ' Открываем исходную книгу Set ИсходнаяКнига = Workbooks.Open(ИмяФайла(i)) For Each ИсходныйЛист In ИсходнаяКнига.Sheets If ИсходныйЛист.Name = "РФМ" Then ИсходныйЛист.UsedRange.Value = ИсходныйЛист.UsedRange.Value ' Получаем значения из указанных ячеек Значения1 = ИсходныйЛист.Range("D2").Value ' период: 'здесь надо применить справочник, что бы рассортировать объекты по ТП Значения2 = ИсходныйЛист.Range("D4").Value 'Объекты Значения3 = Abs(ИсходныйЛист.Range("G11").Value) / 1000 'Итого потребление/ 1000 Значения4 = ИсходныйЛист.Range("G5").Value 'Максимальная потребленная мощность Значения5 = ИсходныйЛист.Range("G8").Value 'Среднеарифметическая фактическая потребленная мощность With ЛистКнигиСВОД Dim СтрокаДляЗаписи As Long If Значения2 = "Гр.ТП Амазар-Ростов-на-Дону/т (ВЛ-7226), репер №1; ВЛ 220 кВ Долгопрудный/т- Ростов-на-Дону/т, репер №71 (2)" Then СтрокаДляЗаписи = 6 'пока специально указал 6 строку .Cells(СтрокаДляЗаписи, 1).Value = Значения1 .Cells(СтрокаДляЗаписи, 3).Value = Значения3 .Cells(СтрокаДляЗаписи, 4).Value = Значения4 .Cells(СтрокаДляЗаписи, 5).Value = Значения5 ElseIf Значения2 = "Гр.ТП ВЛ 220 кВ Ульяновск/т-Долгопрудный/т, репер №62; ВЛ 220 кВ Уруша/т- Долгопрудный/т, репер №170; ВЛ 220 кВ Долгопрудный/т-Ростов-на-Дону/т; ВЛ 220 кВ Долгопрудный/т - Чичатка, репер №1 (4)" Then СтрокаДляЗаписи = 5 .Cells(СтрокаДляЗаписи, 1).Value = Значения1 .Cells(СтрокаДляЗаписи, 3).Value = Значения3 .Cells(СтрокаДляЗаписи, 4).Value = Значения4 .Cells(СтрокаДляЗаписи, 5).Value = Значения5 End If End With End If Next ИсходныйЛист ' Закрываем исходную книгу без сохранения ИсходнаяКнига.Close savechanges:=False Next i ' Выводим обобщенные данные в окно сообщений MsgBox "Данные были успешно занесены в свод." End Sub |