簡體   English   中英

Excel宏列拆分

[英]Excel macro column splitting

在宏上尋求幫助,以獲取更多行中的數據塊,然后將其放入列中。

我附上一張照片來描述。 所有數據塊將由第一列(圖片中的1或2)確定。 我只是想將塊向上移動兩個,然后移到1附近。我遇到的唯一問題是每個塊的列數都是可變的。

編輯:如果未顯示嵌入式圖像鏈接: 在此處輸入鏈接描述

在此處輸入圖片說明

這會相對接近嗎?

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

除了一個關鍵的例外,您所擁有的一切都是可行的。

您選擇的剪切僅獲取第一行數據。 您需要將其更改為

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

要處理可變數量的列,您可以通過添加變量(例如LastCol)並將以下代碼放入Do Loop中來捕獲第一節的最后一列

LastCol = Activecell.End(xlToRight).Column

然后將最后一個偏移量語句中的3替換為變量

請注意,如果您需要提高代碼的性能,可以重構代碼以刪除許多select語句(包括我上面提到的內容),但是您所寫的內容將對您有用。

編輯:這是您的最終代碼將看起來像

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

我尚未對此進行測試,因此您可能必須進行一些調試...但是從邏輯上講,這是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM