AW: Aus bestimmten Worksheets Daten lesen
01.12.2015 16:07:17
fcs
Hallo Vanessa,
aber die Idee war, nur Ergebnisse, keine Tabellen auf dem ersten Sheet zu haben.
Das Kopieren der Datenwar ja nur als Beispiel in das Makro eingebaut.
Gibt es eine Möglichkeit, die Range die ich aufspanne auf ein bestimmtes Blatt zu beziehen? So das ich die Funktionen auf ein variables Datenblatt zugreifen und ich nicht alles kopieren muss?
Grundsätzlich gibt es jetzt verschiedene Möglichkeiten:
1. Verwendung der Funktion INDIREKT
Der gefundene/gewünschte Blattname wird vom Makro in eine Zelle geschrieben.
Die Zellbereiche die die Funktionen auswerten sollen werden mit INDIREKT ermittelt.
z.B.: =SUMME(INDIREKT("'" & $B$4 & "'!C:C"))
2. Das Makro erstzt in den Formeln den alten Blattnamen
Diese Methode mag ich nicht so, weil es nicht so einfach ist, den alten Blattnamen zu ermitteln
3. Das Makro generiert die Formeln, baut dabei Blattnamen und ggf. variable Zellbereiche in die Formeln ein, und fügt sie dann im Ergebnisblatt ein.
Nachfolgend das Makro mit entsprechenden Ergänzungen für Formel-Lösung.
Für die Syntax deiner Formeln gibst du diese in dein Ergebnisblatt ein. Dabei möglichst mit absoluten Bezügen arbeiten.
Anschließend startest du den Makrorekorder und doppelklickst in jede Zelle mit Formel und schließst die Formeleingabe mit Enter ab. Dann Makrorecorder beenden. Die aufgezeichneten Formeln kopierst du dann in das Haupt Makro und baust wie in meinem Beispiel-Makro die variablen Teile ein.
Gruß
Franz
Sub aaTest()
Dim wksZiel As Worksheet
Dim wksQuelle As Worksheet
Dim strBlatt As String
Dim Zeile_1 As Long, Zeile_L As Long, Spalte_1 As Long, Spalte_L As Long, strFormel As String
Dim Zeile As Long, Spalte As Long
strBlatt = ActiveSheet.Range("B3").Text
Set wksZiel = ActiveSheet
' Set wksZiel = ActiveWorkbook.Sheets(1) 'Alterntive, wenn Blatt in das Daten sollen immer _
das 1. Registerblatt ist
'Blatt mit gewählten Namen in Zelle B3 in Arbeitsmappe suchen
For Each wksQuelle In ActiveWorkbook.Worksheets
If LCase(wksQuelle.Name) = LCase(strBlatt) Then
Exit For
End If
Next
If wksQuelle Is Nothing Then
MsgBox "Tabelle """ & strBlatt & """ nicht vorhanden"
GoTo Beenden
Else
If MsgBox("Daten von Tabelle """ & strBlatt & """ nach Tabelle """ _
& wksZiel.Name & """ übertragen?", _
vbQuestion + vbOKCancel, "Daten übertragen") = vbCancel Then GoTo Beenden
End If
'hier dann die Anweisungen um Daten aus Quelle nach Ziel zu übertragen
'nachfolgend Beispiel für Formel-Lösung
With wksQuelle
Zeile_1 = 4 '1. Zeile des Bereichs in Quelle
Spalte_1 = 2 '1. Spalte des Bereichs - B in Quelle
'letzte Zeile mit Inhalt in Spalte B in Quelle
Zeile_L = .Cells(.Rows.Count, 2).End(xlUp).Row
'letzte Spalte mit Inhalt in Zeile 4 in Quelle
Spalte_L = .Cells(4, .Columns.Count).End(xlToLeft).Column
strFormel = "=SUM('" & .Name & "'!R" & Zeile_1 & "C" & Spalte_1 & ":R" & Zeile_L _
& "C" & Spalte_L & ")"
'oder auch
strFormel = "=SUM('" & .Name & "'!R4C2:R" & Zeile_L & "C" & Spalte_L & ")"
wksZiel.Range("B7").FormulaR1C1 = strFormel
End With
Beenden:
End Sub