Datenbankinhaltdatei in eine tabellarisch-auswertbare Form konvertieren

...komplette Frage anzeigen

5 Antworten

Hier ein Code für dich.

Als erstes musst du deinen "Text" in eine neue Excel-Tabelle1 einfügen.

Dann machst du mit Alt F11 den Code-Editor auf.

Dort gehst Du links in de Projektliste auf Diese Arbeitsmappe

Rechtsklick, Einfügen, Modul

In diese Modul kopierst du den unten stehenden Code

Dann F5 drücken. Danach hast du eine Tabelle2 mit den Werten.

Nicht benötigte Spalten kannst du dann noch löschen und die Tabelle formatieren (zentriert, Rahmen,...)

Wenn du noch Fragen hast, setz doch eine einMal-Wegwerf-Mailadresse hier in einen Kommentar und wir können dann direkt schreiben.

Nun der Code:

Sub InZellen()
Dim LastRow As Long
Dim FirstKeyRow As Long
Dim LastKeyRow As Long
Dim I As Long
Dim J As Long
Dim CheckString As String
Dim str_Atext As String
Dim WriteRow As Long

WriteRow = 1

'Letzte benutzte Zeile ermitteln
LastRow = Sheets("Tabelle1").UsedRange.Rows.Count 'End-Spalte

'Anzahl der Keys ermitteln
For I = 1 To LastRow
    If Sheets("Tabelle1").Cells(I, 1) = "clear;" Then
        FirstKeyRow = I + 1
    End If
    If Sheets("Tabelle1").Cells(I, 1) = "write;" Then
        LastKeyRow = I - 1
        I = LastRow + 1
    End If
Next I

'Keys einzeln ermitteln und als Überschriften setzen
For I = FirstKeyRow To LastKeyRow
    Sheets("Tabelle2").Cells(1, 1) = "Nr."
    CheckString = Sheets("Tabelle1").Cells(I, 1)
    If InStr(1, CheckString, "=", vbTextCompare) > 0 Then
        str_Atext = Mid(CheckString, 2, InStr(CheckString, "=") - 2)
'        MsgBox str_Atext
        Sheets("Tabelle2").Cells(1, I) = str_Atext
    End If
Next I

'jetzt die Werte übertragen
For I = 1 To LastRow
    'mit jedem clear beginnt eine neue Wertereihe
    If Sheets("Tabelle1").Cells(I, 1) = "clear;" Then
        'Die Schreibzeile festlegen und in A eintragen
        WriteRow = WriteRow + 1
        Sheets("Tabelle2").Cells(WriteRow, 1) = Format(WriteRow - 1, "000")
        'die einzelnen Werte ermitteln
        For J = 1 To LastKeyRow - FirstKeyRow + 1
            CheckString = Sheets("Tabelle1").Cells(I + J, 1)
            'Key abschneiden
            If InStr(1, CheckString, "=", vbTextCompare) > 0 Then
                str_Atext = "'" & Mid(CheckString, InStr(CheckString, "=") _
                      + 1, Len(CheckString) - InStr(CheckString, "=") - 1)
                'in Tabelle 2 schreiben    "" & nötig, damit führendes ' sichtbar wird
                Sheets("Tabelle2").Cells(WriteRow, J + 1) = "" & str_Atext
            End If
        Next J
    End If
Next I
End Sub

Hoffe es hilft

Vielen dank PauleVBA, großartiger Code.

Hab mich da wohl zu tief in die Materie verstrickt sodass ich auf sowas genial-simples nicht selbst gekommen bin^^

Dein Code funktioniert, herzlichen dank dafür :)

Gruß

0

Was treibt ihr da für einen Aufwand?????

Das sieht mir doch ganz nach einem Text-Export aus einer Maschine aus.

Wir hatten das hier bei uns in der Firma mit einer Anlage eines goßen deutschen Unternehmens.

Die haben wir dann gebeten, den Text-Export nach unseren Vorgaben zu gestalten.

Anfangs wollten die nicht, aber wir drohten Öffentlichkeit herzustellen. Da ging es plötzlich.

Nun haben wir den Export als ASCII-Datei mit Tab getrennt und die lässt sich einfach in Excel einlesen.

@SIndianer:

Halt doch mal den Ball flach.

Die kleine Programmierung da unten hat mich ca. 60 min. gekostet. Bei uns im Betrieb würde man da für den Programmierer mit 50,- bis 80,- € rechnen.

Das ist doch kein Aufwand.

Wenn du dagegen den Herrsteller zu oft bittest, dir was anzupassen, kommt irgendwann der Zeitpunkt, wo er den Support verweigert und Neueinspielungen der Anlagen-Software nicht mehr möglich sind. Begründung: deine "Sonderwünsche" vertragen sich nicht mit der neuen Version.

Dann musst du die gesamte Software neu erwerben und das wird teuer.

Schlimmstes Beispiel war die Telekom. Die hatten ihr Favorit so oft den Bedürfnissen angepasst, das Updates nicht mehr liefen. Folge: Neukauf. Kosten geschätzt eine dicke 5-stellige Summe.

0

Hallo,

stehen die Werte in einer Tabelle (die mit Excel eingelesen werden könnte) oder ist das eine reine ASCII-Datei mit TAB-Trennern?

Gibt es bei jeder Gruppe nur 3 Keys?

Kommt nach jeder Gruppe immer nur eine Leerzeile (Nicht zwei und auch nicht keine)?

Hast du die erste Form schon mal als Excel eingelesen? Dann bitte einen Screenshot einstellen.

Unter Access wird das ganze schwierig, ich würde daher Excel nehmen, da kann man kontrollierter arbeiten. Weiteres dazu (auch Code) kann ich dir sagen, wenn die Fragen beantwortet sind.••Und von Excel dann zurück nach z.B. Access geht problemlos.

Schön, dass du dich wieder meldest.

sind es nun Text-Dateien (lassen sich mit dem Editor von Windows öffnen und haben keine Steuerzeichen, nur ASCII-Text bzw. erweiteretes ASCII) oder sind es kodierte Dateien? Es kommt nicht auf die Endung an, nur der Inhalt zählt.

Sieht deine Text-Datei so aus, wie oben?

Stell sie doch auch mal (als Code markieren!) ein.

Den Rest deiner Ausführungen verstehe ich leider nicht, da ich deine DB nicht kenne.

Aber wenn Text vorliegt (oder Excel-Datei) kann ich helfen.

Aber nur über Frage und Antwort im Board.

Freundschaftsanfragen habe ich seit Beginn meiner Mitgliedschaft grundsätzlich abgelehnt.

Das lieg am Terminus "Freund". Das ist für mich was reales, anfassbares. Internet ist virtuell und geht daher gar nicht. Sorry. Ist jedefalls nicht gegen dich gerichtet.

Hallöchen,

Zu deinen Fragen: Es sind Textdateien, lassen sich im Editor öffnen. Steuerzeichen sind nicht vorhanden, nur Trennzeichen.

Aber hier einmal ein Beispiel der umzuformatierenden Datei (auszug):

clear;
.CcId=1;
.CcName='MainCc';
.CcText='MainCc';
.CcDomain='MyProj.MainCc';
.CcComType=CcComTy_MS;
.CcComPart=1;
write;

clear;
.CcId=2;
.CcName='FaOvCc';
.CcText='FaOvCc';
.CcDomain='MyProj.FaOvCc';
.CcComType=CcComTy_MS;
.CcComPart=2;
write;

Das ganze müsste später genau so tabellarisch aussehen wie diese hier:

    --------------------------------------------------------------------------------
  NR. ||        CcId       |      CcName       |     CcText            | 
    --------------------------------------------------------------------------------
 0001 ||           1          |       'MainCc'       |'MainCc              '|
 0002 ||           2          |       'FaOvCc'       |'FaOvCc              '|

Anmerkung: In Excel zwar zu öffnen, jedoch stehen alle Inhalte in der Spalte A.

In diesem Beispiel habe ich nur CcId, CcName und CcText als Schlüssel (Key) gewählt.

Es geht eigentlich nur darum ersteres Auszug in eine tabellarische Form zu bringen wie im zweiten beispiel zu sehen. Den ganzen Zeichensalat ála " | " und " ' " bekomme ich selbst geregelt, aber zu dem Zuordnungsalgorithmus der aus Beispiel 1 ---> Beispiel 2 machen soll fällt mir immer noch nichts ein...

P.S. Wegen der Freundschaftsanfrage: Diese diente für mich eigentlich nur als privates Kommunikationsmittel weil ich sonst nicht wusste wie ich dir nochmal privat meine Entschuldigung nahe bringen konnte. Nichts für ungut ;)

0

Wieder mal typisch für viele Fragende in diesem Board.

Anfrage vergessen. Oder wie erklärt man es sonst:

Da versuche ich zu helfen, stelle Verständnisfragen und der Nutzer antwortet nicht.

Oder man hat sogar eine Hilfe eingestellt und bekommt weder ein Danke, noch die Rückmeldung, dass es funzt.

Die Sitten hier sind rau geworden.

Lieber PaulVBA,

bitte entschuldige meine verstpätete Antwort auf deiner Hilfestellung und danke erst einmal für selbige :)

Vergessen habe ich es nicht ;)

Nun zum Thema:

Die Daten werden aus Datenbanken generiert und verhalten sich wie Textdateien. In Excel einlesen geht, aber ohne großartig nennenswerte tabellarische Struktur...deswegen auch mein Anliegen hier im Board.

Was die Keys betrifft gibt es unterschiedliche viele, abhängig von der Datenbankdatei. Nach jedem Block gibt ein ein eindeutiges Indiz (in dem falle der Befehl "write") für ein Blockende, das ist also kein Problem. Die Keys fangen jeweils mit einem "dot" an, sprich ".KEY" (ohne Anführungszeichen). Darunter leider auch - für mich - nutzlose Keys -.-. Aber welche Keys benötigt werden lässt sich leicht per Abfrage herrausfinden. Nach Blockende gibt es immer einen Absatz.

Soweit erst einmal. Screenshot folgt.

0

Was möchtest Du wissen?