Всем привет. Суть задачи: Имеются несколько листов с одинаковой структурой. На мастер лист надо вывести сумму произведений двух ячеек с тех листов, на которых значение определенной ячейки соответствует текстовому значению. Если текстовое значение не соответствует заданному, то надо игнорировать этот лист. Например надо посчитать сколько было приемов пищи. Имеются 3 ячейки: "дни", "кол-во человек" "прием пищи=да/нет" Если приемы пищи = да - делать вычисление. Если приемы пищи = нет - не делать. Буду очень благодарен за помощь.
Всем привет. Суть задачи: Имеются несколько листов с одинаковой структурой. На мастер лист надо вывести сумму произведений двух ячеек с тех листов, на которых значение определенной ячейки соответствует текстовому значению. Если текстовое значение не соответствует заданному, то надо игнорировать этот лист. Например надо посчитать сколько было приемов пищи. Имеются 3 ячейки: "дни", "кол-во человек" "прием пищи=да/нет" Если приемы пищи = да - делать вычисление. Если приемы пищи = нет - не делать. Буду очень благодарен за помощь.vzdrjni
Сообщение отредактировал vzdrjni - Воскресенье, 23.12.2018, 16:09
Не могу понять что не так. Я так понял мне нужна формула =sumif( Эксель на английском. В туториалах (по крайней мере в русском экселе) правильное написание формулы идёт через точку-запятую, но у меня range, criteria, sum_range применяются только через запятую. И в итоге ничего не получается ни в том ни в другом варианте. Я не очень хорош
Не могу понять что не так. Я так понял мне нужна формула =sumif( Эксель на английском. В туториалах (по крайней мере в русском экселе) правильное написание формулы идёт через точку-запятую, но у меня range, criteria, sum_range применяются только через запятую. И в итоге ничего не получается ни в том ни в другом варианте. Я не очень хорош vzdrjni
Спасибо, уже разобрался. Решилось всё двумя макросами и парой формул для подсчета этого Макрос для собирания информации из ячеек: [vba]
Код
Sub CollectAllSheets() Application.Goto Reference:="Stays" Dim i As Integer Dim sh As Worksheet, stsh As Worksheet Dim stays As Range, r As Range Set stays = Range("Stays") If stays.Rows.Count > 1 Then stays.Resize(stays.Rows.Count - 1).Delete End If
For i = 2 To Application.ActiveWorkbook.Sheets.Count Set sh = Application.ActiveWorkbook.Sheets(i) If i > 2 Then Range("Stays").Rows(i - 1).ListObject.ListRows.Add AlwaysInsert:=True End If Set r = Range("Stays").Rows(i - 1) r.Cells(1, 1) = sh.Cells(17, 2).Value r.Cells(1, 2) = sh.Cells(17, 4).Value r.Cells(1, 3) = sh.Cells(18, 5).Value r.Cells(1, 4) = sh.Cells(16, 7).Value r.Cells(1, 7) = sh.Cells(39, 8).Value Next End Sub
[/vba]
Макрос для собирания листов в книгу: [vba]
Код
Sub ConslidateWorkbooks() Dim FolderPath As String Dim Filename As String Dim Sheet As Worksheet Application.ScreenUpdating = False FolderPath = Environ("userprofile") & "\Desktop\Test\" Filename = Dir(FolderPath & "*.xls*") Do While Filename <> "" Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True For Each Sheet In ActiveWorkbook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop Application.ScreenUpdating = True End Sub
Спасибо, уже разобрался. Решилось всё двумя макросами и парой формул для подсчета этого Макрос для собирания информации из ячеек: [vba]
Код
Sub CollectAllSheets() Application.Goto Reference:="Stays" Dim i As Integer Dim sh As Worksheet, stsh As Worksheet Dim stays As Range, r As Range Set stays = Range("Stays") If stays.Rows.Count > 1 Then stays.Resize(stays.Rows.Count - 1).Delete End If
For i = 2 To Application.ActiveWorkbook.Sheets.Count Set sh = Application.ActiveWorkbook.Sheets(i) If i > 2 Then Range("Stays").Rows(i - 1).ListObject.ListRows.Add AlwaysInsert:=True End If Set r = Range("Stays").Rows(i - 1) r.Cells(1, 1) = sh.Cells(17, 2).Value r.Cells(1, 2) = sh.Cells(17, 4).Value r.Cells(1, 3) = sh.Cells(18, 5).Value r.Cells(1, 4) = sh.Cells(16, 7).Value r.Cells(1, 7) = sh.Cells(39, 8).Value Next End Sub
[/vba]
Макрос для собирания листов в книгу: [vba]
Код
Sub ConslidateWorkbooks() Dim FolderPath As String Dim Filename As String Dim Sheet As Worksheet Application.ScreenUpdating = False FolderPath = Environ("userprofile") & "\Desktop\Test\" Filename = Dir(FolderPath & "*.xls*") Do While Filename <> "" Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True For Each Sheet In ActiveWorkbook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop Application.ScreenUpdating = True End Sub