在Excel中让问题遍历大范围

该代码遍历给定范围,并将每个值转换为短月份名称。它在很小的范围内效果很好,但是我为定期获得的数据集(超过100,000行)编写了代码。它仍然可以在整个范围内工作,但是需要很长时间,并且看起来像是崩溃了,但是如果我等待约5分钟,它就可以工作。

关于如何改善这一点的任何想法?

Sub ConvertToMonth()

Dim selectedRange As Range

Set selectedRange = Application.Selection

Application.ScreenUpdating = False

For Each Cell In selectedRange
       Cell.Value = MonthName(Cell.Value, True)
Next

Application.ScreenUpdating = True

End Sub
评论
  • trerum
    trerum 回复

    您的问题是Excel前端范围的读写速度。处理大型数据集的最佳方法是使用数组。首先,将数据集存储到数组中,操作该数组,然后输出该数组。就像我在下面所做的那样:

    Sub ConvertToMonth()
    
        Dim selectedRange As Range
        Dim arr() As Variant, i As Long
    
        Set selectedRange = Application.Selection
    
        arr = selectedRange.Value
    
        Application.ScreenUpdating = False
    
        For i = LBound(arr,1) To UBound(arr,1)
           arr(i,1) = MonthName(arr(i,1), True)
        Next i
    
        selectedRange.Value = arr
    
        Application.ScreenUpdating = True
    
    End Sub