月份表包含全年数据。如果我通过键入或从下拉菜单中选择(例如“已选择”)从表格中选择任何月份,那么在某些行之后只会出现那些行。例如,我希望所选择的行将出现在第14行及之后(即行将不会出现在第15行之前)。怎么做到这一点?
对于您的类型信息,所选行数可能会有所不同。例如,在上表中选择了两行(4月和9月)。但它可能是3月,4月和9月入选。因此,我无法指定将出现所选行的单元格范围。此外,第17行将有一些文本。因此,必须在第14行之后动态插入所选行。
知道怎么做到这一点?
月份表包含全年数据。如果我通过键入或从下拉菜单中选择(例如“已选择”)从表格中选择任何月份,那么在某些行之后只会出现那些行。例如,我希望所选择的行将出现在第14行及之后(即行将不会出现在第15行之前)。怎么做到这一点?
对于您的类型信息,所选行数可能会有所不同。例如,在上表中选择了两行(4月和9月)。但它可能是3月,4月和9月入选。因此,我无法指定将出现所选行的单元格范围。此外,第17行将有一些文本。因此,必须在第14行之后动态插入所选行。
知道怎么做到这一点?
Answers:
第1步 - 列表
首先,您可以使用下拉列表添加“已选择”部分。
同 E1
选中,转到 数据 选项卡并选择 数据验证 。选择 名单 和写 选 如 资源 。
现在拖 E1
向下 E12
获取所有单元格的列表。
第2步 - 守则
添加行
跟踪这些细胞的变化 Worksheet_Change
子工作很棒。
右键单击“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
至 E12
被更改为“选择”,然后它复制列 A
至 D
同一行的行,从第15行开始的第一个空行。
注意
这并不能阻止你两次选择相同的条目,即获得两行1月。它也设置为第30行的限制。在第30行之后它不会添加更多条目可以通过更改值来更改 30
在 For r = 15 To 30
删除行
当我们通过添加删除“Selected”值时,我们可以使用基本相同的方法再次删除行
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
在添加部分。
祝好运!