我一直在寻找如何做到这一点,我已经尝试了vlookup并且我可以手动合并数据,但是我想要做的是采取一堆垂直对齐的风味名称在多张纸上,在最后一张纸上抓住所有这些口味,合并它们,然后给我一些总量的调味料。我也试图让它自动更新,因为我更新了我需要的量,以便我做出任何数量的果汁。
我会尝试做一个例子,因为我无法在此处上传表格。
一张可能看起来像这样
French Vanilla 20
Pineapple 16
Sweet Cream 10
Mango 8
Coconut 4
0
Strawberry 30
NY Cheesecake 20
0
0
0
0
第二张可能看起来像这样
Passion Fruit 20
Mango 10
Coconut 10
Koolada 2
0
0
Blueberry Candy 10
Banana Split 6
Strawberry 12
Mango 12
0
0
我试图做的是获取最后一张表来提取所有这些名称和数字,将匹配的名称放在一起,并添加匹配名称中的数字。我不需要它按字母顺序排列我只需要它自动更新,因为我在第一张纸上输入不同的金额。
答案 0 :(得分:0)
您还没有说过是否有其他没有数据的工作表,或者数据出现在哪些列中。我已经假设数据总是在A:B列中并且没有&除了那些表之外,工作簿中还有其他任何内容 此代码每次都会创建一个新的报告表 - 运行两次它会崩溃,因为它会尝试创建一个名为“报告”的第二张表。 (所以每次都要删除报告表)。 可能有更好的方法,这个代码肯定可以改进,以满足您的需求。
Public Sub Report()
Dim wrkSht As Worksheet
Dim wrkSht_rpt As Worksheet
Dim lLastRow As Long
Dim lLastRow_rpt As Long
'Create a new sheet to put the report on.
Set wrkSht_rpt = Worksheets.Add
wrkSht_rpt.Name = "Report"
'Get the data from each sheet and paste into columns A:B on the report sheet.
For Each wrkSht In ThisWorkbook.Worksheets
lLastRow = 0
With wrkSht
If .Name <> wrkSht_rpt.Name Then
'If there's no data in column A this will throw an error.
On Error Resume Next
lLastRow_rpt = wrkSht_rpt.Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
lLastRow = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
On Error GoTo 0
If lLastRow > 0 Then
'There's data on the sheet, so copy it to the report sheet.
.Range(.Cells(1, 1), .Cells(lLastRow, 2)).Copy _
Destination:=wrkSht_rpt.Cells(lLastRow_rpt + 1, 1)
End If
End If
End With
Next wrkSht
lLastRow = 0
lLastRow_rpt = 0
With wrkSht_rpt
'Find last row in column A on report.
lLastRow_rpt = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
'Copy all flavours to column D.
.Range(.Cells(1, 1), .Cells(lLastRow_rpt, 1)).Copy _
Destination:=.Cells(1, 4)
'Sort the column, this will place all blanks at the bottom.
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range(.Cells(1, 4), .Cells(lLastRow_rpt, 4)), Order:=xlAscending
.Sort.SetRange .Range(.Cells(1, 4), .Cells(lLastRow_rpt, 4))
.Sort.Header = xlNo
.Sort.SortMethod = xlPinYin
.Sort.Apply
'Remove duplicates and find new last row in column D.
'The new last row is stored in a separate variable as we need to original to use
'within the SUMIF formula.
.Range(.Cells(1, 4), .Cells(lLastRow_rpt, 4)).RemoveDuplicates 1, xlNo
lLastRow = .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
'Add a formula to add everything up, then copy paste values.
With .Range(.Cells(1, 5), .Cells(lLastRow, 5))
.FormulaR1C1 = _
"=SUMIF(R1C1:R" & lLastRow_rpt & "C1,RC4,R1C2:R" & lLastRow_rpt & "C2)"
.Copy
.PasteSpecial xlPasteValues
End With
.Range("A1:C1").EntireColumn.Delete
.Columns(1).AutoFit
End With
End Sub
答案 1 :(得分:0)
我已将此作为单独的答案添加,因为它与我的第一个答案完全不同。
在工作簿中的某个位置创建工作表名称列表。例如在A1中放置了Norse Temple 30ML&#39;,在A2 put&#39; Norse Temple 15ML&#39;等等。命名这个范围 - 我在我的例子中将它命名为SheetList。
创建此公式:
=SUMPRODUCT(SUMIF(INDIRECT("'" & SheetList & "'!B:B"),"Nicotine 100mg",INDIRECT("'" & SheetList & "'!C:C")))
&#39;尼古丁100毫克&#39;可以用单元格引用替换,以便您可以向下拖动。
此方法将要求您在报告页面上手动创建成分列表,但将为您完成添加。它也会在您更新数字时更新 - VBA方法需要手动执行代码。
如果你想要一个VBA解决方案我可以创建一个 - 只需要找到时间。
链接到我找到解决方案的位置:http://www.mrexcel.com/forum/excel-questions/119020-sumif-multiple-sheets.html