我需要以編程方式格式化Excel表格,這個表格基於兩個指定列中的值的更改創建兩個不同的小計(第一個和第二個電子表格)。創建一個帶有數據上面的小計的行,通過VBA中的數組添加一個循環
我設法編寫了第一個小計的例程,但我現在試圖弄清楚代碼的第二部分。
在第二個例程中,我需要在將要添加的數據上方創建小計行。我無法設法將計算插入到正確的行中,並且在通過數組中包含的列進行循環時出現問題。
任何人都可以看到我做錯了什麼?
謝謝
Public Sub SubtotalTable()
Dim RowNumber As Long
Dim RangePointer As Range
Dim RangeTopRow As Range
'Pointing the column to check
Set RangePointer = ActiveSheet.Range("B1")
'Assigning the first row to a range
Set RangeTopRow = Rows(2)
'Assigning to long a variable the number of row from which begin checking
RowNumber = 3
Do
If RangePointer.Offset(RowNumber).Value <> RangePointer.Offset(RowNumber - 1).Value Then
Set RangeTopRow = Rows(RowNumber)
'Call the function to insert the row
Call InsertRowTotalsAbove(RangePointer.Offset(RowNumber), RangeTopRow, RowNumber)
Else
RowNumber = RowNumber + 1
End If
RowNumber = RowNumber + 1
Loop
End Sub
Public Function InsertRowTotalsAbove(RangePointer As Range, lastRow As Range, RowNumber As Long)
Dim ArrayColumns() As Variant
Dim ArrayElement As Variant
Dim newRange As Range
'Assigning number of columns to an array
ArrayColumns = Array("D", "E", "F", "G")
Do
If RangePointer.Offset(RowNumber).Value = RangePointer.Offset(RowNumber - 1).Value Then
RowNumber = RowNumber - 1
Else
ActiveSheet.Cells(RowNumber + 1, 2).Select
Set newRange = Range(ActiveCell, ActiveCell.Offset(0, 0))
Rows(newRange.Offset(RowNumber + 1).Row).Insert shift:=xlDown
newRange.Offset(RowNumber + 1, 0).Value = "Totale" & " " & newRange.Offset(RowNumber + 2, 0)
For Each ArrayElement In ArrayColumns
newRange.Cells(RowNumber, ArrayElement).Value = Application.WorksheetFunction.Sum(Range(lastRow.Cells(-1, ArrayElement).Address & ":" & RangePointer.Cells(0, ArrayElement).Address))
Next ArrayElement
End If
Loop
End Function
你究竟是什麼意思,「有什麼問題」? – arcadeprecinct
不看看你的數據,我問你:格式化好嗎?如果你格式化你的數據,所以你可以使用Excel的表格,它更容易操作,另外還有一個內置的小計行。就這段代碼而言,它會給你一個錯誤嗎?如果是這樣,哪一行? – SandPiper
@arcadeprecinct計算被移動一列。不是從「D」開始,而是從「E」開始,結果也不正確,我不明白是什麼加起來的。 – Davide