Fantast2154, Можно наверняка и попроще, но я реализовал так:
[vba]
Код
Sub summ2() Dim i As Long Dim j As Long Dim n As Long Dim Eda() As String Dim Kolvo() As Double i_n = Worksheets("Походный лист").Cells(Rows.Count, 1).End(xlUp).Row j_n = Worksheets("Походный лист").Cells(1, Columns.Count).End(xlToLeft).Column i2_n = Worksheets("Итого").Cells(Rows.Count, 1).End(xlUp).Row ReDim Eda(i2_n) ReDim Kolvo(i2_n) For i = 1 To i2_n Eda(i) = Worksheets("Итого").Cells(i, 1) Kolvo(i) = 0 Next i For i = 1 To i_n For j = 1 To j_n For n = 1 To i2_n If Worksheets("Походный лист").Cells(i, j) <> "" And Worksheets("Походный лист").Cells(i, j) = Eda(n) Then Kolvo(n) = Kolvo(n) + Worksheets("Походный лист").Cells(i, j + 1).Value End If Next n Next j Next i For i = 1 To i2_n If Kolvo(i) > 0 Then Worksheets("Итого").Cells(i, 2) = Kolvo(i) End If Next i End Sub
[/vba]
Код предполагает, что на листе "Итого" уже перечислены все виды продуктов... И что всё кол-во (в граммах) продукта, стоит в соседнем столбце от наименования (на листе "Походный лист").
Fantast2154, Можно наверняка и попроще, но я реализовал так:
[vba]
Код
Sub summ2() Dim i As Long Dim j As Long Dim n As Long Dim Eda() As String Dim Kolvo() As Double i_n = Worksheets("Походный лист").Cells(Rows.Count, 1).End(xlUp).Row j_n = Worksheets("Походный лист").Cells(1, Columns.Count).End(xlToLeft).Column i2_n = Worksheets("Итого").Cells(Rows.Count, 1).End(xlUp).Row ReDim Eda(i2_n) ReDim Kolvo(i2_n) For i = 1 To i2_n Eda(i) = Worksheets("Итого").Cells(i, 1) Kolvo(i) = 0 Next i For i = 1 To i_n For j = 1 To j_n For n = 1 To i2_n If Worksheets("Походный лист").Cells(i, j) <> "" And Worksheets("Походный лист").Cells(i, j) = Eda(n) Then Kolvo(n) = Kolvo(n) + Worksheets("Походный лист").Cells(i, j + 1).Value End If Next n Next j Next i For i = 1 To i2_n If Kolvo(i) > 0 Then Worksheets("Итого").Cells(i, 2) = Kolvo(i) End If Next i End Sub
[/vba]
Код предполагает, что на листе "Итого" уже перечислены все виды продуктов... И что всё кол-во (в граммах) продукта, стоит в соседнем столбце от наименования (на листе "Походный лист").Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Понедельник, 10.08.2015, 12:40
Господа, пытался решить пролему Fantast2154 подскажите, пожалуйста, почему выскакивает ошибка "end if without block if"? [vba]
Код
Sub ff() Dim i As Integer Dim b As String Dim f As Integer Dim d As Integer Dim gr As Double Dim summ As Long summ = 0 For i = 4 To 25 ThisWorkbook.Sheets("Итого").Cells(i, 1).Value = b ThisWorkbook.Sheets("Походный лист").Activate For Each c In [A1:S50] If c.Value = b Then f = c.Column + 1: summ = summ + Cells(c.Row, f).Value Exit For End If Next Next i End Sub
[/vba] [moder]Вроде не первый день на форуме, а Правила так и не прочитали. Код надо оформлять тегами (кнопка #). Исправила[/moder]
Господа, пытался решить пролему Fantast2154 подскажите, пожалуйста, почему выскакивает ошибка "end if without block if"? [vba]
Код
Sub ff() Dim i As Integer Dim b As String Dim f As Integer Dim d As Integer Dim gr As Double Dim summ As Long summ = 0 For i = 4 To 25 ThisWorkbook.Sheets("Итого").Cells(i, 1).Value = b ThisWorkbook.Sheets("Походный лист").Activate For Each c In [A1:S50] If c.Value = b Then f = c.Column + 1: summ = summ + Cells(c.Row, f).Value Exit For End If Next Next i End Sub
[/vba] [moder]Вроде не первый день на форуме, а Правила так и не прочитали. Код надо оформлять тегами (кнопка #). Исправила[/moder]rosko
Сообщение отредактировал Pelena - Вторник, 11.08.2015, 11:55
rosko, когда Вы записываете оператор If в одну строку, End If уже не нужен. Кстати Exit For у Вас записан уже после конструкции If, т.е. он выполнится на первом шаге цикла, в задачу не вникала, но подозреваю, что так не должно быть. Правильно будет так: [vba]
Код
If c.Value = b Then f = c.Column + 1: summ = summ + Cells(c.Row, f).Value Exit For End If
[/vba] или так: [vba]
Код
If c.Value = b Then f = c.Column + 1: summ = summ + Cells(c.Row, f).Value: Exit For
[/vba]
rosko, когда Вы записываете оператор If в одну строку, End If уже не нужен. Кстати Exit For у Вас записан уже после конструкции If, т.е. он выполнится на первом шаге цикла, в задачу не вникала, но подозреваю, что так не должно быть. Правильно будет так: [vba]
Код
If c.Value = b Then f = c.Column + 1: summ = summ + Cells(c.Row, f).Value Exit For End If
[/vba] или так: [vba]
Код
If c.Value = b Then f = c.Column + 1: summ = summ + Cells(c.Row, f).Value: Exit For