2013-11-28 87 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