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

Excel 创建VBA以将列表中的信息填充到特定单元格中,excel,vba,Excel,Vba,我有一个电话列表,我需要帮助创建。第1页显示了正在显示的信息。表2给出了数据。 我有三个类别:员工、电话号码和主管 我有大约70名员工(电话号码相同)和大约6名主管 我想做的是,当我在第1页输入主管时,他们的下方有空白单元格,我希望在第2页输入主管的员工在第1页的主管下方的下一个空白单元格中。同样地,在输入员工的电话号码时,也会在员工姓名旁边的相邻手机中输入 在第2页,第1栏是员工,第2栏是电话号码,第3栏是主管 这有可能实现吗?如果是,VBA会是什么样子 感谢您提供的任何帮助和迎接挑战的任何人

我有一个电话列表,我需要帮助创建。第1页显示了正在显示的信息。表2给出了数据。 我有三个类别:员工、电话号码和主管 我有大约70名员工(电话号码相同)和大约6名主管

我想做的是,当我在第1页输入主管时,他们的下方有空白单元格,我希望在第2页输入主管的员工在第1页的主管下方的下一个空白单元格中。同样地,在输入员工的电话号码时,也会在员工姓名旁边的相邻手机中输入

在第2页,第1栏是员工,第2栏是电话号码,第3栏是主管

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


感谢您提供的任何帮助和迎接挑战的任何人。

在回答基本问题“它看起来像什么?”时,您可以手动输入主管的姓名,也可以使用挑选列表。我假设是人工输入。您希望在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
正如我所说,这是非常基本的。如果可以避免的话,大多数人会告诉你不要使用activate和select,但我从来没有想到如何在不激活它的情况下获得工作表的最底层:)for next循环也是一种蛮力。您可以使用find、match或其他方法,但由于要处理的行太少,所以不会花费太长时间


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

这是一种“图片胜过千言万语”的情况。很难了解数据的外观以及您希望它的外观。不过这听起来很可行。事实上,听起来似乎可以通过公式将信息拉入空白单元格,即
=INDEX(MATCH())
。如果你把Supervisor列放在Sheet2的第一位,那么你可以使用
=Vlookup()
(我认为)。是的,这是可能的。如果您在表1上“单击”(键?)的主管在表2的某个地方有他的姓名,以及他的电话和地址,则可以执行此操作。到目前为止你试过什么?
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