2011-10-24 72 views
1

尋找宏的幫助以獲取更多行上的數據塊,並將它們放入列中。Excel宏列拆分

我附上了一張圖片來描述這一點。所有數據塊將由圖片中第一列1或2確定。我只想將塊2向上移到1之後。我遇到的唯一問題是對於每個塊,列數是可變的。

編輯:圖片櫃面Embedded是顯示不出來的鏈接:enter link description here

enter image description here

這會是比較接近?

Sub macro() 
Dim wav_name As String 

Range("A1").Select 

Do While ActiveCell.Value <> "" 
ActiveCell.Offset(0, 2).Select 
wav_name = ActiveCell.Value 
ActiveCell.Offset(1, 0).Select 

Do 
    If ActiveCell.Value = wav_name Then 
     ActiveCell.Offset(1, 0).Select 
    Else 
     Exit Do 
    End If 
Loop 

Range(ActiveCell.Offset(0, -2), ActiveCell.End(xlDown)).Select 
Selection.Cut 
ActiveCell.End(xlUp).Offset(0, 3).Select 
ActiveSheet.Paste 

Loop 

Range("A1").Select 
End Sub 
+0

出於某種原因,您的圖片沒有顯示給我,所以我不確定我是否遵循了邏輯,但值得注意的是,您不需要選擇單元格以便與它們一起使用。 –

+1

對於1和2的時間和地點,需要有一些規範,看起來大多是隨機的。一些隨機的東西可以是1和2嗎? –

+0

1和2將在第一列。所有其他數據列將是任意數據,我們只是想在第一列更改時將其拆分,然後將該塊移到其前一個塊旁邊。 –

回答

1

你在那裏有一個關鍵的例外是可行的。

您的剪裁選擇只抓取第一行數據。您需要將其更改爲

Range(ActiveCell).Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 

要處理的變量數列中,您可以通過添加varabile(即LASTCOL),並把下面的代碼在你的Do循環

捕捉部分之一,最後一列
LastCol = Activecell.End(xlToRight).Column 

然後用你的變量

注意更換3在你的上偏移聲明,你可以重構代碼以消除很多的SELECT語句(includeing我上面提到的那些),如果你需要提高你的代碼的性能,但是你寫的東西會爲你工作。

編輯:這是您的最終代碼是什麼樣子

Sub macro() 
Dim wav_name As String 
Dim LastCol as Long 

Range("A1").Select 

Do While ActiveCell.Value <> "" 
ActiveCell.Offset(0, 2).Select 
wav_name = ActiveCell.Value 
ActiveCell.Offset(1, 0).Select 
LastCol = Activecell.End(xlToRight).Column 

Do 
    If ActiveCell.Value = wav_name Then 
     ActiveCell.Offset(1, 0).Select 
    Else 
     Exit Do 
    End If 
Loop 

Range(ActiveCell.Offset(0, -2), ActiveCell.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 

Selection.Cut 
ActiveCell.End(xlUp).Offset(0, LastCol +1).Select 
ActiveSheet.Paste 

Loop 

Range("A1").Select 
End Sub 

我沒有測試過這一點,所以你可能需要做一些調試......但現在是邏輯正確。

+0

性能沒有問題。然而,我不是100%的地方,你要堅持並用上面的代碼替換代碼,介意說明? –

+0

嘿Pynner,認爲我們可以在此工作?就目前來看,它不能正常工作。現在它只是將所有的東西都轉移到右邊,以列XEW。它根本不分離基於列A的數據。此外,它會在「ActiveCell.End(xlUp).Offset(0,LastCol + 1)」上引發錯誤。選擇「聲明應用程序定義的錯誤或對象定義的錯誤(錯誤1004) –