Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5135 / 13644 ツリー ←次へ | 前へ→

【52445】条件判定 gigi 07/11/14(水) 16:32 質問[未読]
【52448】Re:条件判定 Jaka 07/11/14(水) 16:49 発言[未読]
【52455】Re:条件判定 gigi 07/11/14(水) 18:37 お礼[未読]
【52458】Re:条件判定 ichinose 07/11/14(水) 21:01 発言[未読]
【52459】Re:条件判定 gigi 07/11/14(水) 21:11 お礼[未読]

【52445】条件判定
質問  gigi  - 07/11/14(水) 16:32 -

引用なし
パスワード
   はじめて投稿いたします。
よろしくお願いします。

if文に関して、
「もしセル内に数値が入っていたら、、、」
といった条件を書きたいのですが、どうすれば良いのでしょうか。

specialcellsを使うのかと考えたのですが、
どうもうまくいきません。

どうぞよろしくおねがいします。

【52448】Re:条件判定
発言  Jaka  - 07/11/14(水) 16:49 -

引用なし
パスワード
   徹底したいのなら、こんなのとか。

If Application.IsNumber(Range("A1").Value) Then
  MsgBox "数値"
Else
  MsgBox "数値以外"
End If

【52455】Re:条件判定
お礼  gigi  - 07/11/14(水) 18:37 -

引用なし
パスワード
   Jakaさん、どうもありがとうございます。
解決いたしました。

ところで、「徹底したいなら」とありましたが、ほかにもやり方があるのでしょうか。
ヘルプでapplicationのobjectを見てみたところ、アプリケーション全体を現すとかかれており、
なんとなく、「数値かどうか」を判定するだけに使うには、壮大な感じがします。

抽象的な質問ですみません。
よろしくお願いします。

【52458】Re:条件判定
発言  ichinose  - 07/11/14(水) 21:01 -

引用なし
パスワード
   ▼Jakaさん、gigi さん、こんばんは。

>ヘルプでapplicationのobjectを見てみたところ、アプリケーション全体を現すとかかれており、
>なんとなく、「数値かどうか」を判定するだけに使うには、壮大な感じがします。
Excelを開けば存在しているオブジェクトですから、↑こういう受け取り方はしなくてもよいと思いますよ!!
Excel全体を表すオブジェクトから、数値か否かを判定するメソッドを利用する。
もし、自作すればそこそこのステップ数を有する判定プログラムををたった一行でやってくれる道具なのですから・・・。

Application.IsNumberは、ワークシート関数のIsnumber関数をVBAコード内で使用する場合の書式です。

また、VBAの関数にもIsNumericという数値判定の関数があります。

今、セルA1が数値か否かを

1 Application.IsNumber(Range("a1").Value)
2 Application.IsNumber(Range("a1"))
3 IsNumeric(Range("a1").Value)
4 IsNumeric(Range("a1"))

上記の4つの例で試して見ます。


新規ブックの標準モジュールに
'====================================================================
Sub test()
  With Range("a1")
    .EntireColumn.ColumnWidth = 15
    .NumberFormatLocal = "G/標準"
    .Value = 100
    MsgBox "a1=100 が入力されています"
    MsgBox "1 Application.IsNumber(Range(""a1"").Value) =" & _
      Application.IsNumber(Range("a1").Value) & vbCrLf & _
      "2 Application.IsNumber(Range(""a1"")) = " & _
      Application.IsNumber(Range("a1")) & vbCrLf & _
      "3 IsNumeric(Range(""a1"").value) = " & _
      IsNumeric(Range("a1").Value) & vbCrLf & _
      "4 IsNumeric(Range(""a1"")) = " & _
      IsNumeric(Range("a1")) & vbCrLf & _
      "とセルA1が100の場合はご覧のように全てTrueを返しますが・・・"
    .Clear
    MsgBox "A1を未入力状態に戻しました"
    MsgBox "1 Application.IsNumber(Range(""a1"").Value) =" & _
      Application.IsNumber(Range("a1").Value) & vbCrLf & _
      "2 Application.IsNumber(Range(""a1"")) = " & _
      Application.IsNumber(Range("a1")) & vbCrLf & _
      "3 IsNumeric(Range(""a1"").value) = " & _
      IsNumeric(Range("a1").Value) & vbCrLf & _
      "4 IsNumeric(Range(""a1"")) = " & _
      IsNumeric(Range("a1")) & vbCrLf & _
      "とセルA1が未入力状態の場合は、1と2は、Falseを返します。" & vbCrLf & _
      "つまり、1 と 2は、未入力と数値を区別しています"
    .Value = Date
    MsgBox "a1=" & Date & " が入力されています"
    MsgBox "1 Application.IsNumber(Range(""a1"").Value) =" & _
      Application.IsNumber(Range("a1").Value) & vbCrLf & _
      "2 Application.IsNumber(Range(""a1"")) = " & _
      Application.IsNumber(Range("a1")) & vbCrLf & _
      "3 IsNumeric(Range(""a1"").value) = " & _
      IsNumeric(Range("a1").Value) & vbCrLf & _
      "4 IsNumeric(Range(""a1"")) = " & _
      IsNumeric(Range("a1")) & vbCrLf & _
      "とセルA1が日付の場合は、2以外は、Falseを返します。" & vbCrLf & _
      "つまり、2以外は、日付と数値を区別しています"
    MsgBox "上記の結果からは、" & vbCrLf & _
       "1の Application.IsNumber(Range(""a1"").Value)が" & vbCrLf & _
       "数値判定をより徹底しているということが言えます"
    End With
End Sub


上記のtestを実行して、その結果を検討してみてください。

【52459】Re:条件判定
お礼  gigi  - 07/11/14(水) 21:11 -

引用なし
パスワード
   ichinoseさん、どうもありがとうございました。
testプログラムも、とてもわかりやすかったです。

5135 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free