在列中最后使用的单元格和列之间有空白单元格之后,如何在 2 个单元格处求和?

How to do sum at 2 cell after the last used cell in column and column has blank cells in between?

Get Image Here

如图所示,我有 两列 J 和 K 在上次使用的单元格 之后的 两个单元格处求和,问题是有时 随机定向的空单元格 由于中间停止求和。

另外,J 列的总和单元格应该有绿色文本,K 列的总和单元格应该有红色文本。请将此包含到您的代码中,我不知道该怎么做。

我是 vba 的初学者,这只是我的第五天...

这是我到目前为止尝试过的...

起初,我认为求和很容易,只需找到列中最后使用的单元格,然后应用求和公式即可。所以我尝试了下面的代码...

 Dim LastRow As Long
 
 LastRow = Range("J2").End(xlDown).Row
 Cells(LastRow + 2, "J").Formula = "=SUM(J2:J" & LastRow & ")"

然后我意识到我的情况不会那么容易。我发现当我玩宏时,总和已经完成,但只在单元格之间。所以,我尝试了我所有的编程知识,并考虑应用条件,如果单元格包含值,则将该值添加到变量,如果单元格为空,则移动到下一个单元格……但我不知道该怎么做。 .. 我仍然提供我尝试过的代码...

Sub SumData()
 Dim sumOne As Long
  Dim LastRow As Long

 LastRow = Range("F2").End(xlDown).Row
 sumOne = 0
 
        Dim MyRng As Range
        Set MyRng = ActiveSheet.UsedRange.Columns("F")
        Dim cellRng As Range
Sum:
        For Each cellRng In MyRng.Cells
             If cellRng.Value <> "" Then
            sumOne = sumOne + cellRng.Value
            
            Cells(LastRow + 2, "F").Value = sumOne
        
            GoTo Sum
        End If
            Range("A2").Select
        Next
        
End Sub

使用上面的代码,我尝试使用 F 列中的数据进行练习,因此 F 列没有问题... 而且我认为会有更简单更好的方法来做到这一点

回答: Simon 指导的问题: 要查找您使用 xlDown 的最后一行。这意味着它从第 1 行向下搜索,直到找到一个空单元格。您需要使用 xlUp,以便它从 sheet 的底部向上搜索,从而找到真正的最后一个单元格。

试一试,看看是不是您想要的。

Sub SumColumns()

Dim lRowJ As Long, lRowK As Long

lRowJ = Range("J" & Rows.Count).End(xlUp).Row
lRowK = Range("K" & Rows.Count).End(xlUp).Row

With Range("J" & lRowJ + 2)
    .Value = Application.Sum(Range("J1:J" & lRowJ))
    .Font.Color = vbGreen
End With
With Range("K" & lRowK + 2)
    .Value = Application.Sum(Range("K1:K" & lRowK))
    .Font.Color = vbRed
End With

End Sub

这是另一个使用特定 sheet 名称的示例,没有 With 并使用 RGB 作为颜色:

Dim lRowJ As Long, lRowK As Long, ws As Worksheet

Set ws = Sheets("Sheet1") 'Name of your sheet
lRowJ = ws.Range("J" & Rows.Count).End(xlUp).Row
lRowK = ws.Range("K" & Rows.Count).End(xlUp).Row

ws.Range("J" & lRowJ + 2).Value = Application.Sum(Range("J1:J" & lRowJ))
ws.Range("J" & lRowJ + 2).Font.Color = RGB(0, 150, 0)
    
ws.Range("K" & lRowK + 2).Value = Application.Sum(Range("K1:K" & lRowK))
ws.Range("K" & lRowK + 2).Font.Color = RGB(255, 0, 0)