Makro zum Kopieren von Werten in anderes Tabellenblatt, unterschiedliche Benennung
#1
Hallo liebes Forum!
Zunächst einmal: ich bin neu hier und ein totaler Makro-Noob – also bitte Rücksicht nehmen. Das Problem fängt schon damit an, dass ich nicht genau weiß wonach ich googlen soll. Mein Problem ist bestimmt nicht neu und mit Sicherheit schon hundert Mal behandelt worden, aber scheinbar nutze ich die falschen Stichwörter.

Programm-Version: Excel 2010

Mein Problem: Ich möchte aus einer variablen Anzahl Tabellenblättern jeweils einen Zahlenwert (zwischen 0 und zehn) kopieren und dann auf einem Übersichts-Tabellenblatt einfügen. Die Spalte in welche die Werte eingetragen werden sollen beginnt bei B2 und kann beliebig fortgesetzt werden (B3, B4 usw.).
Die Reihenfolge meiner Tabellenblätter im Dokument sieht so aus: Übersichtsblatt, Blanko-Blatt, S1, S2, S3 …
Die Blätter S1, S2 usw. sind alle gleich aufgebaut, enthalten nur unterschiedliche Zahlen. Den Wert aus Zelle K14 dieser Blätter möchte ich auf dem Übersichtsblatt anzeigen lassen. Der Wert ist auch immer in der gleichen Zelle K14.
Die Bezeichnung der Blätter S1, S2 usw. variiert. D.h. die heißen auch mal P1 oder M4.
Manuell bekomm ich das hin, dass mir die Werte angezeigt werden (z.B. ='P1'!K14    oder    ='M2'!K14). Allerdings ist das ab einer bestimmten Blattanzahl etwas mühsam. Deswegen hätte ich am liebsten ein Makro was die Werte kopiert und in die Übersichtstabelle einfügt.
Dummerweise habe ich von Makro-Programmierung so viel Ahnung wie die Kuh vom Fallschirmspringen. Meine Suchen ergaben verschiedene Ergebnisse in Form von Schleifen und sonstigem. Allerdings hört es bei mir ja schon mit der Auswahl des Tabellenblattes auf …
Was ich mir schon erschlossen habe, ist die Auswahl der Zelle im jeweiligen Tabellenblatt und das Kopieren selbiger:


Code:
Range("K14").Select
Selection.Copy

Hier darf kurz gelacht werden :17:
Allerdings hilft mir das ja auch nicht wirklich weiter, weil bis dato der Wert ja nur in den Zwischenspeicher gewandert ist. Und noch weit davon entfernt ist, in meiner Übersichtstabelle zu erscheinen.

Wenn ich den manuellen Vorgang mit dem Makro-Recorder aufzeichne (ich starte vom Übersichtsblatt aus), sieht das wie folgt aus:


Code:
Sub Kritikalitaetswert()
'
' Kritikalitaetswert Makro
' Kritikalitätswert aus anderen Tabellenblättern entnehmen und in die Übersichtstabelle kopieren.
'
'
   Range("B2").Select
   ActiveCell.FormulaR1C1 = "='P1'!R[12]C[9]"
   Range("B3").Select
   ActiveCell.FormulaR1C1 = "='P2'!R[11]C[9]"
   Range("B4").Select
   ActiveCell.FormulaR1C1 = "='P3'!R[10]C[9]"
   Range("B5").Select
   ActiveCell.FormulaR1C1 = "='P4'!R[9]C[9]"
   Range("B6").Select
   ActiveCell.FormulaR1C1 = "='I1'!R[8]C[9]"
   Range("B7").Select
   ActiveCell.FormulaR1C1 = "='I2'!R[7]C[9]"
   Range("B8").Select
   ActiveCell.FormulaR1C1 = "='I3'!R[6]C[9]"
   Range("B9").Select
   ActiveCell.FormulaR1C1 = "='M2'!R[5]C[9]"
   Range("B10").Select
End Sub


Das macht dann auch ganz brav was es soll, aber halt nur für die Tabellenblätter die P1-P4, I1-I3 und M2 heißen. Es sollen aber alle K14-Werte aller Tabellenblätter aufgeführt werden – z.B. auch wenn ich ein weiteres Tabellenblatt einfüge.
Hilfe wäre toll – und bitte auf gaaaaanz einfachem Niveau erklären.
Vielen Dank im Voraus!
Top
#2
Hallo Rollenlager,

das sollte dann mit einer Schleife gehen.
Alle Blätter bekommt man z.B. mit

For Each Blaetter in Sheets
...
Next


Statt kopieren würde ich den Wert übernehmen.

For Each Blaetter in Sheets
Range("B2")=Blaetter.Range("K14")
Next


Und dann muss das natürlich immer eine Zeile nach unten gesetzt werden. Dazu könnte man einen Zähler nehmen und statt mit Range mit Cells arbeiten.


iCnt=2
For Each Blaetter in Sheets
Cells(iCnt, 2)=Blaetter.Range("K14")
iCnt=iCnt+1
Next


Voraussetzung ist, dass Du beim Start des Makro auf dem Zusammenfassungsblatt bist.
Allerdings wird Dir so auch der Wert vom Zusammenfassungsblatt mit eingetragen. Wäre das ok oder soll das ausgeschlossen werden?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Rollenlager
Top
#3
Hallo "Schauan".

Vielen, vielen Dank für Deine Hilfe! Hat sehr gut funktioniert und macht genau das, was es soll.
Das Problem mit der Anzeige des Blanko-Blattes wurde gelöst, indem die entsprechende Zeile auf dem Übersichtsblatt einfach ausgeblendet wurde ;)  Sicherlich nicht im Sinne des Erfinders, aber praktikabel.

Danke nochmal!
Top
#4
Hallo,

Makro so ergänzen:



Code:
iCnt=2
For Each Blaetter in Sheets
   if Blaetter.name<>"Blank-Blatt" then
      Cells(iCnt, 2)=Blaetter.Range("K14")
      iCnt=iCnt+1
   end if
Next
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste