我有7列代表7种不同的(让我们称之为)输入源。
每列的第1行都有每个来源的名称。
每列的第2行是第4列中所有行的总和。例如:A2 = SUM(A4:A1048576)
由于我习惯于对每一列进行随机输入,我希望每列的第3行是标准用户输入字段,以便每列第3行输入的任何值都附加到该列的第一个空单元格中,由某些事件触发(按键,按钮,sheetupdate?)。也就是说,“A3”中列“A”的第一个条目将被置于“A4”中,“A3”的第二个条目应被置于“A5”中,依此类推。每列独立地相同。另外,如果可能的话,我希望最后清除第3行中的单元格。
我该怎么做? 请回答完整的教程解释或重要的教程解释,因为我对EXCEL和VBA的经验几乎没有。
答案 0 :(得分:0)
对于其他找到此答案的人,请了解每列都独立于其他列,因此如果行数因列而异,则无关紧要。
将以下代码粘贴到您计划使用的工作表中。这将仅监视第3行中的更改(但所有列 - 您可以更改为仅监视要监视的七列)。
当在第3行中检测到更改时,确定该列,然后找到该列的最后使用的ROW。输入的值将移至第一个可用行,第3行中输入的值将被删除,第2行中的SUM将更新以反映新的和范围。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ColName As String
Dim lLastRow As Long ' Saves Last Row for any column
Dim lColumn As Long
' This will monitor changes made in row 3 only.
' - move entered value to end of column
' - erase row 3 value entered
' - change 'SUM' in row 2 to reflect new row
On Error GoTo Enable_Events ' Need this! If error, need to enable events!!
If Target.Row <> 3 Then Exit Sub ' Only track row 3 changes
Application.EnableEvents = False ' Turn off event tracking because we make changes
lColumn = Target.column ' Get column that's being used.
With ActiveSheet 'Find the last used row in a Column
lLastRow = .Cells(.Rows.Count, Target.column).End(xlUp).Row
End With
Cells(lLastRow + 1, Target.column).value = Target.value ' Move value to end
Target.value = "" ' Clear value entered
' Get Column name (A, B, C...) then create new SUM
ColName = Left(Cells(1, lColumn).Address(False, False), 1 - (lColumn > 26))
Cells(2, lColumn).Formula = "=SUM(" & ColName & "4:" & ColName & lLastRow + 1 & ")"
Enable_Events:
Application.EnableEvents = True
End Sub