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

Excel 在列中最后使用的单元格和列之间有空白单元格之后,如何在2个单元格进行求和?,excel,vba,ms-office,spreadsheet,Excel,Vba,Ms Office,Spreadsheet,如图所示,我有两列J和K要在上次使用的单元格之后的两个单元格进行求和,问题是有时会出现随机排列的空单元格,因为求和会在这两个单元格之间停止 此外,J列的和单元格应具有绿色文本,K列的和单元格应具有红色文本。请把这个加入你的代码,我不知道怎么做 我是vba的初学者,这只是我的第五天 这是我到现在为止一直在尝试的 起初,我认为求和很容易,只需在列中找到最后使用的单元格,然后应用求和公式。所以我尝试了下面的代码 Dim LastRow As Long LastRow = Range("

如图所示,我有两列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
Sub-SumData()
暗淡的苏蒙一样长
最后一排一样长
LastRow=范围(“F2”)。结束(xlDown)。行
sumOne=0
暗MyRng As范围
设置MyRng=ActiveSheet.UsedRange.Columns(“F”)
暗淡的蜂窝As范围
总数:
对于MyRng.Cells中的每个cellRng
如果cellRng.Value为“”,则
sumOne=sumOne+cellRng.值
单元格(LastRow+2,“F”)。值=sumOne
后藤森
如果结束
范围(“A2”)。选择
下一个
端接头
在上面的代码中,我尝试使用F列中的数据进行练习,所以F列不是问题。。。 我认为会有更简单更好的方法

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

试试看,这是否是您想要的

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
下面是另一个使用特定图纸名称的示例,不使用带的
,并使用颜色的
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)

“在上次使用的单元格之后的两个单元格进行求和”
不确定您在此处的确切含义。请提供您尝试说明所面临问题的代码。在发布问题之前,你需要证明你做了研究。此外,请不要说像Plz帮助我或Plz友善之类的话。每个人都在这里帮助和被帮助。@Simon我想说的是,假设我的工作表在J列中有10个单元格,那么我想把这10个单元格相加,然后把答案放在同一列的第12个单元格中。需要注意的是,在J列的中间可能有空单元格。如果你想看得更清楚,请参考图片。@超对称性好的,我提供了我曾经做过的代码,我真的很抱歉,我理解你的观点。所提到的其中一列(J和或K)的总和,或者来自不同的列?哦,我知道了,我用于每个循环,而不是我应该用于。。。你太棒了。。。谢谢你的帮助@Simon@ReadersvbGreen太亮,所以我将.Font.Color=vbGreen更改为.Font.ColorIndex=10。。。如果你也不喜欢使用vbGreen作为字体,那么你也可以使用vbGreen来获得深绿色……当然,使用
并不是必需的,它只是帮助代码更整洁。看一看。它是几乎所有VBA功能的微软官方文档。我发现它在刚开始的时候非常有用,有时仍然有用。是的,它只是我使用的默认绿色。您也可以使用RGB
.Font.Color=RGB(0,150,0)
是的,您是对的,使用RGB我们可以使用多种自定义颜色。。。谢谢你帮助我理解with的用法,我访问了你建议的网站,了解了一些新的东西。