如何根据另一列的下拉列表选择自动填充excel列

时间:2017-07-10 19:08:29

标签: excel

Excel table image

我有一个包含两个按钮的电子表格 - 使用宏从sql表中检索行,另一个用于从excel更新数据更改回表。我还附上了一张图片供参考。表列是EmpID,EName,Grouping,CCNum,CCName,ResTypeNum,ResName和Status。 现在要更新更改,我有下拉CCName和ResName的列表。我希望只要下拉列表中的ResName列中的值发生更改,ResTypeNum就会自动更改。使用Vlookup似乎不起作用,因为每次单击“检索”按钮刷新数据时公式都会被删除。此外,我必须拖下我不想要的公式,而是每当ResName列更改时,ResTypeNum中的值应自动更新。我很感激任何新的想法,使这项工作。

谢谢你, HEMA

1 个答案:

答案 0 :(得分:0)

假设:

  • 第一个值是A4
  • ResName列是G
  • 包含数据验证列表的工作表和工作表中的相应代码" ResNameSheet"

在表格事件模块中,您可以输入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 7 And Target.Row > 3 Then

    If Target.Value2 = "" Then
        Target.Offset(0, -1).Value2 = ""
        Exit Sub
    End If

    Dim rngDataValidation As Range
    Dim rngRow As Range
    Set rngDataValidation = ThisWorkbook.Sheets("ResNameSheet").UsedRange

    For Each rngRow In rngDataValidation.Rows

        If rngRow.Cells(1, 1).Value2 = Target.Value2 Then
            Target.Offset(0, -1).Value2 = rngRow.Cells(1, 2).Value2
        End If

    Next

End If

End Sub

解释代码的工作原理:

  • 触发对工作表的更改
  • 检查更改是否在列G(7)中,并且它是否出现在标题行(3)
  • 下面
  • 检查更改是否未从列G中删除,如果是,则清除相应列F上的所有值
  • 循环使用ResName列表
  • 的Rows集合
  • 检查值是否匹配
  • 如果是,则将相应的代码写入Target
  • 左侧的列

希望这有帮助。