Excel 对空白单元格上方的行求和,直至上一个空白单元格

Excel 对空白单元格上方的行求和,直至上一个空白单元格,excel,vba,loops,sum,blank-line,Excel,Vba,Loops,Sum,Blank Line,你好 我正在尝试构建一个宏,它在一列中的某个范围内查找一个空白单元格,并对该空白单元格和上一个空白单元格之间的所有单元格求和 我在网上搜索过很多次,虽然其他人问过这个问题,但我觉得这些问题的答案在我的情况下并没有特别的帮助,因为我需要这些答案来处理3500多行 例如: 4 3 4 BLANK 1 2 5 7 1 BLANK 2 1 4 BLANK 3 在这种情况下,称为“BLANK 1”的单元格将是前面3行的总和:4+3+4=11 “Blank 2”

你好

我正在尝试构建一个宏,它在一列中的某个范围内查找一个空白单元格,并对该空白单元格和上一个空白单元格之间的所有单元格求和

我在网上搜索过很多次,虽然其他人问过这个问题,但我觉得这些问题的答案在我的情况下并没有特别的帮助,因为我需要这些答案来处理3500多行

例如:

4  
3  
4  
BLANK 1  
2  
5  
7  
1  
BLANK 2  
1  
4  
BLANK 3
在这种情况下,称为“BLANK 1”的单元格将是前面3行的总和:4+3+4=11
“Blank 2”将是15,以此类推

范围为“G8:G3561”

编辑

有关快速答案,请参见吴先生的答案。它工作得很好! 然而,由于我对VBA和编码还不熟悉,我不知道这些代码是如何工作的或为什么工作的

我非常渴望更好地理解VBA,这就是为什么我要继续这篇文章(如果允许的话)。
此外,我想为评论者提供证据,证明我自己确实做过这方面的工作,并且我更喜欢构建自己的代码

对我来说,理解为什么我的代码能工作或不能工作是很重要的,这就是为什么我希望您仍然希望帮助我开发自己的代码

我终于找到了一种对我来说合乎逻辑的方法。我知道这不是最简单的方法,但我想知道它是否可行

我已经编写了以下代码

Sub Sum_storage()
Dim rng As Range
Dim cell As Range
Dim cell2 As Range
Dim cell3 As Range

Range("G8").End(xlDown).Offset(1, 0).Select
Set cell = Selection
cell.Value = "temp" 'Finds the first blank cell in column G _
                     and creates a temporary value in order _
                     to find the second blank cell

Range("G8").End(xlDown).Offset(1, 0).Select
Set cell2 = Selection

cell.Offset(1, 0).Select
Set cell3 = Selection  'The range i need to sum can _
                        now be described as "cell3:cell2"

Set rng = Range(Range("cell3"), Range("cell2")) 'The code works until this point
cell2.Value = WorksheetFunction.Sum(rng)
其思想是定义我想用多个变量求和的范围。
我的问题是试图引用这些变量(并以比使用.Offset更简单的方式设置它们)

是否无法基于之前设置的两个范围设置范围(rng)


如果这是可能的,我的下一步是创建某种循环,它可以使所有3500+行都能工作。

这并没有那么复杂,可能类似于

lastrow = Cells(Rows.Count, "G").End(xlUp).Row
firstrow = 8
TempTotal = 0
for x = firstrow to lastrow + 1
    If Cells(x, "G") <> "" Then
        TempTotal = TempTotal + Cells(x, "G")
    Else:   Cells(x, "G") = TempTotal
            Cells(x, "G").Interior.ColorIndex = 4
            TempTotal = 0
    End if
    Next x
lastrow=单元格(Rows.Count,“G”).End(xlUp).Row
第一行=8
总数=0
对于x=第一行到最后一行+1
如果单元格(x,G),则
TENTOTAL=TENTOTAL+细胞(x,“G”)
其他:单元格(x,“G”)=总
单元格(x,“G”)。内部颜色指数=4
总数=0
如果结束
下一个x
我做了一个编辑,使它简单一点

代码的逻辑:

  • 使用列“G”中的数据定义最后一行
  • 逐单元格向下移动,直到该行
  • 如果单元格中有值,则将其添加到临时总计中
  • 如果为空,则插入临时总计并将试探性总计重置为零

  • 这是第一行,我们在其中选择列“G”中的最后一个单元格,使用其上的use End(xlup)来获取包含数据的最后一个单元格,并使用.row来获取该单元格的行号

  • 设置一个For循环,该循环在“For”和“next x”行之间重复运行代码,同时在每次重复时将x的值从“firstrow”增加到“lastrow+1”(因此,如果firsrrow为1,lastrow为100),则它将以x=1,2,3,4,5等方式运行代码100次。)

  • 这是“if”语句,“means”不等于,所以我们说如果x行,col“G”上的单元格不等于“”这是一个空字符串(或无),那么我们将执行下一行(将其值添加到testotal)
  • 如果“if”语句不是真的(如果单元格为空),那么我们将执行“Else”下的操作,使该单元格等于DentTotal,将其颜色更改为绿色(4是色码,它们介于1和50之间),然后将DentTotal重置为0

  • 您使用
    End(xlDown)
    的方法是正确的

    这应该比循环遍历所有单元格快,因为这会跳到下一个空单元格,并通过
    WorksheetFunction.Sum
    求和

    Option Explicit
    
    Public Sub DoMyStuff()
        Dim ws As Worksheet
        Set ws = Worksheets("Tabelle8") 'define your worksheet here
    
        Dim FirstCell As Range
        Set FirstCell = ws.Range("G8")
    
        Dim VeryLastCell As Range 'get very last cell as stop criteria
        Set VeryLastCell = ws.Cells(ws.Rows.Count, "G").End(xlUp)
    
        Do
            Dim LastCell As Range
            If FirstCell.Offset(1) = vbNullString Then 'test if there is only one cell to sum
                Set LastCell = FirstCell
            Else
                Set LastCell = FirstCell.End(xlDown)
            End If
    
            With LastCell.Offset(1, 0) 'this is the cell we want to write the sum
                .Value = Application.WorksheetFunction.Sum(ws.Range(FirstCell, LastCell))
                .Interior.Color = RGB(255, 0, 0)
            End With
    
            Set FirstCell = LastCell.Offset(2, 0)
    
        Loop While FirstCell.Row < VeryLastCell.Row
    End Sub
    
    选项显式
    公共子域suff()
    将ws设置为工作表
    设置ws=Worksheets(“Tabelle8”)'在此处定义工作表
    将第一个单元格设置为范围
    设置FirstCell=ws.Range(“G8”)
    Dim VeryLastCell作为范围“获取最后一个单元格作为停止标准”
    Set VeryLastCell=ws.Cells(ws.Rows.Count,“G”).End(xlUp)
    做
    将最后一个单元格设置为范围
    如果FirstCell.Offset(1)=vbNullString,则“测试是否只有一个单元格要求和”
    设置LastCell=FirstCell
    其他的
    设置LastCell=FirstCell.End(xlDown)
    如果结束
    使用LastCell.Offset(1,0)'这是我们要写入和的单元格
    .Value=Application.WorksheetFunction.Sum(ws.Range(FirstCell,LastCell))
    .Interior.Color=RGB(255,0,0)
    以
    设置FirstCell=LastCell.Offset(2,0)
    在FirstCell.Row
    请参阅,不要忘了阅读和阅读。另外,请查看“欢迎使用StackOverflow”,了解更多信息。请注意,这不是免费的代码编写服务。然而,我们渴望帮助其他程序员(和有抱负的人)编写他们自己的代码。请阅读上的帮助主题。您可能还想在这样做的同时获得一枚徽章。之后,请使用您迄今为止编写的VBA代码更新您的问题,以便完成您希望完成的任务。我们会在这里等你。准备好帮助并帮助您完成代码。如果您在尝试制作代码时表现出一些努力,我将更愿意帮助您修复代码,但这不是免费的代码服务,所以在我看到一些真正的努力之前。有很多帖子,你可以找到你需要的几个功能。首先查找第一个空单元格,然后从那里继续。当你陷入困境时,将你的代码添加到OP中,我们将帮助你进行下一步。好Luck@Ralph谢谢你的评论。我很抱歉,我显然问了一个糟糕的问题,错过了一些礼仪。然而,我已经投入了一些努力,试图自己解决这个问题。我没有提供代码示例之类的原因,是因为我觉得它们需要一个完整的