Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten indirekt kopieren

Daten indirekt kopieren
03.06.2006 22:27:25
Uwe
Hallo,
Ich habe eine Excel-Mappe mit mehren Blättern.
Auf Blatt 1 mit dem Namen „Tabelle1“ sind in der Spalte A die Zeilen 2 bis .....mit einem fortlaufendem Datum aufgefüllt
Auf einem anderen Tabellenblatt sind Daten einem Datum zugeordnet, welche in die Zeile mit dem Datum in Tabelle1 kopiert werden sollen.
Tabelle2:
Zeile 17 11.01.2006 ABC 123.00
Ich habe dem Bereich in Tabelle2 Zeile 17 A:G den Namen „Quelle“ zugeordnet
Mit dem Befehl in Tabelle1 ab D2 bis D....
=WENN($A2" ";(SVERWEIS(A2;Quelle;$C$1+2;FALSCH));" ")
bzw. in Tabelle1 ab E2 bis E....
=WENN($A2" ";(SVERWEIS(A2;Quelle;$C$1+4;FALSCH));" ")
werden die Inhalte von Tabelle 2 nach Tabelle 1 übertragen.
Mein Problem besteht jetzt darin, dass dass übertragen von Tabelle2 nach Tabelle1 nur funktioniert, wenn die Quelldaten in Tabelle 2 stehen.
„Quelle“ ist mit Tabelle2 verknüpft, entsprechend funktioniert dies nur mit Tabelle2 aber nicht mit „TabelleXXX“.
Ich benötige aber eine Funktion, die aus anderen Blättern dieser Arbeitsmappe, welchen den gleichen Aufbau haben wie Tabelle2, Tabelle1 bedient.
Vielen Dank für eure Hilfe
Uwe

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten indirekt kopieren
04.06.2006 09:24:22
fcs
Hallo Uwe,
das kannst Du zum Beispiel mit der Funktion INDIREKT lösen.
Wenn der Bereichsname "Quelle" in jeder Tabelle definiert ist, dann schaut das etwa so aus:
Tabellenblattname: Tabelle1
A       B   C   D      E          F          G          H
1     Datum       3       Tabelle2              Tabelle3
2  01.01.06               Tab2 E 1   Tab2 G 1   Tab3 E 1   Tab3 G 1
Benutzte Formeln:
E2:  =WENN($A2<>" ";(SVERWEIS($A2;INDIREKT(E$1&"!Quelle");$C$1+2;FALSCH));" ")
F2:  =WENN($A2<>" ";(SVERWEIS($A2;INDIREKT(E$1&"!Quelle");$C$1+4;FALSCH));" ")
G2:  =WENN($A2<>" ";(SVERWEIS($A2;INDIREKT(G$1&"!Quelle");$C$1+2;FALSCH));" ")
H2:  =WENN($A2<>" ";(SVERWEIS($A2;INDIREKT(G$1&"!Quelle");$C$1+4;FALSCH));" ")
Namen in der Tabelle:
Quelle:  =Tabelle2!$A$2:$G$10
Tabelle3!Quelle:  =Tabelle3!$A$2:$G$10

Um in der Arbeitsmappe ggf. den Namen "Quelle" in jeder Tabelle festlegen zu können, muss du unter Namen festlegen eingeben:
Tabelle3!Quelle
Tabelle4!Quelle usw.
Oder Du schreibst die Formeln ohne Bereichsnamen, sondern mit den Zelladddressen:

E2:  =WENN($A2<>" ";(SVERWEIS($A2;INDIREKT(E$1&"!A:G");$C$1+2;FALSCH));" ")

Gruß
Franz
Anzeige
AW: Daten indirekt kopieren
04.06.2006 16:45:06
Uwe
Hallo Franz,
vielen Dank für Deine schnelle Hilfe,
Deine Formeln funktionieren, aber mein Problem ist nicht gelöst.
Die fertige EXCEL-Mappe wird später von einem Laien bedient.
Dieser kann Tabelle2, so oft wie es nötig ist, kopieren und einen beliebigen Namen vergeben.
Diese neuen Blätter haben aber immer den gleichen Aufbau wie Tabelle2.
Der Unterschied besteht nur darin, dass in Zelle A17 ein anderes Datum steht, und in den Zellen C17 bis G17 die dazugehörigen Informationen.
Tabelle 1 wird schreibgeschützt sein.
Entsprechend kann der Bediener nicht den Namen des Quellblattes eingeben.
Ich glaube ein Makro ist notwendig, welches folgende Funktion haben muss:
Die Daten, welche rechts vom Datum des aktuell geöffneten Tabellenblattes stehen, müssen
in Tabelle1 in die Zeile übertragen werden, in der das gleiche Datum steht.
Unabhängig vom Quellblatt müssen die Daten vom Quellblatt zu Tabelle1 immer in die gleichen Spalten gelangen.
Vielleicht hast Du ja hierfür auch eine Lösung.
Mir besten Grüssen
Uwe
Anzeige
AW: Daten indirekt kopieren
04.06.2006 20:10:59
fcs
Hallo Uwe,
habe nochmals ein wenig rumprobiert was so ginge.
1. Möglichkeit
Wenn man die Werte aus den Tabellen per Makro in die Tabelle1 eintragen möchte, dann müßte das Makro auch den Blattschutz jeweils aufheben und wieder setzen. Auch das ist möglich. Hätte den Vorteil, dass man in der Tabelle1 keine Formeln schreiben müßte sondern es würden nur jeweils die Werte per Makro eingetragen.
2. Möglichkeit
In der Spalte B wird der Name der Tabellen per Makro (könnte man auch ohne Makro vom Anwender machen lassen) eingetragen. Bei eingeschaltetem Blattschutz können Werte in Spalte B eingetragen werden, dazu Zellen in Spalte B entsprechend ohne Schutz formatieren. Die Inhalte in Spalten C bis G werden dann per Formel berechnet.
Ich habe für beide Möglichkeiten die Makros erstellt. Zu finden im Modul1.
Ich hab die Makros so eingerichtet, das immer dann wenn das Blatt Tabelle1 gewählt wird die Werte in der Tabelle1 neu berechnet werden. Entsprechendes Makro zu finden im VBA-Editor unter Tabelle1.
https://www.herber.de/bbs/user/34169.xls
Gruß
Franz
Anzeige
AW: Daten indirekt kopieren
06.06.2006 18:20:14
Uwe
Hallo Franz,
vielen Dank für Deine erneute Hilfe,
Dein Lösungsvorschlag entspricht genau dem was ich suchte.
ich habe die Datei 34169.xls geladen, kurz getestet, und das Makro (Variante 1) für meine Anwendung angepasst (Variante 2 habe ich nicht getestet).
Hier mein Makro:
Sub Übertrag_sichern()
'
' Übertrag_sichern Makro
'
' Tabellennamen werden in Spalte AL von Jahr_Soll eingetragen
Dim wks1 As Worksheet, wks2 As Worksheet, zelle As Range
Set wks1 = ThisWorkbook.Sheets("Jahr_Soll")
With wks1
'Einträge ab Zeile 103 in Spalte 45 (AS) (Tabellennamen) löschen
.Range(.Cells(103, 45), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 45)).ClearContents
'Tabellenblätter nach Datum vergleichen und Tabellennamen einfügen
For Each wks2 In ThisWorkbook.Worksheets
If wks2.Name "Jahr_Soll" Then
'jede Zelle ab Zeile 103 in Spalte 2 (B) wird auf das Datum in AN2 der anderen Tabelle untersucht
For Each zelle In .Range(.Cells(103, 2), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1))
If zelle.Value = wks2.Range("AN2").Value Then
'in die entsprechende Zeile mit dem Datum wird in Spalte AS der Name der Tabelle eingetragen aus der das Datum stammt
.Cells(zelle.Row, "AS").Value = wks2.Name
Exit For
End If
Beide Makros funktionieren bis auf kleine Einschränkungen:
1. Wenn die Quelltabelle einen Namen mit Leerzeichen z.B. „Test 1“hat, funktioniert der SVERWEIS nicht (#BEZUG).
2. Bei Deinem Makro wird:
Wenn zwischen dem Ziel-Tabellenblatt und dem 1. Tabellenblatt mit den Quelldaten (Tabelle2) andere Tabellen stehen, in denen kein Datum in der zu untersuchenden Zelle steht , wird der Name der letzten Tabelle, die keine Eintragung hat (Tabellexx), eine Zeile unterhalb des zuletzt gefundenem Datum in die Spalte geschrieben, in der die gefundenen Tabellennamen geschrieben werden (B11).
Bei meinem Makro wird der unnötige Tabellenname in die 1. zu untersuchende Datumzeile geschrieben (AS103).
Dein Beispiel habe ich zum testen wie folgt erweitert:
Tabelle1 Tabelle3 Tabellexx Tabelle2 Test Test 2
In AS103 steht Tabellexx
In B2 steht Test 2 und in C2 steht #BEZUG
3. Der automatische Aufruf des Makros ist eine tolle Sache, welche ich auch nutzen möchte Der Hintergrund für das Zwischespeichern in Tabelle1 ist, dass die Quelltabellen indirekt über Tabelle1 auf Daten der davor liegenden Quelltabelle zugreifen sollen. Der Bediener wird auch zwischen Tabelle2 und Test wechseln. Mittels Tastenkombination oder Aufruf der Tabelle1 funktioniert das tadellos, aber der Bediener braucht von dieser Funktion gar nichts merken
Die sinnvollste Möglichkeit das Makro aufzurufen ist, beim Verlassen eines Tabellenblattes (außer Tabelle1 egal welche Tabelle) die Funktion zu starten.
Vielen Dank für Deine Bemühungen
Gruß
Uwe
Anzeige
AW: Daten indirekt kopieren
06.06.2006 20:43:55
fcs
Hallo Uwe,
die beiden Schönheitsfehler lassen sich beseitigen
1. #BEZUG bei Dateinamen mit Leerzeichen
hier müssen die Formel angepaßt werden. Die Tabellennamen müssen in Hochkommata gefasst werden. Beispiel:

=WENN(ISTLEER($B2);"";INDIREKT("'"&$B2&"'!C17"))
2. Tabellen ohne Datumseintrag
Durch eine zusätzliche If-Bedingung die leere Zellen abfängt, tritt dies Problem auch nicht mehr auf.

Sub Übertrag_sichern()
' Übertrag_sichern Makro
' Tabellennamen werden in Spalte AL von Jahr_Soll eingetragen
Dim wks1 As Worksheet, wks2 As Worksheet, zelle As Range
Set wks1 = ThisWorkbook.Sheets("Jahr_Soll")
With wks1
'Einträge ab Zeile 103 in Spalte 45 (AS) (Tabellennamen) löschen
.Range(.Cells(103, 45), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 45)).ClearContents
'Tabellenblätter nach Datum vergleichen und Tabellennamen einfügen
For Each wks2 In ThisWorkbook.Worksheets
If wks2.Name <> "Jahr_Soll" Then
'jede Zelle ab Zeile 103 in Spalte 2 (B) wird auf das Datum in AN2 der anderen Tabelle untersucht
For Each zelle In .Range(.Cells(103, 2), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1))
'Anpassungen zum Abfangen von Leeren Datumszellen
If Not IsEmpty(zelle) Then
If zelle.Value = wks2.Range("AN2").Value Then
'in die entsprechende Zeile mit dem Datum wird in Spalte AS der Name der Tabelle eingetragen aus der das Datum stammt
.Cells(zelle.Row, "AS").Value = wks2.Name
Exit For
End If
End If
'Ende Anpassungen

mfg
Franz
Anzeige
AW: Daten indirekt kopieren
07.06.2006 18:32:06
Uwe
Hallo Franz,
die Sache mit dem „BEZUG“ ist behoben,
das Abfangen der Tabellen ohne Eintrag klappt mit folgendem Programm nicht.
Ich bekomme die Meldung „Datum in XXXXX ist in Jahr_Soll nicht vorhanden“.
XXXX steht für die Tabellen in denen nichts steht.
Zelle AN2 ist in diesen Blättern mit Sicherheit leer.
Kannst Du mir zusätzlich noch einen Tipp geben, wie ich dieses Makro zusätzlich zur Tastenkombination (Strg + A)immer beim Verlassen des offenen Tabellenblattes starte, oder bei einer Änderung der Eintragung in Zelle B2 des offenen Tabellenblattes?
Hier mein Makro für die Datenübertragung:

Sub Übertrag_sichern()
' Übertrag_sichern Makro
' Tabellennamen werden in Spalte AL von Jahr_Soll eingetragen
Dim wks1 As Worksheet, wks2 As Worksheet, zelle As Range
Set wks1 = ThisWorkbook.Sheets("Jahr_Soll")
With wks1
'Einträge ab Zeile 103 in Spalte 45 (AS) (Tabellennamen) löschen
.Range(.Cells(103, 45), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 45)).ClearContents
'Tabellenblätter nach Datum vergleichen und Tabellennamen einfügen
For Each wks2 In ThisWorkbook.Worksheets
If wks2.Name <> "Jahr_Soll" Then
'jede Zelle ab Zeile 103 in Spalte 2 (B) wird auf das Datum in AN2 der anderen Tabelle untersucht
For Each zelle In .Range(.Cells(103, 2), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1))
'Abfangen von leeren Datumszellen
If Not IsEmpty(zelle) Then
If zelle.Value = wks2.Range("AN2").Value Then
'in die entsprechende Zeile mit dem Datum wird in Spalte AS der Name der Tabelle eingetragen aus der das datum stammt
.Cells(zelle.Row, "AS").Value = wks2.Name
Exit For
End If
End If
Zeile = zelle.Row
Next zelle
If Zeile = .UsedRange.Row + .UsedRange.Rows.Count Then
MsgBox ("Datum in Jahr_Soll " & wks2.Name & " ist in Jahr_Soll nicht vorhanden!")
End If
End If
Next wks2
End With
MsgBox ("Jahr_Soll wurde aktualisiert")
End Sub

Nochmals vielen Dank
Mit freundlichem Gruß
Uwe
Anzeige
AW: Daten indirekt kopieren
07.06.2006 21:54:16
fcs
Hallo Uwe,
habe den Code nochmals angepaßt, konnte es aber nicht aktiv Testen.
mit folgenden Makros, die du im VBA-Editor unter "DieseArbeitsmappe" einfügst kannst du die Aktualisierung auch starten. Allerdings solltes du dann die Ausführung des Makros beim Aktivieren der Tabelle "Jahr_Soll" wieder löschen, da ja jetzt nach dem Verlassen der anderen Tabellen jeweils eine Aktualisierung erfolgt.
mfg
Franz

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Sh.Name <> "Jahr_Soll" Then
If Target.Address = "$B$2" Then
Call Übertrag_sichern
End If
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> "Jahr_Soll" Then
Call Übertrag_sichern
End If
End Sub
Sub Übertrag_sichern()
' Übertrag_sichern Makro
' Tabellennamen werden in Spalte AL von Jahr_Soll eingetragen
Dim wks1 As Worksheet, wks2 As Worksheet, zelle As Range, Leer As Boolean
Set wks1 = ThisWorkbook.Sheets("Jahr_Soll")
With wks1
'Einträge ab Zeile 103 in Spalte 45 (AS) (Tabellennamen) löschen
.Range(.Cells(103, 45), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 45)).ClearContents
'Tabellenblätter nach Datum vergleichen und Tabellennamen einfügen
For Each wks2 In ThisWorkbook.Worksheets
Leer = False
If wks2.Name <> "Jahr_Soll" Then
'jede Zelle ab Zeile 103 in Spalte 2 (B) wird auf das Datum in AN2 der anderen Tabelle untersucht
For Each zelle In .Range(.Cells(103, 2), .Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1))
'Abfangen von leeren Datumszellen
If Not IsEmpty(zelle) Then
If zelle.Value = wks2.Range("AN2").Value Then
'in die entsprechende Zeile mit dem Datum wird in Spalte AS der Name der Tabelle eingetragen aus der das datum stammt
.Cells(zelle.Row, "AS").Value = wks2.Name
Exit For
End If
Else
Leer = True
End If
Zeile = zelle.Row
Next zelle
If Zeile = .UsedRange.Row + .UsedRange.Rows.Count And Leer = False Then
MsgBox ("Datum in Jahr_Soll " & wks2.Name & " ist in Jahr_Soll nicht vorhanden!")
End If
End If
Next wks2
End With
MsgBox ("Jahr_Soll wurde aktualisiert")
End Sub

Anzeige
AW: Daten indirekt kopieren
18.06.2006 22:12:20
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:12:31
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:12:39
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:13:23
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:13:23
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
Anzeige
AW: Daten indirekt kopieren
18.06.2006 22:13:24
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:13:24
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:13:38
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:13:56
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
AW: Daten indirekt kopieren
18.06.2006 22:14:01
Uwe
Hallo Franz
Herzlichen Dank für Deine wiederholte Hilfe.
Jetzt klappt aller wie gewollt.
Mit besten Grüssen
Uwe
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige