使用Excel VBA进行动态表引用

时间:2015-08-18 12:14:14

标签: excel vba excel-vba

我有一个名为“groups”的Excel表,其中标题是组名。在下面的列中,组名称是该特定组的成员。

在另一个表中,我在第一列中有所有成员名,第一行中有组名。我想检查每个成员名称是否在上面的组中。

为了检查Tim是否属于“伙伴”组,我可以使用以下公式:

=if( countif( groups[guys];"Tim")>0;"yes";"no")

但我有一个命令按钮“添加组”,它打开一个用户表单,我可以在其中输入一个新的组+成员。新组的名称输入到textbox1中。组和成员将添加到组表中。

我希望第二张表也能更新。我想做的是这样的事情:

With Worksheets("Overview").ListObjects("PersonIsInGroupTab")
    .ListColumns.Add Position:=3
    .HeaderRowRange(3).Value = TextBox1.Value
    .DataBodyRange(1, 3).formula= "=if( countif( groups[textbox1.value];""Tim"")>0;""yes"",""no"")" 
End With

不幸的是,这不起作用。

textbox1.value是新组的名称(也已添加到“组”选项卡中)。

我有办法让这项工作成功吗?

编辑: 我尝试了另一种方法,但也没有用,但可能有助于回答这个问题。 在检查某个人是否是某个组成员的表中,我默认启动一个组。并手动输入公式

=if(countif(groups[guys],"Tim")>0,"yes","no")

进入单元格(在我的情况下是J4)。当我使用userform添加组“gals”时,我在表格中得到第二列“gals”。当我手动将公式从[guys]单元格拖动到[gals]单元格(K4)时,它就像我想要的那样工作。我得到了公式

=if(countif(groups[gals],"Tim)>0,"yes","no")
gals细胞中的

(K4) 所以我想我可以在VBA中自动填充作为“添加组”例程的一部分。这是我使用的代码:

Range("groups[guys]").Select
Selection.AutoFill Destination:=Range("J4:K4"), Type:=xlFillDefault

我通过将自动填充录制为宏来获取此代码。但是当我运行它时,K4中的公式与J4中的公式一样,组[伙伴]而不是组[gals]。 我不能做Destination:= Range(“groups [[guys]:[gals]]”)因为我希望它可以使用任何组名而不仅仅是gals。

1 个答案:

答案 0 :(得分:0)

我能够通过编写VBA函数而不是使用countif来解决问题。 功能是:

rid

我这样使用它:

Function IsInGroup(group, member As String) As Boolean
For Each Item In group
    If Item = member Then
        IsInGroup = True
        Exit Function
    End If
Next Item
IsInGroup = False
End Function
相关问题