[英]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.