Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何清除除X、Y和amp;列以外的所有数据;Z_Vba_Excel_Multiple Columns_Rowdeleting - Fatal编程技术网

Vba 如何清除除X、Y和amp;列以外的所有数据;Z

Vba 如何清除除X、Y和amp;列以外的所有数据;Z,vba,excel,multiple-columns,rowdeleting,Vba,Excel,Multiple Columns,Rowdeleting,我想清除工作表中除X、Y和Z列(例如)以外的所有内容(而不是删除)?这些列存储在变量中。是的,清除两个范围: 范围1从第1列(“A”)到第23列(“W”) 范围2,从第27列(“AA”)到最后使用的列 此函数用于: Public Sub CustomClear() Dim ws As Worksheet Set ws = ActiveSheet ws.Range(ws.Columns(1), ws.Columns(23)).Clear ws.Range(ws

我想清除工作表中除X、Y和Z列(例如)以外的所有内容(而不是删除)?这些列存储在变量中。

是的,清除两个范围:

  • 范围1从第1列(“A”)到第23列(“W”)
  • 范围2,从第27列(“AA”)到最后使用的列
此函数用于:

Public Sub CustomClear()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ws.Range(ws.Columns(1), ws.Columns(23)).Clear
    ws.Range(ws.Columns(27), ws.Columns(ws.UsedRange.End(xlToRight).Column)).Clear
End Sub

这是一个非常有趣的问题,@SQLPolice的回答简洁地完成了任务。(顺便说一句,这是+1。)

这里还有另一个选项,它可以处理
Range
变量,这些变量在
Range(“X:Z”)
以外的列中开始/停止:

选项显式
公共子ClearRangesBeforendafter()
变暗rngToKeep作为范围,rngToClear作为范围
变暗lngColNum为长
将工作作为工作表

设置wks=ThisWorkbook.Worksheets(1)'使用宏记录器,选择所有要清除的列,然后按delete键。当您查看代码时,您将看到它与清除内容相同。
Option Explicit
Public Sub ClearRangesBeforeAndAfter()

    Dim rngToKeep As Range, rngToClear As Range
    Dim lngColNum As Long
    Dim wks As Worksheet

    Set wks = ThisWorkbook.Worksheets(1) '<~ assume we're on Sheet1

    With wks
        Set rngToKeep = .Range("W:Z") '<~ this is the example range from OP
        '
        'Or, we could pick any other group of continuous columns, like:
        '
        'Set rngToKeep = .Range("B:D")
        'Set rngToKeep = .Range("H:Z")
        'Set rngToKeep = .Range("A:AZ")

        'First, find the farthest-left border of the "keep" range
        'by leveraging the relative nature of rngToKeep.Cells
        lngColNum = rngToKeep.Cells(1, 1).Column

        'Now we can clear everything up to that border
        If lngColNum > 1 Then
            Set rngToClear = .Range(.Columns(1), .Columns(lngColNum - 1))
            rngToClear.Clear
        End If

        'Then, find the farthest-right border of the "keep" range
        'and clear the remaining cells
        lngColNum = rngToKeep.Offset(0, rngToKeep.Columns.Count).Column
        Set rngToClear = .Range(.Columns(lngColNum), _
                                .Columns(.Columns.Count))
        rngToClear.Clear
    End With

End Sub