2012-04-13 85 views
1

我已經在excel中給出了一個輸入文件,該文件剛剛落在列「M2」下方。把輸入文件看起來像這樣:excel數據分割/分配

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      
================================================== 

然後重複約1000+次以同樣的格式

,你可以看到它有兩個信息位在同一列那麼接下來的是一堆分隔通過=== 我想要做的是忽略每個位的標題,並採取右側的信息,並將其移動到彼此下方的不同列。

我想要做的是閱讀下來的文件,並把下像ru_utime的所有信息:0.060不同的欄下翻過

因此,所有的數據是「M2」的時候,我想利用相應的標題信息,並將它們移動到像S2,T2,U2那樣的每一個,然後當它擊中=======爲它下面的下一個做它。如果這對任何人都有幫助,我會非常感激。

目的是在一個按鈕的點擊自動移動,由於

補充說:

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

是可以輕鬆實現。你有沒有嘗試過任何東西? – 2012-04-13 10:04:57

+0

我一直在尋找,但我不知道如何說什麼後,標題移動到列t然後移動所有標題信息accross,直到你打====然後增量,再做 – Zenaphor 2012-04-13 10:11:30

+0

想要試一試使用不同的方法(有很多方法)?使用'.Find'和'.FindNext'搜索「=======」,然後根據需要設置您的範圍。然後你可以使用宏來記錄'Copy'和'Pastespecial-Transpose'是如何工作的?結合這兩段代碼會給你你想要的。對於'.Find'和'.FindNext',看到這個鏈接http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/ – 2012-04-13 13:51:28

回答

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