从所选列范围中获取数据

时间:2014-04-18 18:19:08

标签: excel vba excel-vba

用户必须选择一个或多个数据列,然后在我的vba代码中使用数组。如果用户选择列字母,他将获得整个列,数据和空白单元格。除了通过数组之外,还有一种方法可以在选择整列时只获取该列中的数据。

我有这样的代码:

Set user_range = ActiveWindow.RangeSelection
points = user_range.value

i = LBound(points, 1)

count = UBound(points, 1) - i + 1

我感谢任何人都可以提供帮助!

谢谢,

拉​​斯

1 个答案:

答案 0 :(得分:1)

这是可能的背景。

1)如果Selection只能包含常量

Dim user_range As Range
Dim points
On Error Resume Next
Set user_range = Selection.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not user_range Is Nothing Then points = user_range.Value

2)如果Selection只能包含公式

Dim user_range As Range
Dim points
On Error Resume Next
Set user_range = Selection.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not user_range Is Nothing Then points = user_range.Value

3)如果Selection可以包含两个常量和公式

Dim rng1 As Range, rng2 As Range, user_range As Range
Dim points

On Error Resume Next
Set rng1 = Selection.SpecialCells(xlCellTypeConstants)
Set rng2 = Selection.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0

If Not rng1 Is Nothing And Not rng2 Is Nothing Then
    Set user_range = Union(rng1, rng2)
ElseIf Not rng1 Is Nothing Then
    Set user_range = rng1
ElseIf Not rng2 Is Nothing Then
    Set user_range = rng2
End If

If Not user_range Is Nothing Then points = user_range.Value

4)如果要剪切未使用的部分(从未使用过的部分),可以尝试使用以下代码(但在很多情况下,它不可靠,因为UsedRange包含至少使用过一次的所有单元格,例如,如果从单元格中删除值,则此单元格将为空,但仍为UsedRange的一部分):

Dim user_range As Range

Set user_range = Intersect(UsedRange, Selection)
If Not user_range Is Nothing Then points = user_range.Value