Ich habe automatisch erzeugte Inventurdaten, die ich bereits
in eine Excel-Tabelle übernommen habe. Jede Zeile beginnt mit
der Inventarnummer des PCs, dann folgt die
Betriebssystemversion und dann (unsortiert) die auf diesem PC
installierten Anwendungen.
In dieser Form kann ich aber mit den Daten nicht viel
anfangen. Es sollen daraus später mal z.B. Statistiken gezogen
werden („auf wieviel PC’s läuft noch Office95?“). Dazu müsste
aber z.B. der Eintrag „Office95“ bei allen Zeilen an der
selben Position stehen. Tut er aber natürlich nicht.
Mein Traum wäre eigentlich eine Tabelle, in der ganz links die
Inv.Nummer steht, als Spaltenüberschriften alle
Betriebssysteme und Anwendungen und in den Feldern nur noch
boolsche Werte…
Servus Stefan
Mit ein paar Programmier-, Excel-, VBA- und Makro-Kenntnissen ist diese Aufgabe durchaus auch in Excel zu lösen.
Ich habe folgendes Makro gestrickt (und getestet), das die von die gewünschte Aufgabe erledigen sollte:
Sub SoftwareSort()
Dim Spalte As Integer, i1 As Integer, i2 As Integer, i3 As Integer, tzp As Integer, tzs As Integer, swlen As Integer
Dim software As String, sw As String
Dim sw\_neu As Boolean
Dim alles
Const tab1 = "Tabelle1" ' Name der 1. Tabelle (die alle Daten unsortiert enthält)
Const tab2 = "Tabelle2" ' Name der 2. Tabelle (in die die sortieren Daten geschrieben werden sollen)
Const tz = ", " ' Trennzeichen zwischen den Softwareeinträgen
' Inhalt der 2. Tabelle löschen
Sheets(tab2).Select
Cells.Select
Cells.EntireColumn.Delete
' Überschrift kopieren
Sheets(tab1).Select
Range("A1:B1").Select
Selection.Copy
Sheets(tab2).Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets(tab1).Select
Spalte = 3
' Bereich ermitteln
alles = ActiveSheet.UsedRange
' ganzen Bereich (exkl. Überschrift) abarbeiten
For i1 = 2 To UBound(alles, 1)
' Inventarnummer und Betriebssystem kopieren
Sheets(tab1).Select
Range(Cells(i1, 1), Cells(i1, 2)).Select
software = Cells(i1, 3)
Selection.Copy
Sheets(tab2).Select
Cells(i1, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
' Software-String auflösen
tzp = 1
tzs = 1
swlen = Len(software)
' Trennzeichen in Software-String suchen
Do While tzp \> 0 And tzs 0 Then ' Trennzeichen gefunden
sw = Mid(software, tzs, tzp - tzs) ' einzelne Software extrahieren
GoSub swteil
tzs = tzp + Len(tz) ' nächste Teilstringanfangssuchposition
End If
Loop
' Softwareteilstring nach dem letzten Trennzeichen behandeln
If tzs neue Spalte
Cells(1, Spalte) = sw
Cells(i1, Spalte) = "X"
Spalte = Spalte + 1
End If
Return
End Sub
Die Tabelle mit dem von dir beschriebenen Aufbau wird gelesen und in eine neue Tabelle geschrieben, wobei die 1. beiden Spalten (Inventarnummer und Betriebssystem) 1:1 übernommen werden und dann pro Software-Eintrag eine Spalte erstellt wird mit einem „X“ in der entsprechenden Zeile.
Außerdem wird davon ausgegangen, dass eine Überschriftszeile vorhanden ist, deren erste beide Spalten ebenfalls 1:1 übernommen werden.
Die Namen der alten und der neuen Tabelle sowie das (oder die) Zeichen, durch die die einzelnen Software-Einträge getrennt sind, können im Makro bei den Konstanten definiert werden.
ACHTUNG:
Der Inhalt der 2. Tabelle wird am Anfang kommentarlos gelöscht!
Es wird nicht überprüft, ob die angegebenen Tabellennamen wirklich existieren.
Probier es einfach aus und falls du Probleme damit haben solltest, kannst du dich ja per E-Mail bei mir melden oder ins Forum schreiben.
MfG
Roland