2012-04-13 9 views
1

Ich habe eine Eingabedatei in Excel gegeben, die nur Spalte "M2" nach unten geht. Legen Sie die Eingabedatei sieht wie folgt aus:Excel-Daten splitten/zuweisen

ru_utime  0.060    
ru_stime  0.140    
ru_maxrss 0       
ru_ixrss  0       
ru_ismrss 0       
ru_idrss  0       
ru_isrss  0       
ru_minflt 4124      
ru_majflt 0       
ru_nswap  0       
ru_inblock 0       
ru_oublock 0       
ru_msgsnd 0       
ru_msgrcv 0       
ru_nsignals 0       
ru_nvcsw  47174      
ru_nivcsw 4347      
================================================== 

dann etwa 1000 mal im gleichen Format wiederholt

wie Sie sehen können, verfügt über zwei Bits an Informationen in der gleichen Spalte dann die nächste Bündel getrennt ist by === was ich tun möchte, ist die Überschrift für jedes Bit ignorieren und nehmen Sie die Informationen auf der rechten Seite und verschieben Sie sie in verschiedene Spalten untereinander.

, was ich tun möchte, um die Datei gelesen und legte alle Informationen unter wie ru_utime: 0.060 unter einer anderen Spalte accross

so dass alle Daten in „M2“ nach unten, ich will nehmen die entsprechenden Titel Informationen und bewegen sie zu wie S2, T2, U2 für jeden einzelnen dann wenn es trifft ======= tun es für den nächsten darunter. Wenn das irgendeinen Sinn ergibt, würde ich die Hilfe sehr schätzen.

Ziel ist es, die Bewegung über auf einem Klick auf eine Schaltfläche zu automatisieren, dank

hinzugefügt:

Sub incorperate() 
sn = Split(Join(Application.Transpose(Sheets("sheet2").Cells(1).CurrentRegion.Columns(1)), "|"), String(62, "=") & "|") 
With Sheets("sheet1").Cells(1).CurrentRegion 
st = .Rows(1).Offset(.Rows.Count).Resize(UBound(sn) + 1) 
End With 

For j = 0 To UBound(sn) 
sq = Split(sn(j), "|") 
For jj = 0 To UBound(sq) - 1 
    st(j + 1, jj + 1) = Split(sq(jj))(UBound(Split(Trim(sq(jj))))) 
Next 
Next 

Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(st), UBound(st, 2)) = st 
End Sub 
+1

Ja, das leicht erreicht werden kann. Hast du schon etwas probiert? –

+0

Ich habe gesucht, aber ich weiß nicht, wie ich etwas nach der Überschrift zu Spalte t bewegen, dann verschieben Sie alle Überschriften Informationen, bis Sie ==== dann erhöhen und wieder tun – Zenaphor

+0

Möchten Sie es mit einem versuchen andere Methode (Es gibt viele Möglichkeiten)? Verwenden Sie '.Find' und' .FindNext', um nach "=======" zu suchen und legen Sie dann Ihre Bereiche fest, die Sie kopieren möchten. Sie können dann ein Makro verwenden, um aufzuzeichnen, wie "Kopieren" und "Passpecial - Transpose" funktioniert? Kombinieren Sie die beiden Stück Code wird Ihnen geben, was Sie wollen. Für '.Find' und' .FindNext', siehe diesen Link http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/ –

Antwort

1
Sub move() 
Dim x, y(), i&, j&, k&, s 

x = Range("S1", Cells(1, Columns.Count).End(xlToLeft)).Value 
With CreateObject("Scripting.Dictionary") 
    .CompareMode = 1 
    For i = 1 To UBound(x, 2) 
     .Item(x(1, i)) = i 
    Next i 

    x = Application.Trim(Range("M2", Cells(Rows.Count, "M").End(xlUp)).Value) 
    ReDim y(1 To UBound(x), 1 To .Count): j = 1 

    For i = 1 To UBound(x) 
     If InStr(x(i, 1), "==") = 0 Then 
      s = Split(x(i, 1)) 
      If .Exists(s(0)) Then 
       k = .Item(s(0)): y(j, k) = s(UBound(s)) 
      End If 
     Else 
      j = j + 1 
     End If 
    Next i 
End With 

[s2].Resize(j, UBound(y, 2)).Value = y() 
End Sub