这很复杂,我不知道如何得到我想要的东西。我可以单独完成,但这会破坏我试图找出的代码的目的。
我想让它搜索一个给定的范围,一旦找到它的值,找到它的重合值然而多行,将它们全部加起来,然后输出第一个值并且它&# 39;重合单元格中的第二个值。甚至可能在不同的表格中。
如果你理解我输入的内容,我会为你鼓掌,因为我知道这可能令人困惑和/或你没有理解。所以我会尝试通过发布我想要的截图来澄清(就像我说的,你可以手动完成,但谁想要通过100多列搜索?)
实施例:
无论是一个实例还是50个实例,我都希望将这些值相加。
答案 0 :(得分:0)
在 D15 中输入:
=A1
在 D16 中输入数组公式:
=IFERROR(INDEX($A$1:$A$1000,INT(SMALL(IF(COUNTIF(D$15:D15,$A$1:$A$1000)=0,ROW($A$1:$A$1000)+(COLUMN($A$1:$A$1000)*0.01)),1)),100*MOD(SMALL(IF(COUNTIF(D$15:D15,$A$1:$A$1000)=0,ROW($A$1:$A$1000)+(COLUMN($A$1:$A$1000)*0.01)),1),1)),"")
并复制下来。 (调整1000以满足您的需求)
必须使用 Ctrl + Shift + 输入输入数组公式,而不仅仅是 Enter key。
然后在 E15 中输入:
=SUMIF($A$1:$A$1000,D15,B:B)
并复制下来。例如:
答案 1 :(得分:0)
这是一个将摘要复制到新工作表的VBA解决方案。使用.Sort
和.Subtotal
。有一个"设置"代码中的部分供您根据自己的情况/要求进行自定义。
有几点:
您需要在数据顶部插入一行,然后添加一些列标题(这些是.SubTotal
方法所必需的。)
您可以将小计格式保留在原始数据中(可能对检查/审核有用吗?)或删除它们(请参阅代码中的注释)。
数据和结果摘要都将按字母顺序排列。
如果您调整代码以将摘要粘贴到原始工作表中,请注意(.SubTotal方法隐藏行!)。
Option Explicit
Sub STot()
Dim dataws As Worksheet, destws As Worksheet
Dim drng As Range
Dim strow As Long, endrow As Long, stcol As Long, endcol As Long
Dim filtrows As Long, modcell As Long
Dim cpyrow As Long, cpycol As Long
'Setup ==========================
'data and destination worksheets
Set dataws = Sheets("Sheet1")
Set destws = Sheets("Sheet3")
'position of data on dataws
strow = 1
stcol = 1 'Col A
'cell position to copy - on new worksheet (destws)
cpyrow = 2
cpycol = 3
'End of setup ===================
With dataws
'find last data row/column
endrow = Cells(Rows.Count, stcol).End(xlUp).Row
endcol = Cells(stcol, Columns.Count).End(xlToLeft).Column
'sort data
Set drng = .Range(.Cells(strow, stcol), .Cells(endrow, endcol))
drng.Sort Key1:=.Cells(strow, stcol), Order1:=xlAscending, Header:=xlYes
'apply Excel SubTotal function
drng.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=2
'collapse Subtotal levels to show summary
.Outline.ShowLevels 2
' copy results to another worksheet
drng.SpecialCells(xlCellTypeVisible).Copy Destination:=destws.Cells(cpyrow, cpycol)
'if you want to remove subtotals from original data
.Cells.RemoveSubtotal
End With
'tidy-up output on destination worksheet
With destws
'remove headings
.Cells(cpyrow, cpycol).Resize(2, 2).Delete (xlShiftUp)
'remove "Total" string in each name
Do While Not (IsEmpty(.Cells(cpyrow, cpycol).Value))
.Cells(cpyrow, cpycol).Value = Left(.Cells(cpyrow, cpycol).Value, InStr(1, .Cells(cpyrow, cpycol).Value, " ") - 1)
cpyrow = cpyrow + 1
Loop
End With
End Sub