检查Excel工作表中是否存在单元格值,然后获取底部单元格的值并添加

时间:2016-06-16 20:56:24

标签: excel vba excel-vba

我在表格中有不同的定义类别(A列),这些类别分布在整个数据表中(F3:I14)。

我想为单元格F3中的每个类别(a,b,c,d,e,f)添加值:I14,它在分配的列(C列)中写在它下面。

例如: 对于类别a,添加单元格F3中的所有数字:I14,它写在单元格C2中的下面。

enter image description here

我尝试了VLOOKUP公式,但它没有用。

2 个答案:

答案 0 :(得分:4)

对于公式答案,请使用此数组公式:

=SUM(IF($F$3:$I$14=A2,$F$4:$I$15))

作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,那么excel会将{}放在公式周围。

enter image description here

答案 1 :(得分:3)

我赞成Scott Craner的答案,因为我认为这是最好,最干净的解决方案。但是当你用'VBA'标记这个问题时,我想我也会用VBA为它提供纯编程解决方案。如果不出意外的话,它就说明了像斯科特这样的好公式有多么简单!

Sub SumCategories()
    Const startColumn As Integer = 6 'F
    Const endColumn As Integer = 9 'I
    Const startRow As Integer = 3
    Const endRow As Integer = 14

    Const categoryColumn As Integer = 1 'A
    Const assignedColumn As Integer = 3 'C
    Dim categoryRow As Integer
    categoryRow = 2

    Dim categoryTotalAssigned As Integer
    categoryTotalAssigned = 0

    Dim currentCategory As String
    currentCategory = ActiveSheet.Cells(categoryRow, categoryColumn)

    While Not currentCategory = ""
        'Loop through all data to sum totals
        For c = startColumn To endColumn
            For r = startRow To endRow Step 2 'Look in every other row
                If ActiveSheet.Cells(r, c) = currentCategory Then
                    categoryTotalAssigned = categoryTotalAssigned + ActiveSheet.Cells(r + 1, c)
                End If
            Next r
        Next c

        'Write total for category
        ActiveSheet.Cells(categoryRow, assignedColumn) = categoryTotalAssigned

        'Move to next row
        categoryRow = categoryRow + 1

        'Reset total for next category
        categoryTotalAssigned = 0

        'Get next category
        currentCategory = ActiveSheet.Cells(categoryRow, categoryColumn)
    Wend
End Sub

Result of VBA Script