Daten einer Zelle auf mehrere aufteilen Automatisch.
#11
(10.11.2015, 18:28)Jockel schrieb: Hallo, hier wird auch daran gearbeitet..:  http://www.office-fragen.de/index.php/to...279.0.html ... ... zumindest hat der gute Detlef einen Vorschlag abgegegeben...
Je mehr dran arbeiten desto besser.
Ich glaube bei office-loesung.de habe ich das auch schon gesehen.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#12
Hallo Leute kleines update zu diesem Thema

Habe es jetzt mal mit deine Vorschlag gelöst über Power Query
Funktioniert nicht schlecht, nur ein kleiner nachteil besteht mit diese Funktion, 
wenn sich in der Tabelle was ändert werden die neuen Daten nicht übernommen.

mein derzeitiger Code: 
Code: [Auswählen]
Code:
let
    Quelle = Excel.Workbook(File.Contents("Z:\004_DETAIL_PHASE_2\Site Motor and MCC survey 1011-Final.xlsx"), null, true),
    #"MCC MOTOR SURVEY_Sheet" = Quelle{[Item="MCC MOTOR SURVEY",Kind="Sheet"]}[Data],
    #"Abgeschnittener Text eingefügt" = Table.AddColumn(#"MCC MOTOR SURVEY_Sheet", "Trim", each Text.Trim([Column6]), type text),
    #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Abgeschnittener Text eingefügt",{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Trim", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31"}),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Neu angeordnete Spalten",{{"Trim", "Columme6.1"}}),
    #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Umbenannte Spalten","Columme6.1",Splitter.SplitTextByDelimiter("//", QuoteStyle.Csv),{"Columme6.1.1", "Columme6.1.2", "Columme6.1.3", "Columme6.1.4", "Columme6.1.5", "Columme6.1.6", "Columme6.1.7", "Columme6.1.8", "Columme6.1.9"}),
    #"Geänderter Typ" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Columme6.1.1", type text}, {"Columme6.1.2", type text}, {"Columme6.1.3", type text}, {"Columme6.1.4", type text}, {"Columme6.1.5", type text}, {"Columme6.1.6", type text}, {"Columme6.1.7", type text}, {"Columme6.1.8", type text}, {"Columme6.1.9", type text}}),
    #"Ersetzter Wert" = Table.ReplaceValue(#"Geänderter Typ","Frame :","",Replacer.ReplaceText,{"Columme6.1.2"}),
    #"Ersetzter Wert1" = Table.ReplaceValue(#"Ersetzter Wert","Freq. :","",Replacer.ReplaceText,{"Columme6.1.3"}),
    #"Ersetzter Wert2" = Table.ReplaceValue(#"Ersetzter Wert1","RPM :","",Replacer.ReplaceText,{"Columme6.1.4"}),
    #"Ersetzter Wert3" = Table.ReplaceValue(#"Ersetzter Wert2","Volt. :","",Replacer.ReplaceText,{"Columme6.1.5"}),
    #"Ersetzter Wert4" = Table.ReplaceValue(#"Ersetzter Wert3","Rated Current :","",Replacer.ReplaceText,{"Columme6.1.6"}),
    #"Ersetzter Wert5" = Table.ReplaceValue(#"Ersetzter Wert4","Cos phi :","",Replacer.ReplaceText,{"Columme6.1.7"}),
    #"Ersetzter Wert6" = Table.ReplaceValue(#"Ersetzter Wert5","IP :","",Replacer.ReplaceText,{"Columme6.1.8"}),
    #"Ersetzter Wert7" = Table.ReplaceValue(#"Ersetzter Wert6","KW :","",Replacer.ReplaceText,{"Columme6.1.9"}),
    #"Bereinigter Text" = Table.TransformColumns(#"Ersetzter Wert7",{{"Columme6.1.1", Text.Clean}, {"Columme6.1.2", Text.Clean}, {"Columme6.1.3", Text.Clean}, {"Columme6.1.4", Text.Clean}, {"Columme6.1.5", Text.Clean}, {"Columme6.1.6", Text.Clean}, {"Columme6.1.7", Text.Clean}, {"Columme6.1.8", Text.Clean}, {"Columme6.1.9", Text.Clean}}),
    #"Ersetzter Wert8" = Table.ReplaceValue(#"Bereinigter Text","A","",Replacer.ReplaceText,{"Columme6.1.6"}),
    #"Abgeschnittener Text" = Table.TransformColumns(#"Ersetzter Wert8",{{"Columme6.1.2", Text.Trim}, {"Columme6.1.3", Text.Trim}, {"Columme6.1.4", Text.Trim}, {"Columme6.1.5", Text.Trim}, {"Columme6.1.1", Text.Trim}, {"Columme6.1.6", Text.Trim}, {"Columme6.1.7", Text.Trim}, {"Columme6.1.8", Text.Trim}, {"Columme6.1.9", Text.Trim}}),
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Abgeschnittener Text",{{"Columme6.1.3", type number}, {"Columme6.1.4", type number}, {"Columme6.1.5", type number}, {"Columme6.1.6", type number}, {"Columme6.1.7", type number}, {"Columme6.1.8", type number}, {"Columme6.1.9", type number}}),
    #"Zusammengeführte Spalten" = Table.CombineColumns(#"Geänderter Typ1",{"Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15"},Combiner.CombineTextByDelimiter("//", QuoteStyle.None),"test"),
    #"Entfernte Spalten" = Table.RemoveColumns(#"Zusammengeführte Spalten",{"test"})
in
    #"Entfernte Spalten"


Setzt mich heute am Abend mal mit einen alten Bekanten zusammen.
Ob man diesen Sonderabfall mit einen VBA Makro lösen kann.

MFG 

Christoph

selbst verständlich gibt es dann den  VBA Code hier wenn er funzt.
Top
#13
Zitat:Funktioniert nicht schlecht, nur ein kleiner nachteil besteht mit diese Funktion,
wenn sich in der Tabelle was ändert werden die neuen Daten nicht übernommen.
Das ist korrekt. Wie bei allen Datenverbindungen muss diese dann aktualisiert werden.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#14
Hallo Alle zusammen.

So hab mich gestern Abend mit einem Bekannten zusammen gesetzt um das Problem mit einen VBA Code zu Lösen.
Das funktioniert echt super.

Hier der VBA Code für die ihn brauchen könnten.

Code: [Auswählen]
Code:
' Initale Generierung der Daten über die Komplette Tabelle
Sub init()
    Dim Zeile As Integer
    Zeile = 14
    While Cells(Zeile, 2) <> ""
        If Cells(Zeile, 6) <> "" Then
            Call splitData(Zeile)
        End If
        Zeile = Zeile + 1
    Wend
End Sub

' Aktualisierung der Daten bei änderung der Zelle
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row > 6 And Target.Column = 6 Then
        For i = 0 To 8
            Cells(Target.Row, i + 7) = ""
        Next i
        Call splitData(Target.Row)
    End If
End Sub

' Daten aus Spalte 6/F der jeweiligen Zeile auslesen
' Zerlegen und die die weiteren Spalten eintragen
Sub splitData(Zeilennummer As Integer)
    Dim line As String
    Dim WrdArray() As String
    Dim WrdArray2() As String
    Dim StaArray
    Dim EndArray
    
    ' Zelle einlesen
    line = Cells(Zeilennummer, 6).Value
    
    ' Zerlegen mit Teiler //
    WrdArray() = Split(line, "//")
    
    ' wenn 9 Teile gefunden wurden
    If UBound(WrdArray) = 8 Then
        
        ' Über die 9 Teile drüber gehen
        For i = 0 To 8
        ' Falls ein Fehler passiert (bei umwandlung in Zahl) diesen einen Teil überspringen
        On Error GoTo Fehler
        
            ' Versuchen den Teil nochmal mit Teiler : zu zerlegen
            WrdArray2() = Split(WrdArray(i), ":")
            
            ' Wenn das geklappt hat und 2 weitere Teilen entstanden sind
            If UBound(WrdArray2) = 1 And i <> 5 Then
                ' den 2. Teil in die jeweilige Zelle eintragen
                Cells(Zeilennummer, i + 7) = Trim(WrdArray2(1))
            ' ausser es handelt sich um die 6. Spalte (Strom)
            ElseIf UBound(WrdArray2) = 1 And i = 5 Then
                l = Len(Trim(WrdArray2(1)))
                ' dann noch das A wegschneiden
                Cells(Zeilennummer, i + 7) = CDbl(Left(Trim(WrdArray2(1)), l - 2))
            ' konnte nicht geteilt werden alles in die Zelle eintragen
            Else
                Cells(Zeilennummer, i + 7) = WrdArray(i)
            End If
Fehler:
        Next i
    End If
End Sub

MFG 

Christoph
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste