VBA excel中的Sum行不起作用

时间:2016-03-21 16:28:30

标签: excel vba excel-vba

我是VBA的新手和编码。 我正在尽我所能创建一个小VBA来帮助我自动对表的行进行求和。 在我的代码中,我加粗了输出。即。在我点击宏之后,总和应该显示,它也应该是粗体。

但是,我不确定我哪里出错了。 :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. 您提供的公式我认为只有在所有行长度相同的情况下才有效,但是,如果它们不是,它会根据找到的第一行将数据减半。我需要能够计算不同长度的行。

  2. 您提供的更新代码无法正常运行。如果你看一下Note Column,就会有很多不同间隙空格的间隙,最新的公式总会产生调试信息,而不是完全计算出来。

  3. 我有没有办法让每个小子表中的所有数字相加,但只减去最后一个数字。例如。如果一个列表中有9个项目,其中第10个是小计,那么是否有代码来汇总9然后减去第10个,得到总体结果为0?

  4. 最后,是否可以突出显示正在生成的所有数据,例如黄色?这有助于我快速录制。

  5. 谢谢大家的帮助!

    非常感谢! :)

    enter image description here

2 个答案:

答案 0 :(得分:1)

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

其次,如果我说得对,你想在每一行的最后一个单元格之后显示每一行的总和。如果是这样,变量j必须从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

答案 1 :(得分:0)

您将行数限制为等于列数,您应该分别计算列数和行数。

例如,(如果您希望它从第2行开始,则在rng中更改1到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

空白之间的总和

之前

Before

After

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