2016-11-03 27 views
1

我有一個excel文件,我正在手動刪除不按順序排列的整列內容。這需要大量的手動工作,因爲某些行在列中包含空白值。所以,我正在嘗試編寫VBA腳本來刪除除第一行(標題)之外的所選列的內容。使用VBA刪除選定列的內容

我一直在Google上搜索和閱讀堆棧溢出文章......這是我完成的工作...)到目前爲止

Sub clear_contents() 
Dim currentColumn As Integer 
Dim columnHeading As String 
ActiveSheet.Columns("D").Delete 

For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1 
    columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value 
    If InStr(1, ActiveSheet.UsedRange.Cells(1, currentColumn).Value, _ 
      "0cc17562-08c1-4f99-a234-ce6fa0cc5be4", vbBinaryCompare) = 1 Then 
    ActiveSheet.Columns(currentColumn).Delete 
    End If 
Next 
End Sub 

此腳本正在做的是刪除具有指定標頭值的列。 這是密切..但不是真的什麼,我試圖做

  1. 我想選擇列,而無需鍵入頭名..喜歡選擇列C,d,G,F,然後刪除。
  2. 另外,我仍然需要保留帶有標題的列。此腳本完全刪除整個列..

我是VBA的noob,所以我確實需要很多的幫助! 預先感謝您。

回答

0

正如我瞭解您的要求,您不需要.Delete功能,只需.ClearContents。此宏循環遍歷每個選定的列(如果選擇整列或只選擇幾行,則無關緊要),查找最後佔用的行,然後清除第二行和最後一行之間的所有內容,因此第一行中的標題將保持不變。

Sub clear_contents() 
Dim Col As Integer 
Dim LastRow As Long 
Dim Sel As Range, rng As Range 

Set Sel = Selection 
For Each rng In Sel.Columns 
    Col = rng.Column 
    LastRow = Cells(Rows.Count, Col).End(xlUp).Row 
    If LastRow < 2 Then LastRow = 2 
    Range(Cells(2, Col), Cells(LastRow, Col)).ClearContents 
Next 

End Sub 
+0

這可以消除競爭!但是,你能幫我理解如何選擇特定的列嗎?我應該如何定義選擇/範圍? – user2747356

+0

只需在您的工作表中選擇它並運行宏。列的範圍取決於實際選擇。 – Limak

+0

明白了!這工作完美。非常感謝您的幫助!! – user2747356