使用列中的范围对相应值求和

Using range from a column to sum corresponding values

我的数据有 2 列,第 C 列(字母 - A、B、C...)和 D 列(值 - 1、2、3...)。每个字母都有对应的值。

我想做的是从 C 列中找到 2 个单元格(例如“G”到“J”)来设置范围,然后使用此范围对 [= 列中的相应值求和=12=](即7+8+9+10=34)。

尝试使用 VLOOKUPMATCH,但不确定我的方向是否正确。我尝试的 MATCH 代码返回了 Error 2015

请原谅我的任何菜鸟错误,这周才开始学习 VBA 并且是 Whosebug 的新手。感谢您的帮助!

Sub loop1()
    'Dynamic range for cells with data
    Dim LastRow As Long
    LastRow = Worksheets("HU").Cells(Rows.Count, 2).End(xlUp).Row '
    LastRow1 = LastRow - 1
    Rng = "C1:D" & LastRow1
    matchrng = "C1:C" & LastRow1

    'Locate start cell in data
    alphabet_start = "G"
    locate_start = Application.Match(alphabet_start, matchrng, 0)

    'Determine end cell
    alphabet_end = "J"
    'WIP_end = Application.VLookup(alphabet_end, myrange, 2, False)
End Sub

你正朝着正确的方向前进。下面提到的代码是你想要的。

Sub loop1()
    'Dynamic range for cells with data
    Dim LastRow As Long, locate_start As Variant, locate_end As Variant, matchrng As Range
    Dim alphabet_start As String, alphabet_end As String

    LastRow = Worksheets("HU").Cells(Rows.Count, 3).End(xlUp).Row '<== Last row of data in Column C
    Set matchrng = ThisWorkbook.Worksheets("HU").Range("C1:C" & LastRow) '<== Set range to Search
    
    'Locate start cell in data
    alphabet_start = "G"
    locate_start = Application.Match(alphabet_start, matchrng, 0) '<== First position
    
    'Determine end cell
    alphabet_end = "J"
    locate_end = Application.Match(alphabet_end, matchrng, 0) '<== Last Position
    
    'If not is error to handle error If alphabet_start or alphabet_end is not found
    If Not IsError(locate_start) And Not IsError(locate_end) Then
        ' Here output is at the end of column D after empty space. You may change as required
        ThisWorkbook.Worksheets("HU").Range("D" & LastRow + 2) = _
        Application.Sum(ThisWorkbook.Worksheets("HU").Range(Cells(locate_start, 4), Cells(locate_end, 4)))
    End If
End Sub

您也可以使用 Excel 公式实现您想要的效果。

=IFERROR(SUM(INDIRECT("D" & MATCH("G",C:C,0) & ":D" & MATCH("J",C:C,0))),"Not Found")

为了理解这一点,让我们创建一个基本公式,然后分解公式以了解它是如何工作的。

比方说,你的作品sheet看起来像

那么我们要的是=SUM(D7:D10)?那么让我们分解一下。

公式可以分解为=SUM("D" & "7" & ":D" & "10")。不要直接在单元格中输入它。不起作用。好的,接下来就是让它动态化,这样我们就可以获得 7 & 10。现在 7G 的位置,10J 的位置,我们可以使用 MATCH 得到。例如

MATCH("G",C:C,0) and
MATCH("J",C:C,0)

所以公式现在可以写成

=SUM("D" & MATCH("G",C:C,0) & ":D" & MATCH("J",C:C,0))

"D" & MATCH("G",C:C,0) & ":D" & MATCH("J",C:C,0) 目前只是一个字符串。您必须使用 INDIRECT 告诉 excel 将其视为一个范围。所以字符串现在变成了

INDIRECT("D" & MATCH("G",C:C,0) & ":D" & MATCH("J",C:C,0))

然后将其放入SUM公式中。

SUM(INDIRECT("D" & MATCH("G",C:C,0) & ":D" & MATCH("J",C:C,0)))

最后一件事。如果未找到匹配项,MATCH 可能会 return 出错,因此我们可以使用 =IFERROR(FORMULA,"ERROR MESSAGE")

解决该问题

所以我们得到了最终的公式

=IFERROR(SUM(INDIRECT("D" & MATCH("G",C:C,0) & ":D" & MATCH("J",C:C,0))),"Not Found")

one more question.. if i want to present the sum in another sheet in the same workbook, how should i change the formula?

假设数据在 Sheet1 中,所以另一个 sheet 中的公式看起来像

=SUM(Sheet1!D7:D10)

所以现在按照上面的逻辑,你会得到

=IFERROR(SUM(INDIRECT("Sheet1!D" & MATCH("G",Sheet1!C:C,0) & ":D" & MATCH("J",Sheet1!C:C,0))),"Not Found")