创造价值

时间:2015-02-06 21:50:34

标签: excel formula

这很复杂,我不知道如何得到我想要的东西。我可以单独完成,但这会破坏我试图找出的代码的目的。

我想让它搜索一个给定的范围,一旦找到它的值,找到它的重合值然而多行,将它们全部加起来,然后输出第一个值并且它&# 39;重合单元格中的第二个值。甚至可能在不同的表格中。

如果你理解我输入的内容,我会为你鼓掌,因为我知道这可能令人困惑和/或你没有理解。所以我会尝试通过发布我想要的截图来澄清(就像我说的,你可以手动完成,但谁想要通过100多列搜索?)

实施例: Example

无论是一个实例还是50个实例,我都希望将这些值相加。

2 个答案:

答案 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)

并复制下来。例如:

enter image description here

答案 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