2015-01-16 3 views
0

Я пытаюсь сделать следующее, и я не могу найти правильный порядок для vlookup и sumif.Sumif & Vlookup сочетание

Начну с того, что я уточню, что у меня есть. На листе 1 у меня есть список идентификаторов (1-60ish с некоторыми вариантами) в столбце A, и каждый идентификатор имеет массу (как в килограммах), связанную с ним в столбце B. В зависимости от набора критериев, который был определен, некоторые из масс связаны друг с другом и нуждаются в суммировании. Как они соотносятся с контуром на листе2 в качестве матрицы. Все идентификаторы спускаются по первому столбцу и по верхнему столбцу и где они связаны, и как таковая должна быть суммирована, в соответствующую ячейку помещается «Y». Наконец, в sheet3 у меня есть список идентификаторов еще раз в столбце A, и я хотел бы найти строку, в которой идентификатор находится на матрице на листе2, и суммировать массы из листа 1, где в матрице есть «Y» ,

Например, в колонке B листа 3 формула, указанная в столбце B листа 3, просматривает ID 26 в столбце C листа 2 (показана), чтобы идентифицировать, какие идентификаторы должны быть суммированы (обозначены символом «Y» и связаны с ID в строке 3) для вычисления объединенной массы. Массы, которые должны быть суммированы из листа 1, связаны с ID 23, 25, 26. Таким образом, требуемый результат представляет собой сумму масс 23, 25, 26.

Я приложил скриншот, чтобы сделать это более ясным.

Mass Matrix

Я надеюсь, что кто-то может помочь!

+0

Все листы, используя эти строки? Значения на листе1 Строка 10 соответствуют значениям на Sheet2 и 3? Как и во всех выстроились заголовки? – peege

+0

Я не понимал, что вы не отметили это с помощью VBA, и я предоставил решение в VBA. Если вы можете использовать VLookup, это было бы предпочтительнее. – peege

ответ

0

UNTESTED (может быть стоит ваше чтение mvce), но, пожалуйста, попробуйте:

=SUMIF(INDIRECT("Sheet2!"&MATCH(VLOOKUP(A4,Sheet1!A:B,2,0),Sheet2!A:A,0)&":"&MATCH(VLOOKUP(A4,Sheet1!A:B,2,0),Sheet2!A:A,0)),"Y",Sheet2!1:1) 
0

Использование VBA. Не видел, чтобы на нем не было тега. Это не проверено, так как у меня нет вашей матрицы для работы.

Установка:

  • Это зависит от «массы», перечисленных на Лист3 быть в том же порядке и на тех же номеров строк, как Sheet2.
  • Поместите это подразделение в модуль.

Что происходит:

  1. Инициализировать переменные, имена листов, последние ряды, и т.д.
  2. Ленте через лист 3 рядами, держа место для вставки на сумму
  3. Переберите столбцы на Sheet2, поиск «Y»
  4. IF a «Y», получите tempMass из строки 3 этой колонки
  5. Цикла по Лист1 по строкам, поиск tempMass
  6. ЕСЛИ совпадение найдено, добавить массу tempSum
  7. Повторить 3-6 для каждого столбца на Sheet2
  8. установленного значения на Лист3 текущей строке, Колонка B на tempSum
  9. Повторить 2-9

Код:

Sub SumMasses() 

Dim lastRow1 As Long, lastRow2 As Long, lastRow3 As Long, lastCol As Long 
Dim s1Row As Long, s2Row As Long, s3Row As Long, lCol As Long 
Dim s1 As String, s2 As String, s3 As String, tempMass As String 
Dim tempSum As Double 

s1 = "Sheet1"  'Define Sheet names here 
s2 = "Sheet2" 
s3 = "Sheet3" 

lastRow1 = Sheets(s1).Range("A" & rows.count).End(xlUp).row 
lastRow2 = Sheets(s2).Range("A" & rows.count).End(xlUp).row 
lastRow3 = Sheets(s3).Range("A" & rows.count).End(xlUp).row 
lastCol = Sheets(s2).Cells(3, Columns.count).End(xlToLeft).column 'Get last Column from matrix on Sheet 2, Row 3 

    For s3Row = 4 To lastRow3 
     tempSum = 0 

     'Loop through columns on Matrix to find "Y" 
     For lCol = 4 To lastCol 
      If Sheets(s2).Cells(s3Row, lCol) = "Y" Then 
       tempMass = Sheets(s2).Cells(3, lCol)  'Get Mass from row 3 above match 

       'Loop through Sheet 1 to find Mass to add to sum 
       For s1Row = 4 To lastRow1 
        If Sheets(s1).Cells(s1Row, "A") = tempMass Then 
         tempSum = Sheets(s1).Cells(s1Row, "B") 
        End If 
       Next s1Row 
      End If 
     Next lCol 'Advance through the columns 

     Sheets(s3).Cells(s3Row, "B") = tempSum  'Set sum on Sheet 3 

    Next s3Row  'Proceed to the next Mass on Sheet3 

End Sub 
0

Регулировка диапазонов:

=SUMPRODUCT(SUMIF(Sheet1!$A$2:$A$31,INDEX((INDEX(Sheet2!$D$4:$AG$33,MATCH(Sheet3!A2,Sheet2!$C$4:$C$33,0),0)="Y")*(Sheet2!$D$3:$AG$3)+1,)-1,Sheet1!$B$2:$B$31)) 
Смежные вопросы