我有一個以字符串形式存儲的範圍變量。我只是螞蟻來檢查給定的範圍是否有效。例如:A11:Z4, D8:H7, B112:H80, M5:P45
無效,A5:A5
無效(一種情況),A11:Z11, D8:H8, A5:M5
有效。我只想進入同一行,不同的列。如果給定的範圍有效,請使用VBA進行檢查
我們該怎麼做?
我有一個以字符串形式存儲的範圍變量。我只是螞蟻來檢查給定的範圍是否有效。例如:A11:Z4, D8:H7, B112:H80, M5:P45
無效,A5:A5
無效(一種情況),A11:Z11, D8:H8, A5:M5
有效。我只想進入同一行,不同的列。如果給定的範圍有效,請使用VBA進行檢查
我們該怎麼做?
謝謝你的幫助。我只是用下面的方法來解決這個問題。
Dim i As Integer
Dim retval As String
Dim retval1 As String
Dim colFrom As String
Dim colTo As String
'Example : FromRange = A5, ToRange =D5
If FromRange = ToRange Then 'For Same Column
MsgBox "The Input Range specified is invalid"
Exit Sub
End If
colFrom = FromRange
colTo = ToRange
'Get the numbers only from given range and compare it
For i = 1 To Len(colFrom)
If Mid(colFrom, i, 1) >= "0" And Mid(colFrom, i, 1) <= "9" Then
retval = retval + Mid(colFrom, i, 1)
End If
Next
For i = 1 To Len(colTo)
If Mid(colTo, i, 1) >= "0" And Mid(colTo, i, 1) <= "9" Then
retval1 = retval1 + Mid(colTo, i, 1)
End If
Next
If retval <> "" And retval1 <> "" And retval = retval1 Then
myCellRange= FromRange & ":" & ToRange
Else
MsgBox "Input Range is invalid"
Exit Sub
End If
下面是一些代碼,你可以使用:
Sub Validate()
Dim rng As String
'here you can define your range
rng = "C11:D12"
If Range(rng).Rows.Count = 1 And Range(rng).Columns.Count > 1 And Range(rng).Areas.Count = 1 Then
MsgBox "Range is valid"
Else
MsgBox "Range is invalid"
End If
End Sub
如果你打印出裏面VBA的Range對象的地址,它會在正確的順序打印的地址。所以,如果你通過
A6:A5
,它會知道你實際上是指
A5:A6
。
你可以用它來創建一個UDF:
編輯:
我誤解了這個問題。所以,我修改了我的答案,以糾正錯誤。
注意:這基本上是米哈爾Turczyn的回答,在UDF的形式改寫:
Function IS_RANGE_VALID(s As String) As Boolean
IS_RANGE_VALID = (Range(s).Rows.Count = 1 And Range(s).Columns.Count > 1)
End Function
結果:
╔═══╦══════════╦═══════╗
║ ║ A ║ B ║
╠═══╬══════════╬═══════╣
║ 1 ║ A11:Z4 ║ FALSE ║
║ 2 ║ D8:H7 ║ FALSE ║
║ 3 ║ B112:H80 ║ FALSE ║
║ 4 ║ M5:P45 ║ FALSE ║
║ 5 ║ A5:A5 ║ FALSE ║
║ 6 ║ A11:Z11 ║ TRUE ║
║ 7 ║ D8:H8 ║ TRUE ║
║ 8 ║ A5:M5 ║ TRUE ║
╚═══╩══════════╩═══════╝
注意:就像我問你評論,爲什麼
M5:P45
無效?如果這是一個錯字,那麼這應該適合你。否則,您必須更清楚地瞭解您用於確定範圍有效性的標準。
爲什麼'M5:P45'無效? – Mahesh
範圍'「A5,D5,G5:H5」'意味着返回有效或無效?它是一排,四個不同的列,理論上符合您的要求。 – YowE3K
@Mahesh我只想要同一行,所以當它的M5:P45無效。 – KaviSuja