2017-08-28 71 views
0

我使用的宏下面只保留在指定的時間間隔細胞,並刪除其餘的(即保持第1,第5,第10,等點給定列)如何修改VBA宏只在選定單元格的列上運行?

Dim i As Long 
Dim lastRow As Long 
lastRow = Application.ActiveSheet.UsedRange.Rows.Count 

For i = 2 To lastRow Step 5 
    Range(Rows(i), Rows(i+8)).ClearContents 
Next i 

目前,宏刪除整個工作表上的整個行。我想修改宏,我可以選擇單個列的頂部的單元格,我想修改並只在該列上運行宏。

例如,我有數據,例如A1:B350和C1:E95(都在同一張紙上)。我希望能夠運行宏並只保留列A-B中指定的單元格間隔而不干擾列C-E。同樣,我想在列C中運行相同的宏而不干擾列A中的數據。此時,我不知道如何修改此宏以滿足此任務。我非常感謝任何幫助和指導。

回答

0

以下代碼將隻影響您選擇的列,但我將步驟從8更改爲12,因爲否則所有值都將被清除。另外,usedRange函數可能沒有意義,因爲現在只有一列是焦點。希望這段代碼能讓你開始,並且可以根據需要進行調整。

Sub delColumnData() 
Dim r As Range, col As Long, LastRow As Long, i As Long 
Set r = Application.InputBox("select column", , , Type:=8) 
col = r.Column 
Set r = Cells(1, col) 
LastRow = r.End(xlDown).row 
For i = 2 To LastRow Step 12 
    Range(Cells(i, col), Cells(i + 8, col)).ClearContents 
Next i 
End Sub 

要處理多個列:

Sub delColumnsData() 
Dim r As Range, col As Long, LastRow As Long, i As Long, j As Long 
Set r = Application.InputBox("select column(s)", , , Type:=8) 
For j = 1 To r.columns.Count 
    col = r(j).Column 
    LastRow = r(j).End(xlDown).row 
    For i = 2 To LastRow Step 12 
    Range(cells(i, col), cells(i + 8, col)).ClearContents 
    Next i 
Next j 
End Sub 
+0

託尼,我怎麼能去修改這個代碼,包括部分列如列B-F,A-K等? – ClockworkNemo

+0

我現在在原來的下面添加了第二個版本來處理一系列的列 –

0

另一種選擇


Option Explicit 

Public Sub ClearColumnValues() 
    Dim i As Long, selectedCol As Long 

    selectedCol = Selection.Column 'in this case the Selection object can be convenient 

    With Application.ActiveSheet 
     For i = 1 To .UsedRange.Rows.Count Step 6 
      .Range(.Cells(i + 1, selectedCol), .Cells(i + 5, selectedCol)).ClearContents 
     Next 
    End With 
End Sub 

+0

這是很好很簡單的代碼,但它刪除了錯誤的單元格。我可能一開始就解釋得很糟糕。你的代碼從A1開始,並刪除A2,A7等。我試圖做一些從A1開始的事情,刪除一系列單元格,然後保留下一個指定的單元格。例如從A1開始,刪除A2-A6,保留A7等 – ClockworkNemo

+0

@ClockworkNemo - 我做了一個更新 –

相關問題