2013-11-28 124 views
0

我是一名Excel VBA新手,虽然我有几年的编程经验。VBA Excel-如何知道范围内的数据布局

我想在excel中编写一个VBA函数,其中用户可以通过选择单个单元格,单元格范围或两者的组合来输入application.inputbox中的多个单元格。一旦输入,我想检查错误值等。

我可以输入范围没有问题,但似乎需要一种方法来检查范围以确定其布局,以便我可以找到值。看起来值的位置随用户如何选择单元而变化。

假设用户选择4个单元格。 A1,A2,c2,f5与拖动选择A1:A2,然后点击C2,f5。

在这两种情况下Inputs.Count

是4.

在第一种情况输入(1) - 输入(4)没有返回所选择的值。 这里,在第一种情况下,这些值在4个不同的区域中显示为单个单元格。

在第二种情况下,输入(1) - 输入(4)确实返回选定的值,但它们显示为三个区域。一个区域有两个单元(两行一列),两个区域各有一个单元。

我有两个问题 - 1:有没有一种简单的方法来确定我要检查的数据在哪里(即范围的布局)而不检查所有的区域/单元计数?

2:我在哪里可以找到使用范围的可访问阅读。

最佳, 拜伦

+0

这真的很不清楚你在问什么问题+我看到要求外部资源这是离题。我可以给你的是'ActiveCell.Address'或'ActiveCell.Row'或'ActiveCell.Column'来获取**位置**。然后编写一个函数/子函数来评估位置并为您提供结果。检查所有单元格是否在同一列或行中的东西等。 – 2013-11-28 14:21:03

回答

2

要选择A1,A2,B3后比较的几种方法,D4

Sub tester() 

Dim c As Range, a As Range, x As Long, s 

    Debug.Print Selection.Areas.Count 

    Debug.Print "###By cell count" 
    s = "" 
    For x = 1 To Selection.Cells.Count 
     s = s & " " & Selection.Cells(x).Address() 
    Next x 
    Debug.Print s 

    Debug.Print "###For Each cell" 
    s = "" 
    For Each c In Selection.Cells 
     s = s & " " & c.Address() 
    Next c 
    Debug.Print s 

    Debug.Print "###Looping through areas" 
    s = "" 
    For Each a In Selection.Areas 
     For x = 1 To a.Cells.Count 
      s = s & " " & a.Cells(x).Address() 
     Next x 
    Next a 
    Debug.Print s 

End Sub 

输出:

###By cell count 
$A$1 $A$2 $A$3 $A$4 
###For Each cell 
$A$1 $A$2 $B$3 $D$4 
###Looping through areas 
$A$1 $A$2 $B$3 $D$4 

只有方法#1是不可靠的 - 的其他人给出一致的结果,但范围最初被选中。

+0

完美@Tim Williams, - 非常感谢。我会投这个票,但我的代表缺乏。 – DrJBN