Clever-Excel-Forum

Normale Version: Daten per Formel oder per VBA in ein anderes WB kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich hoffe, eure Hilfsbereitschaft nicht überszustrapazieren, wenn ich schon wieder um Hilfe bitte!

Im Thema "VBA: Zellenreferenzen durch Variablen ersetzen" habt ihr mir geholfen, per Formeln Daten zu kopieren. Und das funktioniert.

Allerdings führt der Weg bisher über einen Umweg.
Die reale Situation: monatliche Daten innerhalb eines Workbook's mit Namen Base werden per VBA aus dem Blatt Database in ein neues Blatt kopiert das die Nr. des Monats erhält und in Bas  abgespeichert wird.
Dieses Blatt wird dann ausgedruckt.
Von außerhalb kommt jeden Monat ein WB per Mail, das ausgefüllt werden muß (Var_0020_Jan bis Var_0020_Dec).
In diesem WB ist in A die Nummer die zur Identifikation der Zeilen in Database dient aus denen Daten kopiert werden sollen, in B der Name (ohne Relevanz hier), und in C,D und E werden bisher manuell aus dem ausgedruckten Blatt (anstatt direkt aus Database) die Daten eingesetzt, was natürlich ein Fehlerrisiko in sich birgt, von der Zeit mal abgesehen.

Ich habe es jetzt hingekriegt, über den Umweg dieses ersten Blattes (das in Base abgespeichert und ausgedruckt wird), per Formeln die ich in Var_0020_[Jan...Dec] einsetze, um sie gleich durch ihre Werte zu ersetzen, das Blatt auszufüllen, allerdings, wie gesagt, über den unnötigen Umweg dieses zusätzlichen Blattes.

Daher möchte ich die Daten direkt in Database abgreifen und sie direkt, ohne Umweg, in Var_0020_... einsetzen.

Ein zusätzliches Problem ist die Tatsache, dass in Database in die Spalte A ein / eingesetzt wird, um die Datensätze und die Monate zu trennen, was Probleme in Formeln macht.

Allerdings habe ich eine Formel, die dem Rechnung tragen soll (in Var_20_... in den Spalten C, D, E); leider kriege ich sie aber nicht ans funktionieren.

Desweiteren frage ich mich, ob VBA nicht eine elegantere Lösung bietet anstatt über Excel-Formeln fahren zu müssen die man dann durch ihre Werte ersetzt.

Um beim Erstellen der angehängten Dateien so nahe wie möglich an der realen Situation zu sein habe ich folgendes gemacht: ich habe diese Database anonymisiert und in ein neues WB kopiert, das ich, wie das Original Base genannt habe, mit der realen .xls-Endung.
Die Spalten die für diese Aufgabe relevant sind:
A: Monat (Format MMMM YYYY)
Q, R, S: Spalten die die Daten enthalten, die in Var_0020_... eingefüllt werden müssen
BW: die Nummer anhand derer bestimmt wird, aus welchen Zeilen Daten entnommen werden müssen

z.B.: die Daten für die Nummer 100002 in Var_0020_Feb für Februar (A3) befinden sich in Database Zeile 133 (mit der Nummer in BW133)
Database Q133 --> Var_0020_Feb C3
               R133                               D3
               S133                               E3
Und das auszufüllende WB habe ich auch anonymisiert (Namen gelöscht), sodass es dem Original entspricht.

D.h. was ich möchte:
* eine Hilfe, damit diese Formeln in C3, D3, E3 (die nach unten kopiert werden) funktionieren
* oder, besser, eine VBA-Lösung ohne die Formeln.


Mit freundlichen Grüßen
Alooha
Hallo,
ich habe eigentlich eine Lösung per Formel gefunden, aber wie gesagt ohne Formel wäre es VBAmäßig wohl eleganter.

Allerdings stoße ich dabei auf ein Problem, auf das ich in letzter Zeit immer öfter stoße: es schleichen sich @s in die Formeln ein, so auch hier:

Per VBA setze ich diese Formel in C3 ein:
Code:
ActiveCell.FormulaR1C1 = _
        "=SUMPRODUCT(IFERROR([Base.xls]Database!RC75:R1500C75=--RC1,0)*IFERROR(MONTH([Base.xls]
und das Resultat in der Zelle ist:


Code:
=SOMMEPROD(SIERREUR(@[Base.xls]Database!$BW3:$BW$1500=--$A3;0)*SIERREUR(MOIS(@[Base.xls]Database!$A3:$A$1500)=$C$1;0)*SIERREUR(@[Base.xls]Database!R3:R$1500;0))

und die Formel ergibt 0.

Ich konnte das Problem zwar so lösen:

Code:
Selection.Replace What:="@", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
aber besser wäre es, wenn diese @ überhaupt nicht erscheinen würden.


Weiß jemand, wie ich die verhindern kann?

MfG
Alooha
Hallöchen,

versuch mal mit Hochkommas zu arbeiten wie z.B. in Formeln mit Blatt- oder Dateinamen, die Leerzeichen enthalten
Hallo,
danke für den Tipp!

Eine Lösung die ich gefunden habe, besteht darin, die Formeln direkt als Matrixformeln zu deklarieren:
Code:
Range("C3").FormulaArray = _
dann klappt es.
MfG
Alooha