Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Makro zum Kopieren von Werten





Frage

Hallo Leute, ich habe ein kelines Problem. Ausgangssituation: Ich habe in einem Tabellenblatt (z.B. "Tabelle1") in den Spalten A bis H bis zur Zeile z.B. 1000 jeweils unterschiedliche Zahlen stehen. In der ersten Zeile, laso A1 bis H1 ist die Benennung der Spalten eingetragen (in A1 steht "Input1", in B1 steht "Input2" usw. bis F1 "Input6"; und in den letzten beiden Zellen, nämlich G1 und H1 stehen jeweils "Output1" und "Output2". Ab der zweiten Zeile bis zur letzten Zeile sind die Zahlen (im Format Zahl mit einer Dezimalstelle, z.B. 15,0) eingetragen. Problem: Ich möchte nun (wahrscheinlich mit einem Makro?) die Werte aus der Tabelle1 in ein anderes Tabellenblatt z.B. "Tabelle2" in einer bestimmten Form eintragen. Und zwar wie folgt: in der ersten Zelle A1 der Tabelle2 soll immer ein fester Text (z.B. "diese Datei wurde erstellt am:") stehen und in A2 das entsprechende Datum. Danach sollen 3 leere Zeilen folgen (also dritte, vierte und fünfte). In A6 soll dann wieder ein fester Text stehen, nämlich "Anzahl der Werte pro Spalte" und in B6 soll dann diese Anzahl aus der Tabelle1 (z.B. Anzahl aller Werte in der Spalte A ohne die Benennung in A1 ) ermittelt werden. In A7 soll wieder ein fester Text: "Anzahl der Inputs" stehen. Und in B7 die zahl 6 für sechs Inputs. Falls aber weniger oder mehr als 6 Inputs in der Tabelle 1 vorhanden sind, d.h ich habe dann entsprechend mehr Input-Spalten, so soll Excel mir die richtige Zahl eintragen. In A8 und B8 sollen analog zu Inputs ein fester Text "Anzahl der Outputs" eingetragen und die Anzahl der Outputs aus der Tabelle 1 übernommen werden (z.B. 2 oder mehr oder weniger). Zeile 9 ist wieder eine leere Zeile. In A10 soll der Text "# Input 1:" und in A12 der Text "# Output 1:" eingetragen werden. Wenn ich dann z.B. 6 erste Inputs in de Tabelle 1 habe (also in A2 bis F2), sollen diese Werte dann in A11 bis H11 in der gleichen Raihenfolge in die Tabelle 2 übernommen werden. Und die Output-Werte aus Tabelle 1 (G2 und H2) sollen in Tabelle 2 in A13 und B13 (bei zwei Werten, können aber auch mehr oder weniger sein) übernommen werden. In A14 soll dann wieder wie in A10 fester Text stehen allerdings +1, d.h also "# Input 2:". Und in A16 "# Output 2:". In A15 sollen dann wieder die jeweiligen Input-Werte und in A17 die Output-Werte aus der Tabelle1 eingetragen werden. Die Tabelle2 soll dann solange fortgeschrieben werden bis in Tabelle1 keine Werte mehr vorhanden sind. Hier ist noch ein Beispiel für die vorhandene Tabelle1. Und ein Beispiel wie die Tabelle2 später aussehen soll Tabelle1:---------------------------------------------- Input Input Input Input Input Input Ouptput Output 0,0 6,0 4,0 0,0 28,0 2,0 1,0 0,0 0,1 6,0 8,0 0,0 28,0 9,0 1,0 0,0 0,2 6,0 5,0 0,0 28,0 8,0 1,0 0,0 0,3 6,0 7,0 0,0 28,0 8,0 1,0 0,0 usw. Tabelle2:----------------------------------------------- Datei erstellt: 03.06.2005 Gesamtanzahl : 1000 outputs : 6 inputs : 2 # Input 1: 0,0 6,0 4,0 0,0 28,0 2,0 # Output 1: 1,0 0,0 # Input 2: 0,1 6,0 8,0 0,0 28,0 9,0 # Output 2: 1,0 0,0 # Input 3: 0,2 6,0 5,0 0,0 28,0 8,0 # Output 3: 1,0 0,0 usw. -------------------------------------------------------------------- Wer hat eine Idee, Please Help! Vielen Dank im Voraus Gruß Alex

Antwort 1 von coros

Moin Alex,

kopiere nachfolgendes Makro in ein StandardModul und weise es einer Befehlsschaltfläche zu.

Option Explicit

Sub Daten_verschieben()
Dim letzte_Zeile As Long, letzte_Spalte As Integer, Wiederholungen As Integer, _
Inputanzahl As Integer, Outputanzahl As Integer, Zeile_Input As Long, _
Zeile_Otput As Long, I_O_Nummer As Long

Application.ScreenUpdating = False

Application.StatusBar = "Vorgang läuft..."

Sheets("Tabelle2").Cells.ClearContents

letzte_Zeile = ActiveSheet.UsedRange.Rows.Count

letzte_Spalte = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column

For Wiederholungen = 1 To letzte_Spalte
If Cells(1, Wiederholungen) = "Input" Then
Inputanzahl = Inputanzahl + 1
Else
Outputanzahl = Outputanzahl + 1
End If
Next

Sheets("Tabelle2").Range("A1") = "Diese Datei wurde erstellt am:"
Sheets("Tabelle2").Range("A2") = Format(Date, "dd.mm.yyyy")
Sheets("Tabelle2").Range("A6") = "Gesamtanzahl:"
Sheets("Tabelle2").Range("B6") = letzte_Zeile - 1
Sheets("Tabelle2").Range("A7") = "Inputs:"
Sheets("Tabelle2").Range("B7") = Inputanzahl
Sheets("Tabelle2").Range("A8") = "Outputs:"
Sheets("Tabelle2").Range("B8") = Outputanzahl

I_O_Nummer = 1

For Wiederholungen = 10 To (letzte_Zeile + 1) * 4 Step 4
Sheets("Tabelle2").Cells(Wiederholungen, 1) = "# Input " & I_O_Nummer
With Sheets("Tabelle2").Cells(Wiederholungen, 1)
    .Font.Bold = True
    .Font.Underline = xlUnderlineStyleSingle
End With
Sheets("Tabelle2").Cells(Wiederholungen + 2, 1) = "# Output " & I_O_Nummer
I_O_Nummer = I_O_Nummer + 1
With Sheets("Tabelle2").Cells(Wiederholungen + 2, 1)
    .Font.Bold = True
    .Font.Underline = xlUnderlineStyleSingle
End With
Next

Zeile_Input = 11
Zeile_Otput = 13

For Wiederholungen = 2 To letzte_Zeile + 1
Range(Cells(Wiederholungen, 1), Cells(Wiederholungen, Inputanzahl)).Copy _
Sheets("Tabelle2").Cells(Zeile_Input, 1)
Range(Cells(Wiederholungen, Inputanzahl + 1), _
Cells(Wiederholungen, Inputanzahl + Outputanzahl)).Copy _
Sheets("Tabelle2").Cells(Zeile_Otput, 1)
Zeile_Input = Zeile_Input + 4
Zeile_Otput = Zeile_Otput + 4
Next

Application.StatusBar = False
End Sub


Bei obigem Makro sollten die von Dir gewollten Dinge von dem gerade aktiven Tabellenblatt, z.B. "Tabelle1" kopiert und an den richtigen Stellen in Blatt "Tabelle2" eingefügt werdenwerden. Als Zusatz, auch wenn Du das nicht geschrieben hast, werden die Texte "#Input x" und "# Output x" fett und unterstrichen dargestellt. Das habe ich nur wegen der Übersicht gemacht, da diese Texte sonst in der Flut der Daten sehr leicht untergehen, sprich man sieht nicht auf Anhieb, wo Input und wo Outputdaten stehen.

Hat das Blatt, in das die Daten kopiert werden soll einen anderen Namen als "Tabelle2", dann musst Du in dem Makro in allen Anweisungen in denen der Namen "Tabelle2" vorkommt gegen Deinen Blattnamen tauschen.

Ich hoffe, Du kommst klar. Bei Fragen oder Problemen melde Dich.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Alex918273645

Moin coros,

vielen, vielen Dank für deine Hilfe und das Makro. Es funktioniert super. Ich hatte leider nicht so viel Zeit am Wochenende, Sorry deshalb für die späte Antwort.
Danke auch für den Hinweis, dass die Texte (Input, Output) fett und unterstrichen dargestellt werden. Das ist für mich allerdings nicht so wichtig, deshalb habe ich sie wieder entfernt.

Ich hätte aber noch eine Frage zur Darstellung der Daten. Und zwar, wäre es vielleicht möglich die Dezimalstellen der Daten / Zahlen statt Komma mit einem Punkt zu trennen, also z.B. statt 6,7 eine 6.7
Ich kenne zwar die Einstellung (unter Extras -> Optionen->International->Dazimaltrennzeichen), um die Trennzeichen zu definieren, aber es wäre doch angenehmer, diese Umwandlung mit einem Makro zu machen, falls es überhaupt geht. Wie gesagt, muss aber nicht unbedingt sein.


Falls jemand eine Idee hat, wäre ich für die Hilfe sehr dankbar.

Gruß
Alex

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: