範囲変数が文字列として格納されています。私は与えられた範囲が有効であるかどうかを確認するだけのアリです。たとえば、A11:Z4, D8:H7, B112:H80, M5:P45
が無効、A5:A5
が無効(1つのシナリオ)、A11:Z11, D8:H8, A5:M5
が有効です。私は同じ行、異なる列にしたいです。指定された範囲が有効かどうかVBAで確認してください
どうすればこのことができますか?ここで
範囲変数が文字列として格納されています。私は与えられた範囲が有効であるかどうかを確認するだけのアリです。たとえば、A11:Z4, D8:H7, B112:H80, M5:P45
が無効、A5:A5
が無効(1つのシナリオ)、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
@MichalなぜここにRange(rng).Rows.Count = 1ここでチェックしますか? D5:M5の場合は動作しません。実際には範囲をコピーする必要があります.D5の後にコピーした行があります。したがって、この場合Range(rng).Countは常に1より大きい。 – KaviSuja
@ KaviSuja 'Range(" D5:M5 ")。Rows.Count'は1になります。 5、その範囲内)。範囲に余分な行が含まれている場合、たとえば'' D5:M10 "'の場合、範囲が無効であるというあなた自身の定義によって。 – YowE3K
@ YowE3K修正済み:) –
あなたはVBA内でRangeオブジェクトのアドレスをプリントアウトした場合、それが適切な順序でアドレスを印刷します。したがって、
A6:A5
を渡すと、実際には
A5:A6
を参照していることがわかります。
あなたはUDFを作成するためにそれを使用することができます:
編集:
は、私が質問を誤解。だから私は間違いを訂正するために私の答えを修正しました。
注:これは基本的にUDF形式で書き直すミハルTurczynの答え、次のとおりです。
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 "は有効または無効として返されますか?これは単一行と4つの異なる列なので、理論上は要件を満たしています。 – YowE3K
@Mahesh私は同じ行だけを必要とするので、M5:P45が有効でないとき。 – KaviSuja