VBA,不适用';从指定列中删除

VBA,不适用';从指定列中删除,vba,Vba,我希望清除我指定列中的所有不适用项(非公式): Sub ClearNA() With Worksheets("database") Set rng1 = Range( _ Range("A1:FR1").Find("columnname").Offset(1), _ Range("A1:FR1").Find("columnname").Offset(1).End(xlDown)) Cells.Repla

我希望清除我指定列中的所有不适用项(非公式):

Sub ClearNA()

    With Worksheets("database")
    Set rng1 = Range( _
                 Range("A1:FR1").Find("columnname").Offset(1), _
                Range("A1:FR1").Find("columnname").Offset(1).End(xlDown))

    Cells.Replace "#N/A", "", rng1

    End With

End Sub
我想用空格代替它们。我在网上遇到了一个类型不匹配的问题

Cells.Replace "#N/A", "", rng1
更新:

   Sub DeleteStringFromColumn(SearchString As String, _
                               ColumnNameOrNumber As Variant, _
                               MySheet As Worksheet, _
                               Optional ReplaceWith = vbNullString)
    With MySheet
        .Range(.Cells(1, ColumnNameOrNumber), .Cells(1048576, ColumnNameOrNumber)).Replace SearchString, vbNullString
    End With
End Sub


Sub clearNA()

    'DeleteStringFromColumn "#N/A", 1, ThisWorkbook.Sheets(1) 'ColumnNumber
    DeleteStringFromColumn "#N/A", "ProductType", ThisWorkbook.Sheets("database") 'ColumnName
End Sub

我把这个问题包装成一个小的子程序。有关用法,请参见示例sub

Sub DeleteStringFromColumn(SearchString As String, _
                               ColumnNameOrNumber As Variant, _
                               MySheet As Worksheet, _
                               Optional ReplaceWith = vbNullString)
    With MySheet
        .Range(.Cells(1, ColumnNameOrNumber), .Cells(1048576, ColumnNameOrNumber)).Replace SearchString, vbNullString
    End With
End Sub

Sub Example()
    DeleteStringFromColumn "#N/A", 1, ThisWorkbook.Sheets(1) 'ColumnNumber
    DeleteStringFromColumn "#N/A", "B", ThisWorkbook.Sheets(1) 'ColumnName
    DeleteStringFromColumn "#N/A", ThisWorkbook.Names("ProductType").RefersToRange.Column, ThisWorkbook.Sheets(1) 'Getting Column Number from Named Range
End Sub

在哪里可以定义列名?如果我想从A列中删除N/A,我是否只需执行l
.Range(.Cells(1,1)
即可?请参见编辑:)您可以将其称为
DeleteStringFromColumn“#N/A”,1,ThisWorkbook.sheetNamehere”(“MySheetNameHere”)
.Range(.Cells(1,ColumnNameOrNumber),.Cells(1048576,ColumnNameOrNumber)).替换SearchString,vbNullString
将使用我得到的更新我的代码。
ProductType
不是有效的列引用。它必须是一个数字或字母。例如,A列为1,B列为“B”。
ProductType
是命名范围吗?如果是这样的话,类似这样的操作将有效
DeleteStringFromColumn“#N/A”,ThisWorkbook.Names(“ProductType”)。referestorange.Column,ThisWorkbook.Sheets(1)
没问题!很高兴这有帮助:)