Eine Art Transponieren
Betrifft: Eine Art Transponieren
von: Markus
Geschrieben am: 06.08.2014 07:57:49
Hallo
in Tabelle1 sind 400 Mitglieder aufgeführt.
Spalten A bis L (12 Spalten).
Nicht alle Spalten-Felder sind gefüllt (Mail, Handy, Beruf etc.)
Nun soll ein Makro folgendes machen.
Übernehmen aller gefüllten Felder (ohne Blank) und in Tabelle2 einspaltig (Spalte A) schreiben.
Bei ca 400 Mitgliedern und 12 Spalten sollten also in Tabelle2 die Felder von A1 bis ca A47000 stehen.
Danke für einen Tipp oder Hilfe.
Markus
Betrifft: nachgefragt ...
von: neopa C (paneo)
Geschrieben am: 06.08.2014 08:09:49
Hallo Markus,
... das sieht nach einer einmaligen Aktion aus. Das lies sich auch mit nur einer (MATRIX-)Formel bewerkstelligen.
Wie soll denn zusammen gefaßt werden? Erst alle Daten aus einer Spalte, dann die der nächsten Spalte oder erst die Daten aus Zeile1, dann aus Zeile 2 etc. Allerdings ist mir momentan auch unklar, welchen Sinn die Aktion hat, denn es gibt ja anschließend keine wirklich offensichtliche Struktur mehr zu erkennen.
Gruß Werner
.. , - ...
Betrifft: AW: nachgefragt ...
von: Markus
Geschrieben am: 06.08.2014 08:16:28
Hallo Werner
von A1 bis L1 durchlesen,
dann A2 ....
In Tabelle2 müsste stehen:
A1: A1 aus Tabelle1
A2: B1 aus Tabelle1
A3: D1 aus Tabelle1 (C1 aus Tabelle1 ist LEER)
Markus
Betrifft: nachgefragt ...
von: Matthias L
Geschrieben am: 06.08.2014 08:12:31
Hallo Markus
Zeig doch mal eine Bsp.Datei mit den 2 Tabellen
Dort zeigst Du mal händisch anhand von 3-4 Mitgliedern
wie Du Dir das Ergebnis vorstellst.
Ich bin mir nicht sicher wie Deine Quelle aussieht und das Ziel dargestellt werden soll.
Evtl. sieht die Quelle so aus?
Tabelle1
| A | B | C | D | E | F | G | H | I | J | K | L |
1 | Name | Mail | Handy | Beruf | . . . | . . . | . . . | . . . | . . . | . . . | . . . | . . . |
2 | Name1 | | | | | | | | | | | |
3 | Name2 | | | | | | | | | | | |
4 | Name3 | | | | | | | | | | | |
5 | Name4 | | | | | | | | | | | |
6 | Name5 | | | | | | | | | | | |
7 | Name6 | | | | | | | | | | | |
8 | Name7 | | | | | | | | | | | |
9 | Name8 | | | | | | | | | | | |
10 | Name9 | | | | | | | | | | | |
11 | Name10 | | | | | | | | | | | |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Matthias
Betrifft: AW: Eine Art Transponieren
von: Markus
Geschrieben am: 06.08.2014 08:23:19
Hallo
hier der LINK:
https://www.herber.de/bbs/user/91923.xlsx
(siehe Tabelle1 und Tabelle2)
Danke
Markus
Betrifft: Eine Art Transponieren
von: Matthias L
Geschrieben am: 06.08.2014 08:37:15
Hallo Markus
hier eine Variante
Option Explicit
Sub Transp()
Dim WksQ As Worksheet 'Quelle
Dim WksZ As Worksheet 'Ziel
Dim Rng As Range, lfv&
lfv = 1
Set WksQ = Tabelle1
Set WksZ = Tabelle2
For Each Rng In WksQ.UsedRange
If Rng.Row > 1 Then
If Rng.Value <> "" Then
WksZ.Cells(lfv, 1) = Rng.Value
lfv = lfv + 1
If Rng.Column = 12 Then lfv = lfv + 1
End If
End If
Next
End Sub
Gruß Matthias
Betrifft: AW: Eine Art Transponieren
von: Markus
Geschrieben am: 06.08.2014 13:54:47
Hallo Matthias
besten Dank - eigentlich Super aber ..
Das Makro soll wirklich nur die ersten 12 Spalten abarbeiten.
Aber der 13 Spalte sind teilweise noch Formeln in der Tabelle die nicht in Tabelle2 eingefügt werden müssen.
Kann man das noch ändern?
Danke
Markus
Betrifft: der Vollständigkeithalber hier die Formel ...
von: neopa C (paneo)
Geschrieben am: 06.08.2014 08:44:39
Hallo Markus,
... allerdings interessiert mich immer noch, für was das gut sein soll.
Formel entsprechend weit nach unten kopieren:
| A |
1 | Meier |
2 | Markus |
3 | Seldwyla 17 |
4 | 8000 Zürich |
5 | 044 123 456 77 |
6 | 044 123 44 88 |
7 | 052 320 55 66 |
8 | hans@mail.ch |
9 | www.grosshandel.ch |
10 | 59 |
11 | D1485 |
12 | Abegg |
13 | Fritz |
14 | Dorf 18 |
15 | 9000 St. Gallen |
16 | 052 333 44 44 |
17 | 079 441 85 67 |
18 | fritz@abegg.ch |
19 | 62 |
20 | K13856 |
21 | |
Formeln der Tabelle |
Zelle | Formel | A1 | {=WENN(ZEILE(C1)>ANZAHL2(Tabelle1!A$2:L$500); "";INDEX(Tabelle1!A:L;KKLEINSTE((Tabelle1!A$2:L$500="")*10^9+ZEILE($2:$500)*1000+SPALTE(A:L); ZEILE(C1))/1000;REST(KKLEINSTE((Tabelle1!A$2:L$500="")*10^9+ZEILE($2:$500)*1000+SPALTE(A:L); ZEILE(C1)); 1000)))} |
|
Enthält Matrixformel: Umrandende { } nicht miteingeben, sondern Formel mit STRG+SHIFT+RETURN abschließen! |
| A | B | C | D | E | F | G | H | I | J | K | L |
1 | Anrede | Name Vorname | Strasse | PLZ Ort | Telefon | Handy | Geschäft | Fax | Mail | Homepage | Alter | Code |
2 | Meier | Markus | Seldwyla 17 | 8000 Zürich | 044 123 456 77 | | 044 123 44 88 | 052 320 55 66 | hans@mail.ch | www.grosshandel.ch | 59 | D1485 |
3 | Abegg | Fritz | Dorf 18 | 9000 St. Gallen | 052 333 44 44 | 079 441 85 67 | | | fritz@abegg.ch | | 62 | K13856 |
4 | | | | | | | | | | | | |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...
Betrifft: AW: der Vollständigkeithalber hier die Formel ...
von: Markus
Geschrieben am: 06.08.2014 10:06:20
Hallo Werner
ganz einfach!
Nach dem Kopieren werde ich die Daten nach Word kopieren für ein Mitglieder-Verzeichnis.
Dieses möchten wir nicht tabellarisch, sondern als Absatz ausdrucken.
Hier ein Muster das mir besonders gut gefällt.
http://www.svit.ch/fileadmin/user_upload/SEK/Verzeichnis_der_SEK-Mitglieder_17.07.2014.pdf
Seite 7 folgende
Markus
Betrifft: AW: Eine Art Transponieren
von: Rudi Maintaire
Geschrieben am: 06.08.2014 16:47:02
Hallo,
eine Möglichkeit:
Sub aaa()
Dim arrIn, i As Long, j As Long, n As Long
With Sheets("Tabelle1")
arrIn = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 12)
ReDim arrOut(1 To WorksheetFunction.CountA(.Range("A:L")), 1 To 1)
End With
For i = 1 To UBound(arrIn)
For j = 1 To UBound(arrIn, 2)
If arrIn(i, j) <> "" Then
n = n + 1
arrOut(n, 1) = arrIn(i, j)
End If
Next j
Next i
Sheets("tabelle2").Cells(1, 1).Resize(UBound(arrOut)) = arrOut
End Sub
Gruß
Rudi
Betrifft: und wenn du noch ...
von: Rudi Maintaire
Geschrieben am: 06.08.2014 16:58:40
Hallo,
...eine Leerzeile nach jedem Datensatz haben willst:
Sub aaa()
Dim arrIn, i As Long, j As Long, n As Long
With Sheets("Tabelle1")
arrIn = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 12)
ReDim arrOut(1 To WorksheetFunction.CountA(.Range("A:L")) + UBound(arrIn) - 1, 1 To 1)
End With
For i = 1 To UBound(arrIn)
For j = 1 To UBound(arrIn, 2)
If arrIn(i, j) <> "" Then
n = n + 1
arrOut(n, 1) = arrIn(i, j)
End If
Next j
n = n + 1
Next i
With Sheets("tabelle2")
.Columns(1).Clear
.Cells(1, 1).Resize(UBound(arrOut)) = arrOut
End With
End Sub
die Felder von A1 bis ca A47000 stehen
Wie kommst du eigentlich bei 400 x 12 auf ca. 47000?
Gruß
Rudi