Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zellen bidirektional verknüpfen

227 views
Skip to first unread message

Mark Ise

unread,
Aug 25, 2009, 3:04:43 PM8/25/09
to
Hallo,

kann man mit Excel 2000 Zellen bidirektional miteinander verkn�pfen?

Beispiel:

Angenommen ich h�tte Zellen A1 und A2 bidirektional miteinander
verkn�pft, dann sollten sich alle �nderungen an Zelle A1 gleichfalls auf
A2 auswirken und umgekehrt.

--
Mark

Eberhard Funke

unread,
Aug 25, 2009, 3:57:47 PM8/25/09
to
Am Tue, 25 Aug 2009 21:04:43 +0200 schrieb Mark Ise:
>
> Angenommen ich h�tte Zellen A1 und A2 bidirektional miteinander
> verkn�pft, dann sollten sich alle �nderungen an Zelle A1 gleichfalls auf
> A2 auswirken und umgekehrt.

Hallo Mark,

kopiere das Makro in das Modul des Tabellenblattes:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target = [A1] Then
[A2] = [A1]
Else
[A1] = [A2] 's. Anmerkung
End If
Application.EnableEvents = True
End Sub

Anmerkung: Dieser Schritt wird bei �nderungen in *allen* Zellen ausser A1
ausgel�st. Wird A2 ge�ndert, so wird der neue Wert nach A1 geschrieben;
wird z. B. B4 ge�ndert, dann wird lediglich der (mit A1 identische Wert von
A2) erneut nach A1 geschrieben.

--
Mit freundlichen Gr�ssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de

Thomas Ramel

unread,
Aug 25, 2009, 4:17:02 PM8/25/09
to
Gr�ezi Eberhard

Eberhard Funke schrieb am 25.08.2009

> Am Tue, 25 Aug 2009 21:04:43 +0200 schrieb Mark Ise:
>>
>> Angenommen ich h�tte Zellen A1 und A2 bidirektional miteinander
>> verkn�pft, dann sollten sich alle �nderungen an Zelle A1 gleichfalls auf
>> A2 auswirken und umgekehrt.
>
> Hallo Mark,
>
> kopiere das Makro in das Modul des Tabellenblattes:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> Application.EnableEvents = False
> If Target = [A1] Then
> [A2] = [A1]
> Else
> [A1] = [A2] 's. Anmerkung
> End If
> Application.EnableEvents = True
> End Sub
>
> Anmerkung: Dieser Schritt wird bei �nderungen in *allen* Zellen ausser A1
> ausgel�st. Wird A2 ge�ndert, so wird der neue Wert nach A1 geschrieben;
> wird z. B. B4 ge�ndert, dann wird lediglich der (mit A1 identische Wert von
> A2) erneut nach A1 geschrieben.

Hmmm, und warum merzt du dieses Manko nicht gleich noch aus?
Ich k�nnte mir das wie folgt vorstellen:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
Application.EnableEvents = False
Select Case Target.Address(0, 0)
Case "A1"
Range("A2").Value = Target.Value
Case "A2"
Range("A1").Value = Target.Value
End Select


End If
Application.EnableEvents = True
End Sub


BTW:
Warum verwendest Du die Evaluate-Methode ( [A1] ) um die Zellen
auszuwerten?
Damit fragst Du ab ob 'Target' den Wert aus 'A1' enth�lt und nicht ob A1
ver�ndert wurde.


Mit freundlichen Gr�ssen
Thomas Ramel

--
- MVP f�r Microsoft-Excel -
[Vista Ultimate SP-1 / xl2007 SP-1]

Wolfgang Habernoll

unread,
Aug 25, 2009, 5:20:03 PM8/25/09
to
Hallo Mark

"Mark Ise" <mark...@arcor.de> schrieb im Newsbeitrag
news:h71ckb$gd4$1...@news.eternal-september.org...

Versuche es mal damit, ist nicht auf XL2000 getestet, aber da sollte es auch laufen.
Der Code bearbeitet 3 "bidirektional Zellen" das kannst du bei Bedarf beliebig
erweitern. Der Code geh�rt im VBE ins entsprechende Tabellenblatt.


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
On Error GoTo EventErr
Application.EnableEvents = False

Select Case Target
Case Range("A1"), Range("A2") '' Paar 1
Union(Range("A1"), Range("A2")) = Target

Case Range("B5"), Range("F9") '' Paar 2
Union(Range("B5"), Range("F9")) = Target

Case Range("D1"), Range("D9") '' Paar 3
Union(Range("D1"), Range("D9")) = Target
''usw
End Select
EventErr:


Application.EnableEvents = True
End Sub


--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]

Wolfgang Habernoll

unread,
Aug 25, 2009, 5:55:13 PM8/25/09
to
Hallo Mark

ich lese gerade die Antwort von Thomas Ramel. Auch meine Pr�fung bezieht sich auf
Value, mit Addresse ist richtig , bitte nimm diesen Code.

@ Thomas, danke den Hinweis.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo EventErr
Application.EnableEvents = False

Select Case Target.Address
Case Range("A1").Address, Range("A2").Address


Union(Range("A1"), Range("A2")) = Target

Case Range("B5").Address, Range("F9").Address


Union(Range("B5"), Range("F9")) = Target

Case Range("D1").Address, Range("D9").Address


Union(Range("D1"), Range("D9")) = Target

End Select

Alexander Wolff

unread,
Aug 26, 2009, 4:10:33 AM8/26/09
to
Die Tastatur von Mark Ise wurde wie folgt gedr�ckt:

> kann man mit Excel 2000 Zellen bidirektional miteinander verkn�pfen?

Sehr "tabellenkalkulatorisch" ist die Idee nicht.

Ich w�rde A2: =A1 vereinbaren. Bei einem Edit-Versuch von A2 sollte ein
Makro die Eingabe zulassen, jedoch dann in A1 schreiben und in A2 die Formel
wiederherstellen/belassen. Vorteil: Das Makro bleibt allgemeing�ltig (es
muss nur checken, ob eine Formel =Zelle hei�t und diese dann bearbeiten).
Daf�r m��te ein SelectionChange allerdings "tracken", welche Zelle angew�hlt
wurde.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2


Mark Ise

unread,
Aug 26, 2009, 7:18:29 AM8/26/09
to
Alexander Wolff schrieb am 26.08.2009 10:10:

>> kann man mit Excel 2000 Zellen bidirektional miteinander verkn�pfen?
>
> Sehr "tabellenkalkulatorisch" ist die Idee nicht.

Tja, einen Preis wollte ich damit nicht gewinnen :-)

Das benutze ich hier nur f�r den Heimgebrauch. Ich habe eine
Arbeitsmappe mit 2 Tabellenbl�ttern, in die ich sporadisch die Gr��e und
das Gewicht meiner beiden Kinder eintrage. Die Bemerkungen und das Datum
dazu sind bei beiden Kindern fast immer gleich. Damit ich mir keinen
Kopf machen muss, in welches Blatt gerade aktiv ist, hatte ich die
Hoffnung, dass es gleiche eine in Excel eingebaute Funktion gibt, die
den Abgleich der Zellen vornimmt.

> Ich w�rde A2: =A1 vereinbaren. Bei einem Edit-Versuch von A2 sollte ein
> Makro die Eingabe zulassen, jedoch dann in A1 schreiben und in A2 die Formel
> wiederherstellen/belassen. Vorteil: Das Makro bleibt allgemeing�ltig (es
> muss nur checken, ob eine Formel =Zelle hei�t und diese dann bearbeiten).

Den Inhalt der Klammer verstehe ich nicht.

> Daf�r m��te ein SelectionChange allerdings "tracken", welche Zelle angew�hlt
> wurde.

Ich ahne, was du damit meinst, h�tte aber keine Idee, wie ich das
umsetzen k�nnte.

--
Mark

Mark Ise

unread,
Aug 26, 2009, 7:23:24 AM8/26/09
to
Wolfgang Habernoll schrieb am 25.08.2009 23:20:

>> kann man mit Excel 2000 Zellen bidirektional miteinander verkn�pfen?
>>
>> Beispiel:
>>
>> Angenommen ich h�tte Zellen A1 und A2 bidirektional miteinander
>> verkn�pft, dann sollten sich alle �nderungen an Zelle A1 gleichfalls auf
>> A2 auswirken und umgekehrt.
>
> Versuche es mal damit, ist nicht auf XL2000 getestet, aber da sollte es auch laufen.
> Der Code bearbeitet 3 "bidirektional Zellen" das kannst du bei Bedarf beliebig
> erweitern. Der Code geh�rt im VBE ins entsprechende Tabellenblatt.

Ich glaube, ich habe mein Beispiel schlecht gew�hlt.

Daf�r bitte ich um Entschuldigung.

Ich m�chte die Zellen zweier Spalten in zwei unterschiedlichen
Tabellenbl�ttern bidirektional verkn�pfen.
Wenn das Makro in das Modul des Tabellenblatts geh�rt, wird das
vermutlich nur innerhalb dieses Blattes funktionieren und nicht zwischen
zwei Tabellenbl�ttern.

--
Mark

Alexander Wolff

unread,
Aug 26, 2009, 7:48:26 AM8/26/09
to
Die Tastatur von Mark Ise wurde wie folgt gedr�ckt:
>> Ich w�rde A2: =A1 vereinbaren. Bei einem Edit-Versuch von A2 sollte
>> ein Makro die Eingabe zulassen, jedoch dann in A1 schreiben und in
>> A2 die Formel wiederherstellen/belassen. Vorteil: Das Makro bleibt
>> allgemeing�ltig (es muss nur checken, ob eine Formel =Zelle hei�t
>> und diese dann bearbeiten).
>
> Den Inhalt der Klammer verstehe ich nicht.

=A1 ist g�ltig
=IV999 ist g�ltig
=A1*3 ist ung�ltig (obwohl es auch g�ltig sein k�nnte)
=A1+B1 ist ung�ltig

Falls ung�ltig, wird die Eingabe gar nicht erst ber�cksichtigt.

Falls g�ltig, l�uft das Prozedere wie beschrieben ab.

Eberhard Funke

unread,
Aug 26, 2009, 8:46:54 AM8/26/09
to
Am Tue, 25 Aug 2009 22:17:02 +0200 schrieb Thomas Ramel:

>> Private Sub Worksheet_Change(ByVal Target As Range)
>> Application.EnableEvents = False
>> If Target = [A1] Then
>> [A2] = [A1]
>> Else
>> [A1] = [A2]

>> End If
>> Application.EnableEvents = True
>> End Sub

>

> Hmmm, und warum merzt du dieses Manko nicht gleich noch aus?
> Ich k�nnte mir das wie folgt vorstellen:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
> Application.EnableEvents = False
> Select Case Target.Address(0, 0)
> Case "A1"
> Range("A2").Value = Target.Value
> Case "A2"
> Range("A1").Value = Target.Value
> End Select
> End If
> Application.EnableEvents = True
> End Sub
>
>
> BTW:
> Warum verwendest Du die Evaluate-Methode ( [A1] ) um die Zellen
> auszuwerten?
> Damit fragst Du ab ob 'Target' den Wert aus 'A1' enth�lt und nicht ob A1
> ver�ndert wurde.

Hallo Thomas,

mein erster Code lautete:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

If Not Intersect(Target, Range("A1,A2")) Is Nothing Then
If Target.Address = "$A$1" Then
'Range("A2").Value = Range("A1").Value
[A2] = [A1]
Else
'Range("A1").Value = Range("A2").Value
[A1] = [A2]
End If


End If
Application.EnableEvents = True
End Sub

Aus "Laune" und zur Verk�rzung hatte ich das ge�ndert und dabei das o. g.
"Manko" wissentlich in Kauf genommen.
Der Code ist zugegebenermassen etwas unorthodox und st�sst in manchen
F�llen unn�tige (und nicht erkennbare) Operationen an, ist aber logisch und
funktioniert fehlerfrei.
Wie gesagt: aus einer Laune heraus. Prinzipell stimme ich Dir zu.

Eberhard Funke

unread,
Aug 26, 2009, 8:56:59 AM8/26/09
to
Am Wed, 26 Aug 2009 13:23:24 +0200 schrieb Mark Ise:

> Ich m�chte die Zellen zweier Spalten in zwei unterschiedlichen
> Tabellenbl�ttern bidirektional verkn�pfen.

Hallo Mark,

in das Modul von Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False


If Target.Address = "$A$1" Then

Sheets("Tabelle2").Range("A1").Value = Target.Value
End If


Application.EnableEvents = True
End Sub


in das Modul von Tabelle2:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False


If Target.Address = "$A$1" Then

Sheets("Tabelle1").Range("A1").Value = Target.Value
End If


Application.EnableEvents = True
End Sub


Verkn�pft "bidirektional" A1 von Tabelle 1 mit A1 von Tabelle 2.

Thomas Ramel

unread,
Aug 26, 2009, 12:59:03 PM8/26/09
to
Gr�ezi Mark

Mark Ise schrieb am 26.08.2009

> Das benutze ich hier nur f�r den Heimgebrauch. Ich habe eine
> Arbeitsmappe mit 2 Tabellenbl�ttern, in die ich sporadisch die Gr��e und
> das Gewicht meiner beiden Kinder eintrage. Die Bemerkungen und das Datum
> dazu sind bei beiden Kindern fast immer gleich. Damit ich mir keinen
> Kopf machen muss, in welches Blatt gerade aktiv ist, hatte ich die
> Hoffnung, dass es gleiche eine in Excel eingebaute Funktion gibt, die
> den Abgleich der Zellen vornimmt.

Wenn du es richten kannst, dass gleiche Informationen in den beiden
Tabellenbl�ttern in den gleichen Zellen stehen, dann geht das auch ohne
VBA-Programmiereung.

Markiere einfach bei gedr�ckter STRG-Taste die beiden Tabellenbl�tter �ber
die Reiter unten am Bildschirm, dann werden alle Eingaben synchron in
beiden Bl�ttern vorgenommen.

Thomas Ramel

unread,
Aug 26, 2009, 1:03:29 PM8/26/09
to
Gr�ezi Eberhard

Danke f�r deine Erkl�rungen zum Hintergrund des Ganzen und dessen
Entstehungs-Geschichte.

Eberhard Funke schrieb am 26.08.2009

> mein erster Code lautete:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> Application.EnableEvents = False
> If Not Intersect(Target, Range("A1,A2")) Is Nothing Then
> If Target.Address = "$A$1" Then
> 'Range("A2").Value = Range("A1").Value
> [A2] = [A1]
> Else
> 'Range("A1").Value = Range("A2").Value
> [A1] = [A2]

Auch hier wieder gemischt mit sauberen Referenzen und den Evaluates []

> End If
> End If
> Application.EnableEvents = True
> End Sub
>
> Aus "Laune" und zur Verk�rzung hatte ich das ge�ndert und dabei das o. g.
> "Manko" wissentlich in Kauf genommen.

OK, wenn man damit 'leben' kann ist es in Ordnung...

> Der Code ist zugegebenermassen etwas unorthodox und st�sst in manchen
> F�llen unn�tige (und nicht erkennbare) Operationen an, ist aber logisch und
> funktioniert fehlerfrei.

....doch gerade diese Side-Effects sind es, die mir da immer Bauchschmerzen
bereiten. Immer in den d�mmsten und unerwartetsten Situationen kommen diese
n�mlich zum Vorschein und es ist *sehr* m�hsam und aufw�ndig, diesen dann
auf die Spur zu kommen.
Es wurde auch schon mal gemunkelt, dass die Evaluates auch etwas langsamer
sind als die referenzierten Bez�ge und Methoden.

Daher versuche ich m�glichst auf diese Evaluates zu verzichten.

> Wie gesagt: aus einer Laune heraus. Prinzipell stimme ich Dir zu.

Fein, wenn wir uns im Grundsatz einig sind :-)

0 new messages