Excel:具有重复函数的不同单元格

我试图find这个问题的答案,但我不知道如何甚至说它。

假设我有三个单元格A1,A2和A3:

  • A1有一个包含在X,Y,Z中的数据validation列表。
  • A3根据选定的字母编写脚本来产生VLOOKUP结果。

我想A2来镜像,并提供一个相同的functionA1,但我也希望两者相互依赖。 为了清楚起见,如果我在A1上select“X”,A2也会显示“X”。 如果我在A2上将“X”更改为“Y”,则A1将变为“Y”。 无论哪种方式,我希望A3显示适当的结果,无论函数是否在A1或A2上更改。

这是可以实现的吗? 或者我只是搞循环引用?

可以不使用VBA或循环引用来连接两个单元,但需要使用表单控件。 现在请参考这个例子。

在这里输入图像说明

combobox

Comoboxes可以用作下拉框(就像数据validation一样),但需要两件事情:1)包含列表的input范围和2)链接单元格。 链接的单元格返回一个整数,它等于input范围中所选值的位置。 在combobox中selectX1,链接的单元格变为1,selectY1,变成2等。

要制作combobox,请转到function区中的“开发人员”,然后select“插入”>“combobox”(窗体控件)。 将两个方框放在单元格A1和B1上,或者您想要列表的位置。 右键单击每个combobox,然后select“格式控制…”。 select你的链接单元格(你可以把它放在combobox下方,很容易隐藏它),并用你的{X,Y,Z}作一个input范围。 使每个combobox完全相同。

现在这里是重要的部分: 链接的单元格和它们的combobox是一条双向的街道。 在你的combobox中selectY1,链接的单元格变成2; 将链接的单元格更改为3,combobox变为Z1。 因此,当第一个combobox更改链接的单元格时,链接的单元格将更改第二个combobox。 没有循环参考,没有VBA。

相同combobox的公式

在单元格C1中input公式

 =VLOOKUP(INDEX($G$2:$G$4,$E$1),$J$2:$K$4,2,0) 

这是您的标准VLOOKUP,但由于您的链接单元格返回一个整数,我们必须将其转换回查找值。

 INDEX($G$2:$G$4,$E$1) 

INDEX使用您用于combobox的相同列表,$ E $ E1是您select的列表中的位置。 因此,它输出您在combobox中select的内容。

瞧! 你完成了。

但是,如果我想连接列表与单独的值呢?

请参考这个例子:

在这里输入图像说明

在这个例子中,两个连接的combobox(相同的链接单元)具有两个单独的列表:{X1,Y1,Z1}和{X2,Y2,Z2}。 要做到这一点,只需让每个combobox引用一个不同的input范围。 第一个盒子引用$ G2 $ G4和第二个$ H2 $ H4。 再一次,当你改变一个combobox,另一个将改变:selectX1和第二个combobox变成X2等。

不同combobox的公式

由于链接的单元格对于两个combobox都是相同的,因此您的公式无法确定应该引用哪个列表。 您可以使用{1,2}的简单数据validation(或combobox!)列表,其中1代表第一个combobox,第二个combobox代表第二个combobox。 在这个例子中它的单元$ A $ 4。 那么你可以使用公式:

 =VLOOKUP(IF($A$4=1,INDEX($G$2:$G$4,$E$1),INDEX($H$2:$H$4,$E$1)),$J$2:$K$7,2,0) 

这与我们用于相同combobox的公式相同,但是这次我们要根据单元格$ A $ 4中select哪个combobox来select哪个列表来获取我们的查找值。 如果你想让你的VLOOKUP具有不同的表格数组,简单的两个VLOOKUP公式:

 =IF($A$4=1, VLOOKUP(INDEX($G$2:$G$4,$E$1),MyRange1,2,0),VLOOKUP(INDEX($H$2:$H$4,$E$1),MyRange2,2,0) 

就足够了。

您也可以使用列表框或ActiveXcombobox代替窗体控件combobox。 前者会给你一个实际的列表,但它占用的空间,你不会得到类似的效果数据validation下拉框。 对于我们在这里要做的事情来说,ActiveX控件简直太复杂了。

我注意到太迟了,我在示例中使用了不同的范围,只是简单地移动combobox,然后将公式更改为任意位置。

要使2个单元格始终显示相同的值,而不pipeinput什么内容,则需要VBA。 就像是:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target.Parent.Range("A1"), Target) Is Nothing Then If Target.Parent.Range("A1").Value <> Target.Parent.Range("A2").Value Then Target.Parent.Range("A2").Value = Target.Parent.Range("A1").Value End If ElseIf Not Intersect(Target.Parent.Range("A2"), Target) Is Nothing Then If Target.Parent.Range("A1").Value <> Target.Parent.Range("A2").Value Then Target.Parent.Range("A1").Value = Target.Parent.Range("A2").Value End If End If End Sub 

在你的工作表代码部分。

只用公式,这是不可能的。 另外请记住,你需要两个单元格相同的数据validation,否则你可能会遇到麻烦。

对于A3只是select一个单元格为您的公式(因为两个显示相同的值,哪一个并不重要)。