在较大范围内替换Excel数字单元格值

时间:2014-05-21 22:39:38

标签: excel vba excel-vba

我正在尝试打开一个excel文件,并将所有单元格替换为带有“x”的数值。

enter link description here

也就是说,不同周的model_abc的1..9应该替换为“x”,与model_123的11,14,17相同,等等。空单元格应该保持不变。

请注意,还有隐藏的行和列,我也想执行此替换。

我写了以下内容,似乎有效,但需要花费10多分钟才能完成整个工作表。 XFD200的最终范围是任意选择的,以便进行扩展 - 每周都会添加一列,将来可能会添加一些行。

Sub RemoveCellValues(excel_filename As String)

    Dim xlApp As Excel.Application
    Dim excelWkBk As Excel.Workbook

    Set xlApp = Application.CreateObject("Excel.Application")
    With xlApp
        .Visible = True
        Set excelWkBk = xlApp.Workbooks.Open(excel_filename)
        With excelWkBk         

            Dim rng As Range
            Dim r   As Range

            Set rng = .Worksheets(1).Range("A3:XFD200")
            For Each r In rng
                If Not IsEmpty(r.Value) Then
                    If IsNumeric(r.Value) Then
                        Debug.Print "Cell value " & r.Value & " " & r.Row & " " & r.Column
                        r.Value = "x"
                    End If
                End If
            Next r            

            .Save
            .Close
        End With
    End With

    '' quit excel application
    xlApp.Quit

End Sub

您可能会说,这是我第一次尝试使用VBA和Excel。有一个更好的方法吗?可以加快速度,同时保持跟上未来扩展的灵活性吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果数值是类型化数据而不是公式的结果,则不需要循环:

Sub TheXFactor()
    Dim r As Range
    Set r = Range("A3:XFD200").Cells.SpecialCells(xlCellTypeConstants, xlNumbers)
    r.Value = "x"
End Sub