如何在Excel 2010中使用“触发器”将值转换为输入的行名和列名?

时间:2017-07-18 13:09:02

标签: excel vba excel-vba excel-2010

我正在尝试使用某种触发器来允许此工作表的用户获取输出值(通过我创建的算法)并将其转录到另一张工作表中。

它应该转录值的单元格将通过从用户获取行名称和列名来确定。

在此示例中,用户将分别插入X和Y作为其行名和列名。一旦他们点击了触发按钮(不一定是一个按钮,我愿意使用任何类型的触发器,但我认为必须有一个才能使其工作),“Value(Rounded)”中的值标记的细胞将转录到相应的细胞:

此单元格是我要插入值的位置。

这个目标是自动化。理想情况下,用户只需要输入行名称和列名称,然后按下按钮(或任何其他触发器),这将把值转录到另一个工作表中。

3 个答案:

答案 0 :(得分:1)

这必须是VBA吗?这可以通过一个非常简单的公式来完成。

假设:

  • 输入表名为Input(将对输入的所有引用更改为该表的实际名称)
  • 行名称在单元格B1中(将输入!$ B $ 1更改为实际的行名称输入单元格)
  • 列名称位于单元格B2中(将输入!$ B $ 2更改为实际列名称输入单元格)
  • Value(Rounded)单元格在B4中(将输入!$ B $ 4更改为实际值(Rounded)单元格)

在我们的Output工作表的单元格B2中,输入此公式,然后上下复制:

=IF(AND(Input!$B$1=$A2,Input!$B$2=B$1),Input!$B$4,"")

答案 1 :(得分:0)

您需要在SHEET代码中使用事件宏(而不是模块代码)。以下是两个示例,说明如何在特定单元格上更改单元格或是否发生双击:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Not Intersect(Target, Range("E3")) Is Nothing Then
    'Do something of Range("E3") has been double clicked
    '(Basic Example) 
    'Range("G3").Value = "Range("B3").value

    End If


    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    'If a cell has chanced...

    If Not Intersect(Target, Range("B3")) Is Nothing Then
    'Do something
    End If

    End Sub

答案 2 :(得分:0)

添加按钮可以通过创建形状(矩形或任何其他形状)来完成,右键单击它并选择"分配宏"。在那里,您可以选择在单击该形状后应执行的宏。但需要注意的是,宏需要是一个公共子"。