总结在VBA excel行不起作用

我是VBA和一般编码的新手。 我正在尽我所能创build一个小的VBA,以帮助我自动总结表的行。 在我的代码中,我用粗体显示了输出。 即。 我点击macros后,总和应该显示,它也应该是粗体。

但是,我不知道我错在哪里。 o当我跑步的时候,什么也看不见。 我曾试图自己解决,但它认为是错误的

.Cells(j, 1stCol + 1) 

两条线。 我不确定是否有其他故障,因为我不能自己排除故障。

有人可以帮忙吗? 另外,有没有人有任何好的书来读更多的VBA? 互联网让我很困惑,我很多时候都在努力学习。

感谢大家的帮助!

这是我的代码。

 Option Explicit Sub addHorizontalSums() Dim lstCol As Integer With Excel.ThisWorkbook.Sheets("Sheet1") lstCol = .Cells(1, .Columns.Count).End(Excel.xlToLeft).Column Dim j As Integer For j = 1 To .Cells(1, .Columns.Count).End(Excel.xlToLeft).Column .Cells(j, 1stCol + 1) = "=SUM(RC[-" & lstCol - 1 & "]:RC[-1])" .Cells(j, 1stCol + 1).Font.Bold = True Next j End With End Sub 

这是一个更新… Davesexcel,

  1. 你给的公式我认为只有在所有行长度相同的情况下才有效,但是,如果它们不是,则会根据find的第一行将数据减半。 我需要能够计算不同长度的行。

  2. 您提供的更新的代码不太好。 如果你看注释栏,就会发现不同的间隙空间有许多间隙,最新的公式总是会产生debugging信息,而没有完全计算。

  3. 有没有办法让我在每个小子表中总结所有的数字,但只减去最后一个数字。 例如。 如果列表中有9个项目,其中第10个是小计,那么是否有代码对9进行求和,然后减去第10个,从而给出总体结果0?

  4. 最后,是否可以突出显示所有正在播放的数据,例如黄色? 这将帮助我快速logging下来。

谢谢你们的帮助!

非常感谢! 🙂

在这里输入图像说明

首先,您可能打算在For循环中写入lstCol而不是1stCol。

其次,如果我找对了你想要显示每行最后一个单元格之后的每一行的总和。 如果是这样,variablesj必须从1到您的工作表上使用的行数,而不是列数。 下面的代码应该完成这个任务。

 Sub addHorizontalSums() Dim j As Integer Dim lstCol As Integer With Excel.ThisWorkbook.Sheets("Sheet1") lstCol = .Cells(1, .Columns.Count).End(Excel.xlToLeft).Column For j = 1 To .Cells(1, 1).End(xlDown).Row .Cells(j, lstCol + 1) = "=SUM(RC[-" & lstCol - 1 & "]:RC[-1])" .Cells(j, lstCol + 1).Font.Bold = True Next j End With End Sub 

作为一个说法,如果每行中的条目数不同,您可能需要使用其他方法来确定lstCol。 你可以例如使用下面的代码,我认为它应该更强大:

 Sub addHorizontalSums() Dim j As Integer With Excel.ThisWorkbook.Sheets("Sheet1") For j = 1 To .Cells(1, 1).End(xlDown).Row .Rows(j).End(xlToRight).Offset(0, 1).Value = Application.WorksheetFunction.Sum(Rows(j)) .Rows(j).End(xlToRight).Font.Bold = True Next j End With End Sub 

您将行数限制为与列数相等,您应该分别对列和行进行计数。

例如,(在rng更改1到2,如果您希望它在第2行开始)

 Sub Button2_Click() Dim LstCol As Long, LstRw As Long, Rng As Range, Sh As Worksheet Set Sh = Sheets("Sheet1") With Sh LstCol = .Cells(1, .Columns.Count).End(xlToLeft).Column LstRw = .Cells(.Rows.Count, LstCol).End(xlUp).Row Set Rng = .Range(.Cells(1, LstCol + 1), .Cells(LstRw, LstCol + 1)) End With With Rng .Formula = "=SUM(RC[-" & LstCol & "]:RC[-1])" .Font.Bold = 1 .Value = .Value 'use if you only want to show values, not formula End With End Sub 

总结空白

之前

之前

后

 Sub SumBetweenBlanks() Dim RangeArea As Range, x As Long x = Cells(1, Columns.Count).End(xlToLeft).Column For x = 1 To x For Each RangeArea In Columns(x).SpecialCells(xlCellTypeConstants, 1).Areas With RangeArea.Offset.End(xlDown).Offset(1) .Value = Application.Sum(RangeArea) .Font.Bold = 1 End With Next RangeArea Next x End Sub