![Wie teile ich eine Zahl in einer einzelnen Zelle ohne Kommas auf und füge sie in mehrere Zeilen ein?](https://rvso.com/image/1452247/Wie%20teile%20ich%20eine%20Zahl%20in%20einer%20einzelnen%20Zelle%20ohne%20Kommas%20auf%20und%20f%C3%BCge%20sie%20in%20mehrere%20Zeilen%20ein%3F.png)
Ich möchte also Folgendes tun: Ich habe eine Tabelle mit einer Zelle, die eine Zahlenfolge enthält (einige sind länger als andere). Ich muss alle acht Zahlen extrahieren und in einzelne Zeilen einfügen.
So sieht die aktuelle Tabelle aus:
IFIELD1 IFIELD2 IFIELD3 IFIELD4 IMAGELIST
05/30/2009 ERMS 100 Day L. C. 0000001200000013
05/30/2009 ESE 20 Day J. R. 0000001400000015
05/30/2009 IHS 100 Day H. W. 00000016
05/30/2009 LMS 100 Day D. E. 0000001700000018
Das hier ist, was ich suche:
IFIELD1 IFIELD2 IFIELD3 IFIELD4 IMAGELIST
05/30/2009 ERMS 100 Day L. C. 00000012
05/30/2009 ERMS 100 Day L. C. 00000013
05/30/2009 ESE 20 Day J. R. 00000014
05/30/2009 ESE 20 Day J. R. 00000015
05/30/2009 IHS 100 Day H. W. 00000016
05/30/2009 LMS 100 Day D. E. 00000017
05/30/2009 LMS 100 Day D. E. 00000018
Einige Zahlensätze bestehen aus bis zu 30 oder mehr 8er-Gruppen in einer Zeile. Dabei müssen über 1000 Datenzeilen getrennt werden. Gibt es irgendeinen Code, der diesen Vorgang weniger entmutigend macht? Ich verwende derzeit Links, Mitte und Rechts, aber ich werde Jahre brauchen, um damit fertig zu werden. Die Arbeitsblätter werden aus Access entfernt. Wenn es also eine einfachere Möglichkeit gibt, sie dort auszufüllen, bin ich für Vorschläge offen. Das Endprodukt muss in einer CSV-Datei gespeichert werden. Außerdem muss ich alle 8 Ziffern im fertigen Produkt behalten, bevor ich es als CSV-Datei speichere, damit ich den Link zum Speicherort des Bildes erstellen kann. Vielen Dank für Ihre Hilfe!
Antwort1
In Access gibt es eine recht einfache Lösung.
- Erstellen Sie eine Tabelle, die nichts anderes als eine Liste von Zahlen ist:
1, 2, 3, 4, ... n
wobein
die größte Anzahl von Elementen ist, die jemals in Ihrer Tabelle enthalten sein würdeIMAGELIST
. Es ist jedoch nicht sehr aufwendig, die Tabelle größer als nötig zu machen, also erhöhen Sie sie auf 50 oder so. - Erstellen Sie eine Abfrage, die Ihre Originaltabelle und die Zahlentabelle einbeziehtohne FugenWenn Sie dies
SELECT *
jetzt tun würden, würden Sien
Kopien aller Datensätze in Ihrer Originaltabelle erhalten. - Anstatt das
IMAGELIST
Feld einzufügen, fügen Sie eine Formel hinzu, die dieMID
FunktionIMAGELIST
basierend auf dem Wert aus Ihrer Zahlentabelle für das Feld ausführt. - Filtern Sie, um nur Datensätze anzuzeigen, bei denen die Formel keine leere Zeichenfolge zurückgibt. Dies bedeutet, dass ein Datensatz mit
IMAGELIST
24 Zeichen nur dreimal angezeigt wird, anstattn
mit einer Reihe von leeren Datensätzen.
Hier ist das SQL für diese Abfrage:
SELECT Table1.ID, Table1.IFIELD1, Table1.IFIELD2, Table1.IFIELD3, Table1.IFIELD4, Table2.Number, Mid([IMAGELIST],([Number]-1)*8+1,8) AS ImageListParse
FROM Table1, Table2
WHERE Mid([IMAGELIST],([Number]-1)*8+1,8)<>""
ORDER BY Table1.ID, Table2.Number;
In meinem schnellen Modell Table1
ist Ihre Originaltabelle Table2
die Zahlentabelle , Number
das einzige Feld darin Table2
und es sind nur die Zahlen 1-n, und ich habe das Autonummerierungsfeld ID
nur Table1
zum Sortieren hinzugefügt.
Dabei wird davon ausgegangen, dass jedes Element IMAGELIST
genau 8 Zeichen lang ist. Bei unterschiedlicher Länge funktioniert dieser Ansatz nicht.
Antwort2
Mit den Excel-Arbeitsblattfunktionen ist das nicht allzu schwer. Nehmen wir an, Ihre Daten sind Sheet1
mit Überschriften in Zeile 1 versehen. Erstellen Sie Sheet2
. Füllen Sie es wie folgt aus:
A1
→=Sheet1!A1
- und ziehen Sie nach rechts, um alle Spalten abzudecken (also durch Column
E
, basierend auf Ihrem Beispiel mit fünf Spalten), - oder kopieren Sie einfach die Header von
Sheet1
nachSheet2
.
- und ziehen Sie nach rechts, um alle Spalten abzudecken (also durch Column
A2
→=OFFSET(Sheet1!A$1, $F2-1, 0)
- und ziehen Sie nach rechts, um alle Spalten abzudeckenausser für
IMAGELIST
(d. h. durch SpalteD
). - Irgendwann möchten Sie die
Sheet2
Spalten (also die Spalten, die Datumsangaben enthalten) richtig formatieren.
- und ziehen Sie nach rechts, um alle Spalten abzudeckenausser für
E2
→=LEFT($G2, 8)
F2
→2
G2
→=OFFSET(Sheet1!E$1, $F2-1, 0)
- (Dies ist dasselbe wie die Formeln in Spalten
A
-D
, außer dassSheet1
auf Spalte verwiesen wirdE
.)
- (Dies ist dasselbe wie die Formeln in Spalten
H2
→=RIGHT($G2, LEN($G2)-8)
Ziehen/füllen Sie Zeile 2 in Zeile 3. Ändern Sie dann
F3
zu=IF(H2<>"", F2, F2+1)
undG3
Zu=IF(H2<>"", H2, OFFSET(Sheet1!E$1, $F3-1, 0))
Ziehen/füllen Sie nun Zeile 3 nach unten, um so viele Zeilen wie nötig einzufügen, um alle Daten daraus zu erhalten Sheet1
:
Kopieren und fügen Sie dann Werte und Formate ein.
Erläuterung:
- Spalte
F
gibt an, welche Zeile aufSheet1
DasZeile (aufSheet2
) zieht Daten aus. - Jedes Mal, wenn wir zu einer neuen
Sheet1
Zeile vorrücken (also jedes Mal, wenn ColumnF
zunimmt), erhält ColumnG
eine vollständige, 8×N-stelligerIMAGELIST
Wert vonSheet1
. - Der Wert in der Spalte
G
wird aufgeteilt: die ersten acht Ziffern in die SpalteE
und der Rest in die SpalteH
. - Solange wir einen nicht leeren Rest in Spalte haben
H
, kopieren wir ihn in SpalteG
und lassen SpalteF
unverändert (d. h., wir greifen auf dieselbe Zeile zuSheet1
). - Wenn uns die Daten in Spalte ausgehen
H
, bedeutet das, dass wir ein 8×N-stelligerIMAGELIST
Wert vonSheet1
inNZeilen einSheet2
, also erhöhen wir die SpalteF
und holen den nächstenIMAGELIST
Wert.
Antwort3
Um Ihr Ziel zu erreichen, müssen Sie zwei Schritte ausführen:
1 Teilen Sie die Zahlen in verschiedene Spalten auf, z. B. in Excel 2010: Daten – Text in Spalten – feste Breite – Breite auf 8 festlegen und dann auf „Fertig“ klicken.
2 Der zweite Schritt besteht darin, Ihre Daten zu entpivotieren. Leider ist das nicht einfach, aber es gibt im Internet viele Lösungen, wie diese:Ist es möglich, in Excel eine „Aufhebung der Pivotierung“ oder eine „Umkehrung der Pivotierung“ durchzuführen?