使用空字符串值清除单元格

时间:2015-03-11 15:16:19

标签: excel excel-vba vba

我正在尝试将excel文件导出到访问数据库。某些列/字段需要包含字段类型数字,因为稍后将在涉及sum,count等函数的查询中使用这些字段。

现在问题是excel中的相应列包含空字符串,这些字符串在导出到访问数据库时会产生问题(字段类型不匹配)。即使excel中的这些列具有格式化为数字的单元格,问题仍然存在

我使用以下VBA代码来消除这些列中的所有空字符串,它适用于相当数量的行。但是excel文件将有350000多行,对于如此多的行,代码似乎永远都会运行。

有关改进我的代码或采取其他方法的任何提示都将受到高度赞赏

Dim r As Range
For Each r In ActiveSheet.Range("AG2:AJ" & lastRow)
    With r
        If .Value = "" Then
            .Clear
        End If
    End With
Next

2 个答案:

答案 0 :(得分:1)

如果列中没有公式,则运行:

Sub clearTHEM()
    Dim r As Range
    Dim N As Long
    N = Cells(Rows.Count, "AG").End(xlUp).Row
    Set r = Range("AG2:AJ" & N)
    With r
        .Value = .Value
    End With
End Sub

将清除 Nulls 。然而,它也将爆炸公式。如果你有公式,那么运行宏,然后导出,但不要保存。

修改#1:

对于稍微简洁的方法,此代码将创建一个特殊的,仅用于导出的工作表副本,而不包含空值或公式:

Sub ForExportOnly()
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "For Export Only"
    With ActiveSheet.UsedRange
        .Value = .Value
    End With
End Sub

答案 1 :(得分:1)

如果你有公式,这应该对你有用,并在我的测试数据集上运行,在不到5秒的时间内有360000行:

Sub tgr()

    Dim lCalc As XlCalculation
    Dim lCol As Long
    Dim lLastRow As Long

    With Application
        lCalc = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    lLastRow = Range("AG:AJ").Find("*", Range("AG1"), , , , xlPrevious).Row

    For lCol = Columns("AG").Column To Columns("AJ").Column
        With Cells(1, lCol).Resize(lLastRow)
            .AutoFilter 1, "="
            .Offset(1).Resize(.Rows.Count - 1).ClearContents
            .AutoFilter
        End With
    Next lCol

    With Application
        .Calculation = lCalc
        .ScreenUpdating = True
        .EnableEvents = True
    End With

End Sub