如果分配了 1 个或多个值,则获取单元格的值

Getting the values for the cells if there is 1 or more values assigned

如果我使用此代码在 A 列和 B 列中的 SHEET1 的值大于或等于 2,我该如何解决此问题:(我没有任何问题)

Dim LineNumbers() As Variant
LineNumbers = Range("A1", ActiveSheet.Cells(Rows.Count, "A").End(xlUp))
Dim Lengths() As Variant
Lengths = Range("B1", ActiveSheet.Cells(Rows.Count, "B").End(xlUp))      

但是,如果 A 列和 B 列上的行只有 1 个值,则会引发错误。我在这里读到,如果我使用 usedrange,不建议使用 CountA 和 xldown 来获取最后使用的行,因为它会导致结果出现一些错误,那么上面的代码效率更高。不幸的是,当我的 LineNumbers 和 Lengths 中只有 1 个值时,这会引发错误。

声明 Dim LineNumbers() As Variant 您的代码告诉 VBA 它必须保留一个数组 。任何东西(字符串、数字、对象)的数组...

那么,LineNumbers = Range("A1", ActiveSheet.Cells(Rows.Count, "A").End(xlUp))LineNumbers = Range("A1","A1")LineNumbers = Range("A1")类似。这样的范围不能 return 数组(来自单个单元格)。

但是,如果您更改声明:

Dim LineNumbers As Variant

它不会再return一个数组,但不是必须一个数组,它会取单元格值。

请查看下一个改编代码:

Dim LineNumbers As Variant
  LineNumbers = Range("A1", ActiveSheet.cells(rows.count, "A").End(xlUp))
  If IsArray(LineNumbers) Then 'for the case of only one cell
        Debug.Print LineNumbers
  Else
        Dim El As Variant
        For Each El In LineNumbers
            Debug.Print El
        Next El
  End If

从范围写入数组

Dim LineNumbers As Variant
Dim Lengths As Variant

With ActiveSheet
    With .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
        If .Rows.Count = 1 Then ' one cell
            ReDim LineNumbers(1 To 1, 1 To 1): LineNumbers(1, 1) = .Value
        Else ' multiple cells
            LineNumbers = .Value
        End If
    End With
    With .Range("B1", .Cells(.Rows.Count, "B").End(xlUp))
        If .Rows.Count = 1 Then ' one cell
            ReDim Lengths(1 To 1, 1 To 1): Lengths(1, 1) = .Value
        Else ' multiple cells
            Lengths = .Value
        End If
    End With
End With