使用VBA

时间:2016-11-03 15:41:54

标签: excel vba excel-vba macros

我有一个excel文件,我手动删除不按顺序排列的整个列的内容。这需要大量的手动工作,因为某些行在列中包含空白值。所以,我正在尝试编写VBA脚本来删除除第一行(标题)

之外的所选列的内容

到目前为止,我一直在谷歌搜索和阅读堆栈溢出文章...这是我完成的(有些工作......)到目前为止

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. 另外,我仍然需要保留带标题的列。该脚本完全删除整个列..
  3. 我是VBA的菜鸟,所以我在这里需要很多帮助! 先感谢您。

1 个答案:

答案 0 :(得分: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