首页 > 解决方案 > 将选定的单元格分配给变量

问题描述

我有一个 vba 分配,我想将单元格值分配给一个变量。我曾经selection.SpecialCells找到选择相关的单元格。因此,我选择了一列包含 11 个单元格,但中间有空格。如何将其分配给变量?

Worksheets("Sheet1").Range(Cells(4, 3), Cells(1000, 3)).Select
Selection.SpecialCells(xlCellTypeConstants, 2).Select

Set IsinArray = Selection

标签: arraysexcelvbavariablesrange

解决方案


(1)去掉Set- 它只用于分配对象,而不是值。
(2)阅读(并理解)如何避免在 Excel VBA 中使用 Select
(3)限定Cells- 您需要告诉 VBA 您需要哪个工作表中的单元格。
(4) SpecialCells中的第二个参数指定你要读取什么样的数据。2( xlTextValues) 只表示字符串,因此数字会被过滤掉。如果要读取所有非空单元格,只需省略此参数即可。
(5)如果您的 Range 包含多个单元格,则这些值将存储在二维数组中。如果您的 Range 仅包含一个值,则结果是单个值,而不是数组。如果SpecialCells没有找到任何东西(例如,所有单元格都是空的),它会抛出一个运行时错误。
(6)使用Option Explicit和声明所有变量。由于SpecialCells可以是不同的类型,请使用Variant.
(7)拆分复杂语句有助于发现错误。

Dim r as Range
With Worksheets("Sheet1")
    Set r = .Range(.Cells(4, 3), .Cells(1000, 3))
    ' (Synonym to Set r = .Range("C4:C1000")
End With

Dim myVals
On Error Resume Next  ' Handle the possible error that no value was found
myVals = r.SpecialCells(xlCellTypeConstants)
On Error GoTo 0

If IsEmpty(myVals) Then
    Debug.Print "No values found."
ElseIf Not IsArray(myVals) Then
    Debug.Print "Only one value found."
Else
    Debug.Print UBound(myVals, 1) & " values found."
End If

推荐阅读