我是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,
答案 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
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