创建VBA以将列表中的信息填充到特定单元格中

时间:2017-05-17 16:56:25

标签: excel-vba vba excel

我有一个手机列表,我需要帮助创建。表1显示了信息。表2包含数据。 我有3个类别,员工,电话号码和主管 我有大约70名员工(与电话号码相同)和约6名主管

我想要做的是当我在第1页上键入主管时,他们下面有空白单元格,我希望在第2页上将该主管键入的主管放在主管下面1在下一个空白单元格中。同样,电话号码被键入,员工被锁定在员工姓名旁边的相邻单元格中

在表2中,第1列是员工第2列是电话号码,第3列是主管

这有可能实现吗?如果是这样,VBA会是什么样子?

感谢您提供任何帮助以及任何加紧挑战的人。

1 个答案:

答案 0 :(得分:0)

在回答基本问题时,“它会是什么样子?”您可以手动输入主管名称,也可以使用选择列表。我假设手动输入。您想在sheet1上进行更改事件,如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("A1")) Is Nothing Then
    If Range("rngSupervisor") <> "" Then
        List_the_Subordinates
    Else
        Target.Worksheet.Range("A1").Select
    End If
End If
End Sub

当您在A1中输入主管的姓名并按Enter(或离开单元格)时,将触发更改事件。这将检查是否在单元格A1中输入了数据,如果是,则运行子程序“List_the_Subordinates”。

现在,列出下属的子程序可以是下一个循环,查找超级名称并复制下属的信息。像这样(非常基本)。

Sub List_the_Subordinates()
Dim sh1Bottom As Long, sh2Bottom As Long, rowCount As Long
Sheet2.Activate
'get bottom row of sheet 2
sh2Bottom = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

Sheet1.Activate
sh1Bottom = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1
For rowCount = 1 To sh2Bottom
    If Sheet2.Cells(rowCount, 3) = Sheet1.Cells("A1") Then
        sh1Bottom = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Sheet1.Cells(sh1Bottom, 1) = Sheet2.Cells(rowCount, 1)
        Sheet1.Cells(sh1Bottom, 2) = Sheet2.Cells(rowCount, 2)
    End If
Next rowCount
End Sub

正如我所说,这是非常基本的。大多数人会告诉你不要使用激活并选择是否可以避免它,但是我从来没有弄清楚如何在不激活它的情况下获得工作表的底行:)下一个循环也是一种蛮力。您可以使用查找或匹配或其他任何方式,但由于您只需要很少的行来处理,这不会花费很长时间。

这是一个开始的地方。玩它,让它为你唱歌和跳舞。