更改单元格后,Excel复制值与对应于键的VBA

标签 excel vba

几天以来,我一直在尝试以下操作,但由于我缺乏 VBA 技能,因此无法正常工作。

场景:

  • 用户:从下拉列表中选择一个值(单元格只允许一个列表
    在另一张纸中定义)。
  • 代码:将左侧的值复制到相应的列表值。 (这是名单。)
  • 代码:将值粘贴到第一张表的特定字段中。

  • 示例:
    用户从第一张表 A1 的下拉列表中选择值“Team One”。此列表在表 2 中定义。在第二张列表的每个项目旁边是一个单元格,其中包含逗号分隔的名称列表。
    用户从下拉列表中选择了一个团队后,相应的名称列表将复制到表一的字段 B1 中。

    这个过程应该只在 A1 时触发。被改变。

    希望我能说清楚。如果我最终自己找到解决方案,我会在这里发布。

    谢谢您阅读此篇。

    最佳答案

    您可以在没有 VBA 的情况下执行此操作。在您想要粘贴名称列表的字段中输入以下公式:

    =IF(ISBLANK(<address of dropdown on Sheet1>),"",INDEX(<address of list to left of values on Sheet2>,MATCH(<address of dropdown on Sheet1>,<address of dropdown values on Sheet2>,0)))
    

    当从下拉列表中未选择任何内容时,这将是空白的,并且在选择值时将显示适当的名称列表。

    例如,如果下拉列表在 Sheet1 的 B1 中,下拉值在 Sheet2 的 B1:B9 中,并且相应的名称列表在 Sheet2 的 A1:A9 中,您可以使用以下公式:
    =IF(ISBLANK(Sheet1!B1),"",INDEX(Sheet2!A1:A9,MATCH(Sheet1!B1,Sheet2!B1:B9,0)))
    

    编辑(每条评论):
    要在 VBA 中使用它,您需要执行类似于 @chris neilsen 建议的操作。在工作表模块中,您需要为更改事件创建一个子:
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1")) Is Nothing Then
        Range("A1").Formula = "=INDEX(Sheet2!A1:A9,MATCH(Sheet1!B1,Sheet2!B1:B9,0))"
        If IsError(Range("A1").Value) Then
            Range("A1") = ""
        Else
            Range("A1").Value = Range("A1")
        End If
    End If
    End Sub
    

    为了消除任何混淆,A1 是显示输出的单元格。

    关于更改单元格后,Excel复制值与对应于键的VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646598/

    相关文章:

    excel - 导出到 Excel 无法正确显示数字

    excel - 由 VBA 关闭的工作簿未关闭引用,IsAddin 工作簿

    vba - 用户窗体中的全局变量

    excel - 退出/重新启动控制 excel 的 word 宏

    .net - 有哪些基于 Open XML SDK 构建的框架?

    excel - 为什么 'AND' 在这里不工作,而 'OR' 在这里工作?

    excel - 如何获取复杂数组的重新计算副本

    python - 匹配列名不同的2个Excel工作表的数据

    excel - VBA Excel 筛选数据并复制到另一个工作表 - 新手警报

    excel - VBA-查找命名范围中第一个单元格的位置以引用电子表格的标题行