1

列「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回以上繰り返されます

ご覧のとおり、同じ列に2ビットの情報があり、次の束は===で区切られています。私がやりたいことは、各ビットの見出しを無視し、右側の情報を取得して、それらを下の別の列に移動することですお互い。

私がやりたいことは、ファイルを読み込んで、すべての情報を 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
4

1 に答える 1

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
于 2012-04-16T11:50:38.823 に答える