VBA可防止工作表或数组中的空单元格/数据

时间:2018-06-22 14:01:03

标签: arrays excel vba

我在解决数组问题时遇到了一些麻烦。 我从工作表收集数据并将其存储到数组中。 xData(0)将完成并且不能丢失数据。但是在那里存储的值的xData(1)可能会遗漏一个值,因此我想将空单元格替换为0。我不打算使用for loops在工作表中添加0,而是考虑使用数组由于我找不到在不降低速度的情况下直接将0添加到工作表的原因。我在15种不同的工作簿中大约有10张纸,因此我需要找到一种更快的方法。

我的代码段如下。

Dim xData(1) As Variant

'Collect the data from the sheets ()
xData(0) = xData(1) = Application.Transpose(Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Value2)
xData(1) = xData(1) = Application.Transpose(Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Value2)

这将产生一个2D数组,但如果任何单元为空(丢失数据),则xData(1)的大小将与xData(0)的大小不同。有没有一种方法可以更改xData(1)的大小以适合xData(0)的大小,然后将0添加到剩余长度。还有其他方法吗,因为如果中间缺少1值,那么以后也可能会引起问题。

1 个答案:

答案 0 :(得分:1)

如果您的目标是将容器替换为零,则这是该方法的核心:

  • 避免循环
  • 避免使用VBA阵列

说我们在 A 列中的数据是从 A1 A1000 的范围内的一些空白。正在运行:

Sub ChangeEmpty2Zero()
    Dim rng As Range, rngE As Range
    Set rng = Range("A1:A1000")

    On Error Resume Next
        Set rngE = rng.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If Not rngE Is Nothing Then rngE = 0
End Sub

将用零填充这些空容器。

注意:

如果列的底部位于UsedRange之外,则该“底部”将不会更改。
您可以对其进行调整以在所需的任何工作表中的任意范围内运行。