2015-01-07 51 views
2

我想建立具有“镜像的细胞”的片材,即我想几个小区,以显示相同的值,该值在所有细胞改变,如果它在任何细胞改变。镜像细胞:故意循环引用

例如:

Cell A1: "Apple" 
Cell A2: "Apple" 
Cell A3: "Apple" 

如果更改A3为 “香蕉” 我要片在细胞中A1,A2和A3显示 “香蕉”。我知道如果我设置A1 = A3和A2 = A3,我可以做到这一点。但是,我想也能够将A1改为“胡萝卜”,并且所有三个单元显示“胡萝卜”。我不知道如何强制excel取三组单元的循环引用,其中的值可以通过寻址任何单元来改变。

P.S. - 我所描述的是,我希望行为如何“出现”给试图更新工作表的人。如果任何人有想写一个可以自动处理这个更新的VBA脚本的想法(即每次单元格值改变时都可以自动调用并在幕后调用),我很乐意写一个并使用它,编程属于这个单元格的单元格在每个循环引用的集合中直接写入脚本。

编辑:我实现了@silentsurfer提供的脚本,它在A1:A3中的值很简单的情况下运行良好。然后我实现了@pnuts建议的命名范围功能。

在我的工作表中,我选择了三个单元格(C3,C5,C7)并将它们设置为命名范围(“config3P”)。我只是想@ silentsurfer的脚本来监视这三种细胞,而不是A1:A3,所以这是改变的代码:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim c3P As Range 
Dim xlCell As Range 

Set c3P = Range("config3P") 
Application.EnableEvents = False 

If Not Intersect(Target, c3P) Is Nothing Then 
    For Each xlCell In c3P 
     xlCell.Value = Target.Value 
    Next xlCell 
End If 

Application.EnableEvents = True 

End Sub 
+0

只是对用例感到好奇。 – pnuts

+0

我会用它来确保相关项目组(这里是电气变压器)在多个参数上保持一致的标签。 – smcollins

+0

听起来有一个命名范围的可能情况。 – pnuts

回答

2

尝试粘贴这在VBA编辑器中的工作表的代码页:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim chngRange As Range 
    Dim xlCell As Range 

    Set chngRange = Range("A1:A3") 
    Application.EnableEvents = False 

    If Not Intersect(Target, chngRange) Is Nothing Then 
     For Each xlCell In chngRange 
      xlCell.Value = Target.Value 
     Next xlCell 
    End If 

    Application.EnableEvents = True 

End Sub 
+3

谢谢@silentsurfer!这完美地工作 - 我现在要试着为我的需求稍微调整一下。 我已经潜伏了一段时间,但这是我第一次问一个问题 - 我很激动,每个人都有多大的帮助。现在我已经有了一个帐户,我会尝试回答一些问题并付款! – smcollins

+0

很好的答案。仅供参考,您可以将“For/Next”细化为一行,我相信:'chngRange.Value = Target.Value'。 –

+0

@DougGlancy你大多是正确的。但是,在某些边界情况下,您可能会得到意想不到的结果当在目标范围内选择多个单元格时按Delete键 – silentsurfer