2015-10-27 102 views
0

我的數據按列分隔,每天在該列中以空行分隔。基本上,我需要一個VBA宏,使這個數據:VBA轉置循環並在滿足條件時開始新行

1995 (1) 
(23:00) 

Math 0630 
0830 Break 0930 
1000 English 1200 
1200 Lunch 1300 

1995 (2) 
(12:45) 

Chemistry 0630 
0830 Lab 0930 
1000 Bio 1200 
1200 Lunch 1300 

出現這樣一個新的工作表:

1995 (1) (23:00) Math 0630 0830 Break 0930 1000 English 1200 1200 Lunch 1300 
1995 (2) (12:45) Chemistry 0630 0830 Lab 0930 1000 Bio 1200 1200 Lunch 1300 

我還需要VBA代碼新的一天開始時,每行分離。有人可以幫忙嗎?

這是我迄今爲止..

Sub blnkrows() 
Do 
    p = p + 20 
    If Rows(p).Find("*") Is Nothing Then Exit Do 
Loop 
    y = Range(Rows(1), Rows(p)) 
    With Sheets("Sheet2") 
    Range(.Rows(1), .Rows(p)) = y 
    End With 
End Sub 

但只有將數據複製到新的工作表。

+0

列表總是處於相同模式2行數據,1行空白,4行數據,1行空白?或者它會改變? –

+0

它會改變。新的一天開始時,總會有空白的行。有時候有時會有5行數據10.這一切都依賴它始終始終如此。 2行的數據1空白,但然後它變化 – Ben

回答

0

這應該做你在問什麼

編輯此代碼是基於私人談話與OP。對於需要更多評論的模式,有些特質。

Sub blnkrows() 
Dim arr() As Variant 
Dim p As Integer, i& 
Dim ws As Worksheet 
Dim tws As Worksheet 
Dim t As Integer 
Dim c As Long 
Dim u As Long 



Set ws = ActiveSheet 
Set tws = Worksheets("Sheet2") 
i = 1 
With ws 
Do Until i > 100000 
    u = 0 
    For c = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column 
     ReDim arr(0) As Variant 
     p = 0 
     t = 0 
      Do Until .Cells(i + p, c) = "" And t = 1 
       If .Cells(i + p, c) = "" Then 
        t = 1 

       Else 
        arr(UBound(arr)) = .Cells(i + p, c) 
        ReDim Preserve arr(UBound(arr) + 1) 
       End If 
       p = p + 1 
      Loop 

     If p > u Then 
      u = p 

     End If 
     If c = .Cells(1, .Columns.Count).End(xlToLeft).Column Then 
      If .Cells(i + p, c).End(xlDown).Row > 100000 And .Cells(i + p, 1).End(xlDown).Row < 100000 Then 
       i = .Cells(i + u, 1).End(xlDown).Row 
      Else 
       i = .Cells(i + p, c).End(xlDown).Row 
      End If 

     End If 
     tws.Cells(tws.Rows.Count, 1).End(xlUp).Offset(1).Resize(, UBound(arr) + 1) = arr 

    Next c 

Loop 
End With 
With tws 
    .Rows(1).Delete 
    For i = .Cells(1, 1).End(xlDown).Row To 2 Step -1 
     If Left(.Cells(i, 1), 4) <> Left(.Cells(i - 1, 1), 4) Then 
      .Rows(i).EntireRow.Insert 
     End If 
    Next i 
End With 
End Sub 
+0

我收到以下錯誤:「下標超出範圍」這將是什麼原因?此外,它將刪除第4行數據,並且僅對這兩列進行循環。之後,它不會吐出正確的數據 – Ben

+0

@Ben什麼行會拋出錯誤,我的猜測是'Set tws = Worksheets(「Sheet2」)'。如果是這樣,這意味着您沒有「工作表2」,或者在代碼中將其重命名爲所需工作表,或者添加「工作表2」 –

+0

是。我明白了。另一個問題/問題它正在爲第一列正確執行,但我有6列數據。是否有一個簡單的添加,可以使所有6列這個命令。 – Ben

相關問題