ich muss aus Daten einer Excel Tabelle so eine Art Serienbrief in Excel
machen.
Ich habe eine Excel Tabelle wo pro Person mehrere Zeilen (unterschiedlich
viele) vorhanden sind.
Ich habe in der Excel-Tabelle folgende Einträge: z. B.
Id._Nr. Bezeichnung Betrag Name Gesamtbetrag
880 ABC 04001 40,00 Keller
880 xxdxx 30,00 Keller
880 ddddd 23,00 Keller 93,00
220 hhhh 20,00 Zimmer
220 aaa 40,00 Zimmer
220 bbbb 30,00 Zimmer
220 jjjj 50,00 Zimmer 120,00
111 kkkkk 20,00 Rudolph 20,00
Ich frage mich ob ich für jede Person die Daten irgendwie pro Id diese
automatisch in ein extra Arbeitsblatt übernehmen bzw. kopieren kann. Die
einzelnen Zeilen müssten dann untereinander stehen.
Muß ich den einzelnen Bereichen (pro Id) z. B. Namen geben?
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Es wäre toll, wenn mir jemand hier einen Tipp geben könnte.
Vielen Dank für Eure Hilfe.
Viele Grüße
Marita
wenn du die Daten nach ID Nr. aufteilen möchtest
dann versuchs mal so,
hier wird die Tabelle nach ID Nr. sortiert und
für jede ID Nr jeweils ein Blatt angelegt und die Daten
dorthin kopiert solange A2 nicht leer ist
'---------------------------
Sub Daten_aufteilen()
Dim Ws As String
Dim Lz As Long
With ActiveSheet
Columns("A:A").SpecialCells(xlCellTypeBlanks). _
EntireRow.Delete
Do While .Range("A2").Value <> ""
Ws = .Name
.UsedRange.AutoFilter Field:=1, _
Criteria1:=.Range("A2").Value
Lz = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A1:IV" & Lz).Copy
Worksheets.Add after:=Worksheets(Ws)
Sheets(2).Name = .Range("A2").Value
Worksheets(.Range("A2").Value).Paste
Application.CutCopyMode = False
Worksheets(Ws).Activate
.Rows("2:" & Lz).Delete
.Range("A1").AutoFilter
Loop
End With
End Sub
'----------------------------
mfg Herbert
du mußt deine Systemzeit ändern
die geht um einige Stunden falsch
mfg Herbert
Habe ich gemacht, ich hoffe es stimmt jetzt, ist irgendwie ein Suse Linux
9.0 Problem, das die Systemzeit immer wieder falsch geht.
Viele Grüße
Marita
On Wed, 09 Mar 2005 23:03:44 +0100, Herbert Taferner wrote:
> Hallo Martina,
übrigens heiße ich Marita ;-)
>
> wenn du die Daten nach ID Nr. aufteilen möchtest
> dann versuchs mal so,
>
> hier wird die Tabelle nach ID Nr. sortiert und
> für jede ID Nr jeweils ein Blatt angelegt und die Daten
> dorthin kopiert solange A2 nicht leer ist
>
Meine Excel-Liste ist schon nach Id-Nr. sortiert.
vielen Dank für Dein Posting und Dein VBA-Skript.
Ich habe dazu nur noch einige Fragen, da ich mit VBA noch nicht viel
gemacht habe.
Wie und wo muss ich dieses Skript abspeichern?
In dem nächsten leeren Tabellenblatt? Und an welcher Stelle dort?
Ich habe heute versucht, in Excel über den Visual-Basic-Editor dein Skript
hinein zu kopieren, aber da hat er nur ein anderes Visual-Basic-Skript
angezeigt. Und ich konnte nichts finden dass ich ein neues leeres Blatt
vor mir gehabt hätte. Dann bin ich unter Extras-> Daten-> Makro gegangen
und habe da zwar Dein Skript reinkopieren können aber es wurde dann als
.xls-Datei abgespeichert. Ich habe es zwar noch abgeändert auf .xla aber
das .xls wurde trotzdem noch hinten angefügt. Welche Endung muss dieses
Skript denn haben? Und wie bekomme ich das hin, bzw. was habe ich
vermutlich falsch gemacht.
Irgendwo habe ich auch was mit der Endung .bas gesehen.
Was ist jetzt der Unterschied zwischen beiden?
Wir arbeiten im Geschäft mit Office 2002 und Windows XP.
Gäbe es eigentlich auch die Möglichkeiten die Texte in den einzelnen
Spalten in ein Word-Dokument mit Tabelle zu kopieren.
In Word hätte man es halt leichter mit dem Serienbrief.
Es muss ja in jeden einzelnen Brief noch die Adresse und sonstiger Text
rein.
Meine Excel Tabelle hat im Querformat 60 Seiten und es sind ca. 300
verschiedene Personen (Id.-Nr.)dort drin. Und für jeden dieser ca. 300
Personen muss ein extra Brief oder sonstwie ausdruckbares Dokument
erstellt werden und das möglichst schnell, wie immer :-(.
Nur um die Dimension ein wenig zu verstehen.
Danke für Deine Hilfe.
Viele Grüße
Marita
>
> übrigens heiße ich Marita ;-)
das ist mir jetzt peinlich aber ich gelobe Besserung
nun zu deinem Problem
als erstes würde ich zum testen eine Kopie der Datendatei anlegen
wenn die Tabelle mit der Auflistung der Daten aktiv ist dann
klicke mit der rechten Taste auf den Tabellenreiter links unten
und wähle Code anzeigen im nun erscheinenden Fenster
fügst du den kopierten Code ein und drückst die Taste F5
dann wird das Makro ausgeführt
für den späteren Gebrauch mußt du dann entweder eine
Tastenkombination oder einen Button in die Tabelle einfügen
das ist aber nicht das Problem schau erst mal ob es grundsätzlich
einmal dem entspricht was du dir vorstellst mit der Aufteilung
der Daten
siehe hier eine kleine Anleitung
http://www.online-excel.de/excel/singsel_vba.php?f=44
mfg Herbert
vielen Dank für Dein Posting.
On Thu, 10 Mar 2005 21:05:54 +0100, Herbert Taferner wrote:
> Hallo Marita,
>
>>
>> übrigens heiße ich Marita ;-)
>
> das ist mir jetzt peinlich aber ich gelobe Besserung
Ist nicht so schlimm, ich bin in der Hinsicht allerhand gewöhnt, es gab
auch schon mal den Fall, dass aus meinen Namen Martin wurde ;-)
>
> nun zu deinem Problem
>
> als erstes würde ich zum testen eine Kopie der Datendatei anlegen
Da hast Du sicher recht.
>
> wenn die Tabelle mit der Auflistung der Daten aktiv ist dann
> klicke mit der rechten Taste auf den Tabellenreiter links unten
> und wähle Code anzeigen im nun erscheinenden Fenster
> fügst du den kopierten Code ein und drückst die Taste F5
> dann wird das Makro ausgeführt
Vielen Dank für Deine Erklärung.
Eine Frage hätte ich noch.
Wie kann ich bestimmen, wo welche Daten aus einer bestimmten Spalte
landen.
Ich habe da noch folgendes Problem dabei.
In meiner Ursprungstabelle habe ich momentan 5 sichtbare Spalten. (Es gibt
aber auch noch ausgeblendete Spalten)
In der ersten Spalte das Datum, in der zweiten Spalte die Id, In der
dritten Spalte ist die Bezeichnung(wobei dies ein verkettes Feld ist,
von zwei Spalten die ich ausgeblendet
habe, ich hoffe das macht keine Probleme).
In der vierten Spalte ist der Name und in der fünften Spalte sind die
Einzelbeträge und in der sechsten Spalte ist beim letzten Datensatz der Id
die Gesamtsumme.
Ich brauche dann in den anderen Arbeitsblättern, die Spalte Zwei und Vier
nicht. Wie kann ich das machen? Soll ich diese Spalten in der
Ursprungstabelle ausblenden? Werden diese dann nicht mitkopiert?
Oder dann in den einzelnen Arbeitsblättern?
Soll ich die zwei Spalten hintereinander anordnen und den Bereich den ich
brauche einen Namen geben. Würde das helfen?
Außerdem brauche ich in den einzelnen Arbeitsblättern immer die Rahmen um
die Tabelle angezeigt. Kann man das auch irgendwie automatisieren?
>
> für den späteren Gebrauch mußt du dann entweder eine
> Tastenkombination oder einen Button in die Tabelle einfügen
> das ist aber nicht das Problem schau erst mal ob es grundsätzlich
> einmal dem entspricht was du dir vorstellst mit der Aufteilung
> der Daten
>
> siehe hier eine kleine Anleitung
> http://www.online-excel.de/excel/singsel_vba.php?f=44
Ich danke Dir ganz herzlich für die Anleitung. Ich hatte zwar erst die
Zeit diese kurz zu überfliegen, aber ich denke sie hilft mir schon ganz
schön weiter.
Es wäre toll, wenn Du mir zu oben genannten Problem noch ein paar
Erläuterungen geben könntest.
Vielen Dank für Deine Bemühungen.
Viele Grüße
Marita
>
> vielen Dank für Dein Posting.
>
Bitte gern !
>
> Wie kann ich bestimmen, wo welche Daten aus einer bestimmten Spalte
> landen.
>
das geht auch aber so wie es jetzt aufgebaut ist
werden die Daten Zeilenweise übertragen
> Ich habe da noch folgendes Problem dabei.
>
> In meiner Ursprungstabelle habe ich momentan 5 sichtbare Spalten. (Es gibt
> aber auch noch ausgeblendete Spalten)
>
> In der ersten Spalte das Datum, in der zweiten Spalte die Id, In der
> dritten Spalte ist die Bezeichnung(wobei dies ein verkettes Feld ist,
> von zwei Spalten die ich ausgeblendet
> habe, ich hoffe das macht keine Probleme).
> In der vierten Spalte ist der Name und in der fünften Spalte sind die
> Einzelbeträge und in der sechsten Spalte ist beim letzten Datensatz der Id
> die Gesamtsumme.
>
> Ich brauche dann in den anderen Arbeitsblättern, die Spalte Zwei und Vier
> nicht. Wie kann ich das machen? Soll ich diese Spalten in der
> Ursprungstabelle ausblenden? Werden diese dann nicht mitkopiert?
>
es wird die ganze Zeile Kopiert das ist egal ob was ausgeblendet ist
im gegenteil dort wo die Zeilen eingefügt werden sind alle Spalten sichtbar
aber du könntest ja schon vorher beim aktivieren der Blätter die
entsprechenden Spalten ausblenden
z. B. etwa so
Private Sub Workbook_SheetActivate _
(ByVal Sh As Object)
If ActiveSheet.Name <> "Tabelle1" Then
Range("B:B", "D:D").Columns.Hidden = True
End If
End Sub
> Oder dann in den einzelnen Arbeitsblättern?
>
> Soll ich die zwei Spalten hintereinander anordnen und den Bereich den ich
> brauche einen Namen geben. Würde das helfen?
>
> Außerdem brauche ich in den einzelnen Arbeitsblättern immer die Rahmen um
> die Tabelle angezeigt. Kann man das auch irgendwie automatisieren?
ja das geht auch, da mußt du nach dem übertragen im jeweiligen Blatt
den benutzten Bereich abfragen und da den Rahmen drum machen
> Es wäre toll, wenn Du mir zu oben genannten Problem noch ein paar
> Erläuterungen geben könntest.
>
ich hoffe es hilft dir ein wenig weiter, an sonsten kannst
du mir ja mal eine Testmappe senden mit provisorischen Daten
und ein Blatt so erstellen wie das Ergebnis aussehen soll
dann sehe ich mir das mal an ( Mailadresse ohne SPAM )
> Vielen Dank für Deine Bemühungen.
Bitte gern !
mfg Herbert
Herbert Taferner schrieb:
ein kleiner Hinweis:
> Private Sub Workbook_SheetActivate _
> (ByVal Sh As Object)
> If ActiveSheet.Name <> "Tabelle1" Then
> Range("B:B", "D:D").Columns.Hidden = True
> End If
> End Sub
Nutze die übergebe Variable 'Sh' des aufgerufenen Ereignises,
damit wird das aktivierte Blatt angesprochen und ebenso der Range auf demselben.
Private Sub Workbook_SheetActivate (ByVal Sh As Object)
If Sh.Name <> "Tabelle1" Then
Sh.Range("B:B", "D:D").Columns.Hidden = True
End If
End Sub
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
>
> ein kleiner Hinweis:
>
> Nutze die übergebe Variable 'Sh' des aufgerufenen Ereignises,
> damit wird das aktivierte Blatt angesprochen und ebenso der Range auf
> demselben.
>
> Private Sub Workbook_SheetActivate (ByVal Sh As Object)
> If Sh.Name <> "Tabelle1" Then
> Sh.Range("B:B", "D:D").Columns.Hidden = True
> End If
> End Sub
>
Danke !
wie immer kurz und schmerzlos
mfg Herbert