如何根据另一个单元格值自动插入行值

如何根据另一个单元格值自动插入行值

首先,请看一下这个 Excel 工作表: 在此处输入图片描述

月份表包含全年数据。如果我通过键入或从下拉菜单中选择(例如“选定”)从表中选择任何月份,则只有那些行会出现在某些行之后。例如,我希望选定的行会出现在第 14 行之后(即,行不会出现在第 15 行之前)。如何实现?

供您参考,所选行数可能会有所不同。例如,在上表中选择了两行(四月和九月)。但可能选择了三月、四月和九月。所以我无法指定所选行将出现的单元格范围。此外,第 17 行上会有一些文本。因此,所选行必须在第 14 行之后动态插入。

知道如何实现这个吗?

答案1

我可能会使用数据透视表。月份将放在列中,而 B、C 和 D 将放在值中(这基本上会使表格看起来与您的表格大致相同)。然后需要将选择参数放入过滤器中以仅显示您想要的内容。

不好的地方是,当您想显示每个团队的变化时,您需要刷新数据透视表(RMB 并刷新或通过分析;或者您可以使用宏定期为您执行此操作)。

答案2

步骤 1 - 列表

首先,您可以使用下拉列表添加“选定”部分。选定
E1,转到数据选项卡并选择数据验证。 选择列表和写选定作为来源
现在E1向下拖动E12以获取所有单元格的列表。

第 2 步 - 代码

添加行
要跟踪这些单元格,更改Worksheet_ChangeSub 非常有用。右键单击“Sheet1”(或同等学历)并选择显示代码

要跟踪和复制选定的行,我们可以执行以下操作:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, r As Integer
On Error GoTo EndM
If Target.Value = "Selected" And Target.Column = 5 And Target.Row < 13 Then
    For r = 15 To 30
        If Cells(r, 1).Value = "" Then
            Range("A" & r & ":D" & r).Cells.Value = Range("A" & Target.Row & ":D" & Target.Row).Cells.Value
            i = 1
        End If
        If i > 0 Then GoTo EndM
    Next r
End If
EndM:
End Sub

这将查找工作表中的更改。如果将任何单元格从E1更改为“选择”,则它将同一行的列复制到从第 15 行开始的第一个空行中E12AD
笔记
这不会阻止您两次选择相同的条目,即获取两行一月的数据。它还设置为第 30 行的限制。第 30 行之后不会添加更多条目可以通过更改30中的值进行更改For r = 15 To 30

删除行
当我们删除“选定”值时,我们可以使用基本相同的方法再次删除行,方法是添加

If Target.Column = 5 And Target.Row < 13 And Target.Value = "" Then
    For r = 15 To 30
        If Cells(r, 1).Value = Cells(Target.Row, 1) Then
            Range("A" & r & ":D" & r).Cells.Delete
        End If
    Next r
End If

在前面的例子中End If,和之间。EndM:

需要错误处理程序来确保工作表不会在您每次尝试一次删除多个单元格时向您抛出错误。
笔记
如果您一次删除多个单元格,则此功能将不会运行,并且如果同一个月份连续出现两次,则不会删除每一行。

当然,您可以添加或更改功能,例如通过添加来限制添加多个条目:

            ElseIf Cells(r, 1).Value = Cells(.Row, 1).Value Then
            MsgBox ("Multiple entries are not allowed!")
            GoTo EndM

i = 1和之间的End If添加部分。
祝你好运!

相关内容