0

次の質問があります。Excelのセル範囲内の特定のセルに日付値(短い日付、つまり12.3.2012)または特定の単語が含まれているかどうかをマクロで確認したい。

次のコード例で自分自身を説明しようとします。

Private Sub typedata()
Dim x, y
For x = 12 To 13
 For y = 16 To 71

 If isDate(Cells(x, y)) <> True then
    MsgBox "Please enter correct data"
    Exit Sub
 elseIF Cells(x,y) <> "certain word" Then
    MsgBox "Please enter correct data"
    Exit Sub
 End If

 Next y
Next x
End Sub

正しいコードを見つけるための助けに感謝します。

4

1 に答える 1

1

まず、xとyが間違った方向にあるのではないかと思います(確かではありません)。Cells関数は引数(行、列)を使用し、データ範囲が非常に短い(行12から13)ことはまれですが、データ範囲が非常に広い(列16から71)ことはまれです。(あなたのコードは正しいかもしれません、私はそれが珍しくてあなたがチェックしたいと思うかもしれない何かに注意しているだけです。)

実際に探しているのはAnd演算子ですが、もう1つ注意すべき点は、特定の単語テストでは大文字と小文字が区別されることです。したがって、私は通常、両方を大文字に変換して比較します。

最後に、問題がどこにあるのかをユーザーに伝えたい場合があります。

また、バリアントから整数への変換コストを回避するために、変数を型として宣言することをお勧めします。とにかくIntは内部でlongに変換されるため、VBA(VB.Netではなく)では整数ではなくLongを常に使用します。

これは迅速で汚れており、わずかにテストされていますが、正しい方向を示す必要があります。

Private Sub typedata()
Dim x As Long, y As Long
For x = 12 To 13

    For y = 16 To 71

        If IsDate(Cells(x, y)) <> True And UCase(Cells(x, y)) <> UCase("certain word") Then
            MsgBox "Please enter correct data into cell " & Cells(x, y).Address
            Exit Sub
        End If

    Next y
Next x

End Sub
于 2012-11-23T22:39:59.653 に答える